diff --git a/README.md b/README.md index 2b2e5e30384..9c48670a6ec 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,8 @@ For a guided tour, take a look at the [quick start guide](https://grpc.io/docs/quickstart/java.html) or the more explanatory [gRPC basics](https://grpc.io/docs/tutorials/basic/java.html). -The [examples](https://github.com/grpc/grpc-java/tree/v1.24.0/examples) and the -[Android example](https://github.com/grpc/grpc-java/tree/v1.24.0/examples/android) +The [examples](https://github.com/grpc/grpc-java/tree/v1.24.2/examples) and the +[Android example](https://github.com/grpc/grpc-java/tree/v1.24.2/examples/android) are standalone projects that showcase the usage of gRPC. Download @@ -42,37 +42,37 @@ Download [the JARs][]. Or for Maven with non-Android, add to your `pom.xml`: io.grpc grpc-netty-shaded - 1.24.0 + 1.24.2 io.grpc grpc-protobuf - 1.24.0 + 1.24.2 io.grpc grpc-stub - 1.24.0 + 1.24.2 ``` Or for Gradle with non-Android, add to your dependencies: ```gradle -implementation 'io.grpc:grpc-netty-shaded:1.24.0' -implementation 'io.grpc:grpc-protobuf:1.24.0' -implementation 'io.grpc:grpc-stub:1.24.0' +implementation 'io.grpc:grpc-netty-shaded:1.24.2' +implementation 'io.grpc:grpc-protobuf:1.24.2' +implementation 'io.grpc:grpc-stub:1.24.2' ``` For Android client, use `grpc-okhttp` instead of `grpc-netty-shaded` and `grpc-protobuf-lite` instead of `grpc-protobuf`: ```gradle -implementation 'io.grpc:grpc-okhttp:1.24.0' -implementation 'io.grpc:grpc-protobuf-lite:1.24.0' -implementation 'io.grpc:grpc-stub:1.24.0' +implementation 'io.grpc:grpc-okhttp:1.24.2' +implementation 'io.grpc:grpc-protobuf-lite:1.24.2' +implementation 'io.grpc:grpc-stub:1.24.2' ``` [the JARs]: -https://search.maven.org/search?q=g:io.grpc%20AND%20v:1.24.0 +https://search.maven.org/search?q=g:io.grpc%20AND%20v:1.24.2 Development snapshots are available in [Sonatypes's snapshot repository](https://oss.sonatype.org/content/repositories/snapshots/). @@ -104,7 +104,7 @@ For protobuf-based codegen integrated with the Maven build system, you can use com.google.protobuf:protoc:3.9.0:exe:${os.detected.classifier} grpc-java - io.grpc:protoc-gen-grpc-java:1.24.0:exe:${os.detected.classifier} + io.grpc:protoc-gen-grpc-java:1.24.2:exe:${os.detected.classifier} @@ -134,7 +134,7 @@ protobuf { } plugins { grpc { - artifact = 'io.grpc:protoc-gen-grpc-java:1.24.0' + artifact = 'io.grpc:protoc-gen-grpc-java:1.24.2' } } generateProtoTasks { diff --git a/alts/src/main/java/io/grpc/alts/ComputeEngineChannelBuilder.java b/alts/src/main/java/io/grpc/alts/ComputeEngineChannelBuilder.java index f12de57a8a2..d9eaba8cc7c 100644 --- a/alts/src/main/java/io/grpc/alts/ComputeEngineChannelBuilder.java +++ b/alts/src/main/java/io/grpc/alts/ComputeEngineChannelBuilder.java @@ -39,7 +39,7 @@ * using ALTS if applicable and using TLS as fallback. */ public final class ComputeEngineChannelBuilder - extends ForwardingChannelBuilder { + extends ForwardingChannelBuilder { private final NettyChannelBuilder delegate; diff --git a/android-interop-testing/app/build.gradle b/android-interop-testing/app/build.gradle index a1afc9a33ef..5ab6ca70eb7 100644 --- a/android-interop-testing/app/build.gradle +++ b/android-interop-testing/app/build.gradle @@ -42,7 +42,7 @@ protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.9.0' } plugins { javalite { artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0" } - grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.24.2' // CURRENT_GRPC_VERSION } } generateProtoTasks { @@ -71,11 +71,11 @@ dependencies { implementation 'junit:junit:4.12' // You need to build grpc-java to obtain the grpc libraries below. - implementation 'io.grpc:grpc-auth:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-okhttp:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-protobuf-lite:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-stub:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-testing:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-auth:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-okhttp:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-protobuf-lite:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-stub:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-testing:1.24.2' // CURRENT_GRPC_VERSION // workaround for https://github.com/google/protobuf/issues/1889 protobuf 'com.google.protobuf:protobuf-java:3.0.2' diff --git a/android/build.gradle b/android/build.gradle index 3a4f4388aef..c73807ff68c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.android.library' group = "io.grpc" -version = "1.24.1-SNAPSHOT" // CURRENT_GRPC_VERSION +version = "1.24.2" // CURRENT_GRPC_VERSION description = 'gRPC: Android' buildscript { @@ -47,9 +47,9 @@ dependencies { errorprone 'com.google.errorprone:error_prone_core:2.3.3' errorproneJavac 'com.google.errorprone:javac:9+181-r4173-1' - implementation 'io.grpc:grpc-core:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-core:1.24.2' // CURRENT_GRPC_VERSION - testImplementation 'io.grpc:grpc-okhttp:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + testImplementation 'io.grpc:grpc-okhttp:1.24.2' // CURRENT_GRPC_VERSION testImplementation 'junit:junit:4.12' testImplementation 'org.robolectric:robolectric:3.7.1' testImplementation 'com.google.truth:truth:0.45' diff --git a/api/src/test/java/io/grpc/NameResolverRegistryTest.java b/api/src/test/java/io/grpc/NameResolverRegistryTest.java index 1870f312868..abbe10af2ac 100644 --- a/api/src/test/java/io/grpc/NameResolverRegistryTest.java +++ b/api/src/test/java/io/grpc/NameResolverRegistryTest.java @@ -21,6 +21,7 @@ import static org.mockito.Mockito.mock; import io.grpc.NameResolver.ServiceConfigParser; +import io.grpc.internal.BaseDnsNameResolverProvider; import io.grpc.internal.DnsNameResolverProvider; import java.lang.Thread.UncaughtExceptionHandler; import java.net.URI; @@ -152,8 +153,11 @@ public void newNameResolver_noProvider() { @Test public void baseProviders() { List providers = NameResolverRegistry.getDefaultRegistry().providers(); - assertThat(providers).hasSize(1); - assertThat(providers.get(0)).isInstanceOf(DnsNameResolverProvider.class); + assertThat(providers).hasSize(2); + // 2 name resolvers from grpclb and core + for (NameResolverProvider provider : providers) { + assertThat(provider).isInstanceOf(BaseDnsNameResolverProvider.class); + } assertThat(NameResolverRegistry.getDefaultRegistry().asFactory().getDefaultScheme()) .isEqualTo("dns"); } diff --git a/benchmarks/build.gradle b/benchmarks/build.gradle index cc7a9a6c176..3315770081c 100644 --- a/benchmarks/build.gradle +++ b/benchmarks/build.gradle @@ -96,3 +96,12 @@ applicationDistribution.into("bin") { from(benchmark_worker) fileMode = 0755 } + +publishing { + publications { + maven(MavenPublication) { + artifact distZip + artifact distTar + } + } +} diff --git a/build.gradle b/build.gradle index 10080b144c4..e103f6cb8c0 100644 --- a/build.gradle +++ b/build.gradle @@ -48,7 +48,7 @@ subprojects { } group = "io.grpc" - version = "1.24.1-SNAPSHOT" // CURRENT_GRPC_VERSION + version = "1.24.2" // CURRENT_GRPC_VERSION sourceCompatibility = 1.7 targetCompatibility = 1.7 @@ -185,7 +185,7 @@ subprojects { libraries = [ android_annotations: "com.google.android:annotations:4.1.1.4", animalsniffer_annotations: "org.codehaus.mojo:animal-sniffer-annotations:1.17", - errorprone: "com.google.errorprone:error_prone_annotations:2.3.2", + errorprone: "com.google.errorprone:error_prone_annotations:2.3.3", gson: "com.google.code.gson:gson:2.7", guava: "com.google.guava:guava:${guavaVersion}", hpack: 'com.twitter:hpack:0.10.1', @@ -201,7 +201,7 @@ subprojects { opencensus_impl: "io.opencensus:opencensus-impl:${opencensusVersion}", opencensus_impl_lite: "io.opencensus:opencensus-impl-lite:${opencensusVersion}", instrumentation_api: 'com.google.instrumentation:instrumentation-api:0.4.3', - perfmark: 'io.perfmark:perfmark-api:0.17.0', + perfmark: 'io.perfmark:perfmark-api:0.19.0', protobuf: "com.google.protobuf:protobuf-java:${protobufVersion}", protobuf_lite: "com.google.protobuf:protobuf-lite:3.0.1", protoc_lite: "com.google.protobuf:protoc-gen-javalite:3.0.0", diff --git a/compiler/src/test/golden/TestDeprecatedService.java.txt b/compiler/src/test/golden/TestDeprecatedService.java.txt index cecce5b3540..8aef8958caa 100644 --- a/compiler/src/test/golden/TestDeprecatedService.java.txt +++ b/compiler/src/test/golden/TestDeprecatedService.java.txt @@ -21,7 +21,7 @@ import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall; * */ @javax.annotation.Generated( - value = "by gRPC proto compiler (version 1.24.1-SNAPSHOT)", + value = "by gRPC proto compiler (version 1.24.2)", comments = "Source: grpc/testing/compiler/test.proto") @java.lang.Deprecated public final class TestDeprecatedServiceGrpc { diff --git a/compiler/src/test/golden/TestService.java.txt b/compiler/src/test/golden/TestService.java.txt index 2998d979562..b4b24e9dded 100644 --- a/compiler/src/test/golden/TestService.java.txt +++ b/compiler/src/test/golden/TestService.java.txt @@ -21,7 +21,7 @@ import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall; * */ @javax.annotation.Generated( - value = "by gRPC proto compiler (version 1.24.1-SNAPSHOT)", + value = "by gRPC proto compiler (version 1.24.2)", comments = "Source: grpc/testing/compiler/test.proto") public final class TestServiceGrpc { diff --git a/compiler/src/testLite/golden/TestDeprecatedService.java.txt b/compiler/src/testLite/golden/TestDeprecatedService.java.txt index 800b42e5629..6d7a141cd08 100644 --- a/compiler/src/testLite/golden/TestDeprecatedService.java.txt +++ b/compiler/src/testLite/golden/TestDeprecatedService.java.txt @@ -21,7 +21,7 @@ import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall; * */ @javax.annotation.Generated( - value = "by gRPC proto compiler (version 1.24.1-SNAPSHOT)", + value = "by gRPC proto compiler (version 1.24.2)", comments = "Source: grpc/testing/compiler/test.proto") @java.lang.Deprecated public final class TestDeprecatedServiceGrpc { diff --git a/compiler/src/testLite/golden/TestService.java.txt b/compiler/src/testLite/golden/TestService.java.txt index 2d5fb4a40d8..681a456f5dd 100644 --- a/compiler/src/testLite/golden/TestService.java.txt +++ b/compiler/src/testLite/golden/TestService.java.txt @@ -21,7 +21,7 @@ import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall; * */ @javax.annotation.Generated( - value = "by gRPC proto compiler (version 1.24.1-SNAPSHOT)", + value = "by gRPC proto compiler (version 1.24.2)", comments = "Source: grpc/testing/compiler/test.proto") public final class TestServiceGrpc { diff --git a/core/src/main/java/io/grpc/internal/BaseDnsNameResolverProvider.java b/core/src/main/java/io/grpc/internal/BaseDnsNameResolverProvider.java new file mode 100644 index 00000000000..b623ced6b78 --- /dev/null +++ b/core/src/main/java/io/grpc/internal/BaseDnsNameResolverProvider.java @@ -0,0 +1,70 @@ +/* + * 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.internal; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.base.Stopwatch; +import io.grpc.InternalServiceProviders; +import io.grpc.NameResolver; +import io.grpc.NameResolverProvider; +import java.net.URI; + +/** + * Base provider of name resolvers for name agnostic consumption. + */ +public abstract class BaseDnsNameResolverProvider extends NameResolverProvider { + + private static final String SCHEME = "dns"; + + @VisibleForTesting + public static final String ENABLE_GRPCLB_PROPERTY_NAME = + "io.grpc.internal.DnsNameResolverProvider.enable_grpclb"; + + /** Returns boolean value of system property {@link #ENABLE_GRPCLB_PROPERTY_NAME}. */ + protected abstract boolean isSrvEnabled(); + + @Override + public DnsNameResolver newNameResolver(URI targetUri, NameResolver.Args args) { + if (SCHEME.equals(targetUri.getScheme())) { + String targetPath = Preconditions.checkNotNull(targetUri.getPath(), "targetPath"); + Preconditions.checkArgument(targetPath.startsWith("/"), + "the path component (%s) of the target (%s) must start with '/'", targetPath, targetUri); + String name = targetPath.substring(1); + return new DnsNameResolver( + targetUri.getAuthority(), + name, + args, + GrpcUtil.SHARED_CHANNEL_EXECUTOR, + Stopwatch.createUnstarted(), + InternalServiceProviders.isAndroid(getClass().getClassLoader()), + isSrvEnabled()); + } else { + return null; + } + } + + @Override + public String getDefaultScheme() { + return SCHEME; + } + + @Override + protected boolean isAvailable() { + return true; + } +} diff --git a/core/src/main/java/io/grpc/internal/DnsNameResolver.java b/core/src/main/java/io/grpc/internal/DnsNameResolver.java index cd3611c705e..f802cf09aae 100644 --- a/core/src/main/java/io/grpc/internal/DnsNameResolver.java +++ b/core/src/main/java/io/grpc/internal/DnsNameResolver.java @@ -92,8 +92,6 @@ final class DnsNameResolver extends NameResolver { System.getProperty("io.grpc.internal.DnsNameResolverProvider.enable_jndi", "true"); private static final String JNDI_LOCALHOST_PROPERTY = System.getProperty("io.grpc.internal.DnsNameResolverProvider.enable_jndi_localhost", "false"); - private static final String JNDI_SRV_PROPERTY = - System.getProperty("io.grpc.internal.DnsNameResolverProvider.enable_grpclb", "false"); private static final String JNDI_TXT_PROPERTY = System.getProperty("io.grpc.internal.DnsNameResolverProvider.enable_service_config", "false"); @@ -117,8 +115,6 @@ final class DnsNameResolver extends NameResolver { @VisibleForTesting static boolean enableJndiLocalhost = Boolean.parseBoolean(JNDI_LOCALHOST_PROPERTY); @VisibleForTesting - static boolean enableSrv = Boolean.parseBoolean(JNDI_SRV_PROPERTY); - @VisibleForTesting static boolean enableTxt = Boolean.parseBoolean(JNDI_TXT_PROPERTY); private static final ResourceResolverFactory resourceResolverFactory = @@ -147,14 +143,22 @@ final class DnsNameResolver extends NameResolver { private ResolutionResults cachedResolutionResults; private boolean shutdown; private Executor executor; + private final boolean enableSrv; + private boolean resolving; // The field must be accessed from syncContext, although the methods on an Listener2 can be called // from any thread. private NameResolver.Listener2 listener; - DnsNameResolver(@Nullable String nsAuthority, String name, Args args, - Resource executorResource, Stopwatch stopwatch, boolean isAndroid) { + DnsNameResolver( + @Nullable String nsAuthority, + String name, + Args args, + Resource executorResource, + Stopwatch stopwatch, + boolean isAndroid, + boolean enableSrv) { Preconditions.checkNotNull(args, "args"); // TODO: if a DNS server is provided as nsAuthority, use it. // https://www.captechconsulting.com/blogs/accessing-the-dusty-corners-of-dns-with-java @@ -176,6 +180,7 @@ final class DnsNameResolver extends NameResolver { this.stopwatch = Preconditions.checkNotNull(stopwatch, "stopwatch"); this.syncContext = Preconditions.checkNotNull(args.getSynchronizationContext(), "syncContext"); + this.enableSrv = enableSrv; } @Override diff --git a/core/src/main/java/io/grpc/internal/DnsNameResolverProvider.java b/core/src/main/java/io/grpc/internal/DnsNameResolverProvider.java index 67e60351631..06ff1c85953 100644 --- a/core/src/main/java/io/grpc/internal/DnsNameResolverProvider.java +++ b/core/src/main/java/io/grpc/internal/DnsNameResolverProvider.java @@ -16,13 +16,6 @@ package io.grpc.internal; -import com.google.common.base.Preconditions; -import com.google.common.base.Stopwatch; -import io.grpc.InternalServiceProviders; -import io.grpc.NameResolver; -import io.grpc.NameResolverProvider; -import java.net.URI; - /** * A provider for {@link DnsNameResolver}. * @@ -38,41 +31,18 @@ *
  • {@code "dns:///foo.googleapis.com"} (without port)
  • * */ -public final class DnsNameResolverProvider extends NameResolverProvider { - - private static final String SCHEME = "dns"; +public final class DnsNameResolverProvider extends BaseDnsNameResolverProvider { - @Override - public DnsNameResolver newNameResolver(URI targetUri, NameResolver.Args args) { - if (SCHEME.equals(targetUri.getScheme())) { - String targetPath = Preconditions.checkNotNull(targetUri.getPath(), "targetPath"); - Preconditions.checkArgument(targetPath.startsWith("/"), - "the path component (%s) of the target (%s) must start with '/'", targetPath, targetUri); - String name = targetPath.substring(1); - return new DnsNameResolver( - targetUri.getAuthority(), - name, - args, - GrpcUtil.SHARED_CHANNEL_EXECUTOR, - Stopwatch.createUnstarted(), - InternalServiceProviders.isAndroid(getClass().getClassLoader())); - } else { - return null; - } - } - - @Override - public String getDefaultScheme() { - return SCHEME; - } + private static final boolean SRV_ENABLED = + Boolean.parseBoolean(System.getProperty(ENABLE_GRPCLB_PROPERTY_NAME, "false")); @Override - protected boolean isAvailable() { - return true; + protected boolean isSrvEnabled() { + return SRV_ENABLED; } @Override - protected int priority() { + public int priority() { return 5; } } diff --git a/core/src/main/java/io/grpc/internal/GrpcUtil.java b/core/src/main/java/io/grpc/internal/GrpcUtil.java index 9acad6b496d..6ed578b542e 100644 --- a/core/src/main/java/io/grpc/internal/GrpcUtil.java +++ b/core/src/main/java/io/grpc/internal/GrpcUtil.java @@ -195,7 +195,7 @@ public byte[] parseAsciiString(byte[] serialized) { public static final Splitter ACCEPT_ENCODING_SPLITTER = Splitter.on(',').trimResults(); - private static final String IMPLEMENTATION_VERSION = "1.24.1-SNAPSHOT"; // CURRENT_GRPC_VERSION + private static final String IMPLEMENTATION_VERSION = "1.24.2"; // CURRENT_GRPC_VERSION /** * The default timeout in nanos for a keepalive ping request. diff --git a/core/src/test/java/io/grpc/internal/DnsNameResolverProviderTest.java b/core/src/test/java/io/grpc/internal/DnsNameResolverProviderTest.java index 9dc402a93d6..3f5df9bdbbb 100644 --- a/core/src/test/java/io/grpc/internal/DnsNameResolverProviderTest.java +++ b/core/src/test/java/io/grpc/internal/DnsNameResolverProviderTest.java @@ -16,9 +16,12 @@ package io.grpc.internal; +import static com.google.common.truth.Truth.assertThat; +import static io.grpc.internal.BaseDnsNameResolverProvider.ENABLE_GRPCLB_PROPERTY_NAME; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; import static org.mockito.Mockito.mock; import io.grpc.NameResolver; @@ -60,4 +63,11 @@ public void newNameResolver() { assertNull( provider.newNameResolver(URI.create("notdns:///localhost:443"), args)); } + + @Test + public void isSrvEnabled_falseByDefault() { + assumeTrue(System.getProperty(ENABLE_GRPCLB_PROPERTY_NAME) == null); + + assertThat(provider.isSrvEnabled()).isFalse(); + } } diff --git a/core/src/test/java/io/grpc/internal/DnsNameResolverTest.java b/core/src/test/java/io/grpc/internal/DnsNameResolverTest.java index 361ee69de3c..1ab53c8adbf 100644 --- a/core/src/test/java/io/grpc/internal/DnsNameResolverTest.java +++ b/core/src/test/java/io/grpc/internal/DnsNameResolverTest.java @@ -165,18 +165,21 @@ private DnsNameResolver newResolver( final ProxyDetector proxyDetector, Stopwatch stopwatch, boolean isAndroid) { - DnsNameResolver dnsResolver = new DnsNameResolver( - null, - name, + NameResolver.Args args = NameResolver.Args.newBuilder() .setDefaultPort(defaultPort) .setProxyDetector(proxyDetector) .setSynchronizationContext(syncContext) .setServiceConfigParser(mock(ServiceConfigParser.class)) - .build(), - fakeExecutorResource, - stopwatch, - isAndroid); + .build(); + return newResolver(name, stopwatch, isAndroid, args); + } + + private DnsNameResolver newResolver( + String name, Stopwatch stopwatch, boolean isAndroid, NameResolver.Args args) { + DnsNameResolver dnsResolver = + new DnsNameResolver( + null, name, args, fakeExecutorResource, stopwatch, isAndroid, /* enableSrv= */ false); // By default, using the mocked ResourceResolver to avoid I/O dnsResolver.setResourceResolver(new JndiResourceResolver(recordFetcher)); return dnsResolver; diff --git a/cronet/README.md b/cronet/README.md index 613f3fb265c..6619706d9c1 100644 --- a/cronet/README.md +++ b/cronet/README.md @@ -26,7 +26,7 @@ In your app module's `build.gradle` file, include a dependency on both `grpc-cro Google Play Services Client Library for Cronet ``` -implementation 'io.grpc:grpc-cronet:1.24.0' +implementation 'io.grpc:grpc-cronet:1.24.2' implementation 'com.google.android.gms:play-services-cronet:16.0.0' ``` diff --git a/cronet/build.gradle b/cronet/build.gradle index 866e092490d..b6c39fa518f 100644 --- a/cronet/build.gradle +++ b/cronet/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.android.library' group = "io.grpc" -version = "1.24.1-SNAPSHOT" // CURRENT_GRPC_VERSION +version = "1.24.2" // CURRENT_GRPC_VERSION description = "gRPC: Cronet Android" buildscript { @@ -54,8 +54,8 @@ dependencies { errorprone 'com.google.errorprone:error_prone_core:2.3.3' errorproneJavac 'com.google.errorprone:javac:9+181-r4173-1' - implementation 'io.grpc:grpc-core:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - testImplementation 'io.grpc:grpc-testing:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-core:1.24.2' // CURRENT_GRPC_VERSION + testImplementation 'io.grpc:grpc-testing:1.24.2' // CURRENT_GRPC_VERSION implementation 'org.chromium.net:cronet-api:76.3809.111' testImplementation 'org.chromium.net:cronet-embedded:66.3359.158' diff --git a/documentation/android-channel-builder.md b/documentation/android-channel-builder.md index eb006c3c361..83dfc06cdfb 100644 --- a/documentation/android-channel-builder.md +++ b/documentation/android-channel-builder.md @@ -36,8 +36,8 @@ In your `build.gradle` file, include a dependency on both `grpc-android` and `grpc-okhttp`: ``` -implementation 'io.grpc:grpc-android:1.24.0' -implementation 'io.grpc:grpc-okhttp:1.24.0' +implementation 'io.grpc:grpc-android:1.24.2' +implementation 'io.grpc:grpc-okhttp:1.24.2' ``` You will also need permission to access the device's network state in your diff --git a/examples/android/clientcache/app/build.gradle b/examples/android/clientcache/app/build.gradle index 050add43bfb..ff8c77f1ee3 100644 --- a/examples/android/clientcache/app/build.gradle +++ b/examples/android/clientcache/app/build.gradle @@ -31,7 +31,7 @@ protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.4.0' } plugins { javalite { artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0" } - grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.24.2' // CURRENT_GRPC_VERSION } } generateProtoTasks { @@ -49,12 +49,12 @@ dependencies { implementation 'com.android.support:appcompat-v7:27.0.2' // You need to build grpc-java to obtain these libraries below. - implementation 'io.grpc:grpc-okhttp:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-protobuf-lite:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-stub:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-okhttp:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-protobuf-lite:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-stub:1.24.2' // CURRENT_GRPC_VERSION implementation 'javax.annotation:javax.annotation-api:1.2' testImplementation 'junit:junit:4.12' testImplementation 'com.google.truth:truth:0.45' - testImplementation 'io.grpc:grpc-testing:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + testImplementation 'io.grpc:grpc-testing:1.24.2' // CURRENT_GRPC_VERSION } diff --git a/examples/android/helloworld/app/build.gradle b/examples/android/helloworld/app/build.gradle index 4546175155a..9cf2e353a3b 100644 --- a/examples/android/helloworld/app/build.gradle +++ b/examples/android/helloworld/app/build.gradle @@ -30,7 +30,7 @@ protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.9.0' } plugins { javalite { artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0" } - grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.24.2' // CURRENT_GRPC_VERSION } } generateProtoTasks { @@ -48,8 +48,8 @@ dependencies { implementation 'com.android.support:appcompat-v7:27.0.2' // You need to build grpc-java to obtain these libraries below. - implementation 'io.grpc:grpc-okhttp:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-protobuf-lite:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-stub:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-okhttp:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-protobuf-lite:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-stub:1.24.2' // CURRENT_GRPC_VERSION implementation 'javax.annotation:javax.annotation-api:1.2' } diff --git a/examples/android/routeguide/app/build.gradle b/examples/android/routeguide/app/build.gradle index 49b889c97ef..58ad7c7b10a 100644 --- a/examples/android/routeguide/app/build.gradle +++ b/examples/android/routeguide/app/build.gradle @@ -29,7 +29,7 @@ protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.9.0' } plugins { javalite { artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0" } - grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.24.2' // CURRENT_GRPC_VERSION } } generateProtoTasks { @@ -47,8 +47,8 @@ dependencies { implementation 'com.android.support:appcompat-v7:27.0.2' // You need to build grpc-java to obtain these libraries below. - implementation 'io.grpc:grpc-okhttp:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-protobuf-lite:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-stub:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-okhttp:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-protobuf-lite:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-stub:1.24.2' // CURRENT_GRPC_VERSION implementation 'javax.annotation:javax.annotation-api:1.2' } diff --git a/examples/android/strictmode/app/build.gradle b/examples/android/strictmode/app/build.gradle index 106d6838cf3..3f1b81f5aa3 100644 --- a/examples/android/strictmode/app/build.gradle +++ b/examples/android/strictmode/app/build.gradle @@ -30,7 +30,7 @@ protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.9.0' } plugins { javalite { artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0" } - grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.24.2' // CURRENT_GRPC_VERSION } } generateProtoTasks { @@ -48,8 +48,8 @@ dependencies { implementation 'com.android.support:appcompat-v7:28.0.0' // You need to build grpc-java to obtain these libraries below. - implementation 'io.grpc:grpc-okhttp:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-protobuf-lite:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-stub:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-okhttp:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-protobuf-lite:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-stub:1.24.2' // CURRENT_GRPC_VERSION implementation 'javax.annotation:javax.annotation-api:1.2' } diff --git a/examples/build.gradle b/examples/build.gradle index 45449766ca2..2dbfb45a910 100644 --- a/examples/build.gradle +++ b/examples/build.gradle @@ -21,7 +21,7 @@ targetCompatibility = 1.7 // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. -def grpcVersion = '1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION +def grpcVersion = '1.24.2' // CURRENT_GRPC_VERSION def protobufVersion = '3.9.0' def protocVersion = protobufVersion diff --git a/examples/example-alts/build.gradle b/examples/example-alts/build.gradle index 305ef83cf1f..cceea5b9eba 100644 --- a/examples/example-alts/build.gradle +++ b/examples/example-alts/build.gradle @@ -22,7 +22,7 @@ targetCompatibility = 1.7 // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. -def grpcVersion = '1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION +def grpcVersion = '1.24.2' // CURRENT_GRPC_VERSION def protocVersion = '3.9.0' dependencies { diff --git a/examples/example-gauth/build.gradle b/examples/example-gauth/build.gradle index 45f3957050d..a327ae2c759 100644 --- a/examples/example-gauth/build.gradle +++ b/examples/example-gauth/build.gradle @@ -22,7 +22,7 @@ targetCompatibility = 1.7 // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. -def grpcVersion = '1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION +def grpcVersion = '1.24.2' // CURRENT_GRPC_VERSION def protobufVersion = '3.9.0' def protocVersion = protobufVersion diff --git a/examples/example-gauth/pom.xml b/examples/example-gauth/pom.xml index cf770a82479..e8761961dbe 100644 --- a/examples/example-gauth/pom.xml +++ b/examples/example-gauth/pom.xml @@ -6,13 +6,13 @@ jar - 1.24.1-SNAPSHOT + 1.24.2 example-gauth https://github.com/grpc/grpc-java UTF-8 - 1.24.1-SNAPSHOT + 1.24.2 3.9.0 1.7 diff --git a/examples/example-kotlin/android/helloworld/app/build.gradle b/examples/example-kotlin/android/helloworld/app/build.gradle index 89309c99d98..eaeb2320b69 100644 --- a/examples/example-kotlin/android/helloworld/app/build.gradle +++ b/examples/example-kotlin/android/helloworld/app/build.gradle @@ -52,7 +52,7 @@ protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.9.0' } plugins { javalite { artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0" } - grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.24.2' // CURRENT_GRPC_VERSION } } generateProtoTasks { @@ -72,9 +72,9 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" // You need to build grpc-java to obtain these libraries below. - implementation 'io.grpc:grpc-okhttp:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-protobuf-lite:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION - implementation 'io.grpc:grpc-stub:1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-okhttp:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-protobuf-lite:1.24.2' // CURRENT_GRPC_VERSION + implementation 'io.grpc:grpc-stub:1.24.2' // CURRENT_GRPC_VERSION } repositories { mavenCentral() } diff --git a/examples/example-kotlin/build.gradle b/examples/example-kotlin/build.gradle index 4938032a2c3..26aa80b8da8 100644 --- a/examples/example-kotlin/build.gradle +++ b/examples/example-kotlin/build.gradle @@ -25,7 +25,7 @@ repositories { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. -def grpcVersion = '1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION +def grpcVersion = '1.24.2' // CURRENT_GRPC_VERSION dependencies { def kotlinVersion = plugins.findPlugin("org.jetbrains.kotlin.jvm").kotlinPluginVersion diff --git a/examples/example-tls/build.gradle b/examples/example-tls/build.gradle index e0ab2903a90..cd34702e4e9 100644 --- a/examples/example-tls/build.gradle +++ b/examples/example-tls/build.gradle @@ -22,7 +22,7 @@ targetCompatibility = 1.7 // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. -def grpcVersion = '1.24.1-SNAPSHOT' // CURRENT_GRPC_VERSION +def grpcVersion = '1.24.2' // CURRENT_GRPC_VERSION def nettyTcNativeVersion = '2.0.25.Final' def protocVersion = '3.9.0' diff --git a/examples/example-tls/pom.xml b/examples/example-tls/pom.xml index b5e275282ba..e53ece2e14c 100644 --- a/examples/example-tls/pom.xml +++ b/examples/example-tls/pom.xml @@ -6,13 +6,13 @@ jar - 1.24.1-SNAPSHOT + 1.24.2 example-tls https://github.com/grpc/grpc-java UTF-8 - 1.24.1-SNAPSHOT + 1.24.2 3.9.0 2.0.25.Final diff --git a/examples/pom.xml b/examples/pom.xml index a87c13f424e..294fefdf233 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -6,13 +6,13 @@ jar - 1.24.1-SNAPSHOT + 1.24.2 examples https://github.com/grpc/grpc-java UTF-8 - 1.24.1-SNAPSHOT + 1.24.2 3.9.0 3.9.0 @@ -62,6 +62,11 @@ protobuf-java-util ${protobuf.version} + + com.google.errorprone + error_prone_annotations + 2.3.3 + junit junit diff --git a/grpclb/build.gradle b/grpclb/build.gradle index e141bcd346a..42dff514f3c 100644 --- a/grpclb/build.gradle +++ b/grpclb/build.gradle @@ -16,6 +16,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 testCompile libraries.truth, diff --git a/grpclb/src/main/java/io/grpc/grpclb/SecretGrpclbNameResolverProvider.java b/grpclb/src/main/java/io/grpc/grpclb/SecretGrpclbNameResolverProvider.java new file mode 100644 index 00000000000..1856c78c14e --- /dev/null +++ b/grpclb/src/main/java/io/grpc/grpclb/SecretGrpclbNameResolverProvider.java @@ -0,0 +1,61 @@ +/* + * 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 io.grpc.internal.BaseDnsNameResolverProvider; + +/** + * A provider for {@code io.grpc.internal.DnsNameResolver} for gRPC lb. + * + *

    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: + * + *

      + *
    • {@code "dns:///foo.googleapis.com:8080"} (using default DNS)
    • + *
    • {@code "dns://8.8.8.8/foo.googleapis.com:8080"} (using alternative DNS (not implemented + * yet))
    • + *
    • {@code "dns:///foo.googleapis.com"} (without port)
    • + *
    + * + *

    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