It resolves a target URI whose scheme is {@code "dns"}. The (optional) authority of the target + * URI is reserved for the address of alternative DNS server (not implemented yet). The path of the + * target URI, excluding the leading slash {@code '/'}, is treated as the host name and the optional + * port to be resolved by DNS. Example target URIs: + * + *
Note: the main difference between {@code io.grpc.DnsNameResolver} is service record is enabled + * by default. + */ +// Make it package-private so that it cannot be directly referenced by users. Java service loader +// requires the provider to be public, but we can hide it under a package-private class. +final class SecretGrpclbNameResolverProvider { + + private SecretGrpclbNameResolverProvider() {} + + public static final class Provider extends BaseDnsNameResolverProvider { + + private static final boolean SRV_ENABLED = + Boolean.parseBoolean(System.getProperty(ENABLE_GRPCLB_PROPERTY_NAME, "true")); + + @Override + protected boolean isSrvEnabled() { + return SRV_ENABLED; + } + + @Override + public int priority() { + // Must be higher than DnsNameResolverProvider#priority. + return 6; + } + } +} diff --git a/grpclb/src/main/resources/META-INF/services/io.grpc.NameResolverProvider b/grpclb/src/main/resources/META-INF/services/io.grpc.NameResolverProvider new file mode 100644 index 00000000000..bf02b5e8470 --- /dev/null +++ b/grpclb/src/main/resources/META-INF/services/io.grpc.NameResolverProvider @@ -0,0 +1 @@ +io.grpc.grpclb.SecretGrpclbNameResolverProvider$Provider diff --git a/grpclb/src/test/java/io/grpc/grpclb/SecretGrpclbNameResolverProviderTest.java b/grpclb/src/test/java/io/grpc/grpclb/SecretGrpclbNameResolverProviderTest.java new file mode 100644 index 00000000000..e5d4b3501f2 --- /dev/null +++ b/grpclb/src/test/java/io/grpc/grpclb/SecretGrpclbNameResolverProviderTest.java @@ -0,0 +1,50 @@ +/* + * Copyright 2019 The gRPC Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.grpc.grpclb; + +import static com.google.common.truth.Truth.assertThat; +import static io.grpc.internal.BaseDnsNameResolverProvider.ENABLE_GRPCLB_PROPERTY_NAME; +import static org.junit.Assume.assumeTrue; + +import io.grpc.internal.DnsNameResolverProvider; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class SecretGrpclbNameResolverProviderTest { + + @Test + public void priority_shouldBeHigherThanDefaultDnsNameResolver() { + DnsNameResolverProvider defaultDnsNameResolver = new DnsNameResolverProvider(); + SecretGrpclbNameResolverProvider.Provider grpclbDnsNameResolver = + new SecretGrpclbNameResolverProvider.Provider(); + + assertThat(defaultDnsNameResolver.priority()) + .isLessThan(grpclbDnsNameResolver.priority()); + } + + @Test + public void isSrvEnabled_trueByDefault() { + assumeTrue(System.getProperty(ENABLE_GRPCLB_PROPERTY_NAME) == null); + + SecretGrpclbNameResolverProvider.Provider grpclbDnsNameResolver = + new SecretGrpclbNameResolverProvider.Provider(); + + assertThat(grpclbDnsNameResolver.isSrvEnabled()).isTrue(); + } +} \ No newline at end of file diff --git a/interop-testing/build.gradle b/interop-testing/build.gradle index 775b4ccc88d..bd7264ca27f 100644 --- a/interop-testing/build.gradle +++ b/interop-testing/build.gradle @@ -116,3 +116,12 @@ applicationDistribution.into("bin") { from(grpclb_long_lived_affinity_test_client) fileMode = 0755 } + +publishing { + publications { + maven(MavenPublication) { + artifact distZip + artifact distTar + } + } +} diff --git a/repositories.bzl b/repositories.bzl index 7ab013731b9..3eceb086e94 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -450,9 +450,9 @@ def io_opencensus_grpc_metrics(): def io_perfmark(): jvm_maven_import_external( name = "io_perfmark_perfmark_api", - artifact = "io.perfmark:perfmark-api:0.17.0", + artifact = "io.perfmark:perfmark-api:0.19.0", server_urls = ["http://central.maven.org/maven2"], - artifact_sha256 = "816c11409b8a0c6c9ce1cda14bed526e7b4da0e772da67c5b7b88eefd41520f9", + artifact_sha256 = "b734ba2149712409a44eabdb799f64768578fee0defe1418bb108fe32ea43e1a", licenses = ["notice"], # Apache 2.0 ) diff --git a/services/build.gradle b/services/build.gradle index 9c87031d269..a95b1182b2e 100644 --- a/services/build.gradle +++ b/services/build.gradle @@ -24,6 +24,8 @@ dependencies { compile (libraries.protobuf_util) { // prefer 26.0-android from libraries instead of 20.0 exclude group: 'com.google.guava', module: 'guava' + // prefer 2.3.3 from libraries instead of 2.3.2 + exclude group: 'com.google.errorprone', module: 'error_prone_annotations' } compileOnly libraries.javax_annotation diff --git a/xds/build.gradle b/xds/build.gradle index db4d5255bb1..945731c13ff 100644 --- a/xds/build.gradle +++ b/xds/build.gradle @@ -30,6 +30,8 @@ dependencies { compile (libraries.protobuf_util) { // prefer 26.0-android from libraries instead of 20.0 exclude group: 'com.google.guava', module: 'guava' + // prefer 2.3.3 from libraries instead of 2.3.2 + exclude group: 'com.google.errorprone', module: 'error_prone_annotations' } testCompile project(':grpc-core').sourceSets.test.output