v1.30.0
Note: gRPC-Java no longer exposes many transitive dependencies as "compile" dependencies, but instead specifies them as "runtime" dependencies. Consuming projects using these dependencies directly will need to explicitly add the dependencies to their compile-time classpath.
Behavioral Changes
- netty: Bandwidth delay product (BDP) is enabled by default (#6979). BDP dynamically adjusts flow control window to optimize the network bandwidth utilization. To disable this feature, build channel/server with
NettyChannelBuilder#flowControlWindow
orNettyServerBuilder#flowControlWindow
. ExistingflowControlWindow
users need to useinitialFlowWindowSize
to enable BDP. The default initial window size has remained unchanged, so most users should not see a performance difference. In the future we plan to reduce the default size, which may briefly (up to 4 RTT) slow down new connections as they determine an appropriate BDP.
New Features
- This release adds an xDS URI scheme called
xds
. This is the stable version of the schemexds-experimental
that was introduced in v1.28.0.xds-experimental
scheme will be removed in subsequent releases so you must switch toxds
scheme instead.xds
scheme is a client side implementation of xDSv2 APIs. This allows a gRPC client written in Java to receive configuration from an xDSv2 API compatible server and use that configuration to load balance RPCs. In this release, only the virtual host matching, default path (“” or “/”) matching and cluster route action are supported. The features supported in a given release are documented here. - core: ManagedChannel provides LoadBalancer#Helper with implemented createResolvingOobChannel (#6923).
- stub: Add
ClientCallStreamObserver.disableAutoRequestWithInitial(int)
andServerCallStreamObserver.disableAutoRequest()
that disables all automatic inbound flow-control requests. These methods are intended to replace the existingCallStreamObserver.disableAutoInboundFlowControl()
. There may still be some tweaks to the API, sodisableAutoInboundFlowControl()
is not yet deprecated. - inprocess: Add
InprocessChannelBuilder.propagateCauseWithStatus(true)
to propagate exceptions from the server withinstatus.getCause()
(#6968). This is intended for unit tests to ease debugging test failures. - netty: support setting options of boss in NettyServer (#6947). Adds a new API on
NettyServerBuilder
to allow passing channel options for the boss ELG.
Bug Fixes
- okhttp: use new APIs to configure TLS in Android (roll forward of #6959) (#6960). Starting from Android 10, there is a new set of public APIs for configuring TLS, where we were previously invoking hidden methods in SSLSocket. Some of those hidden methods are no longer allowed (will be removed in the future) in Android 11. We migrate to use public APIs whenever possible.
- netty: Using classloader to isolate grpc without isolating netty can cause exceptions when creating netty channel/server is fixed (#7048).
- api, core, services: make ProtoReflectionService interceptor compatible (#6967). Previously intercepting the ProtoReflectionService breaks the internal hack of passing the server instance to the service. Now we change the way of how it obtains the server instance so that applying interceptors to it doesn’t break its functionality. This change also allows multiple servers to use a shared ProtoReflectionService instance.
- netty: Reduce race window size between GOAWAY and new streams. This should greatly reduce the number of calls that fail with errors similar to “UNAVAILABLE: HTTP/2 error code: NO_ERROR Received Goaway.” Although note that these errors have multiple sources, and it only addresses one of them
- core: Delay transport shutdown when changing a subchannel’s addresses. This should prevent users from seeing errors saying “UNAVAILABLE: InternalSubchannel closed transport due to address change,” which should have already been rare
Documentation
- For Java 9+ users, we now recommend using
org.apache.tomcat:annotations-api
for the@Generated
annotation instead ofjavax.annotation:javax.annotation-api
, as it has a more appropriate license - SECURITY.md: add instruction for disabling Conscrypt's default TrustManager (#6962). By default, Conscrypt delegates hostname verification to the platform's default HostNameVerifier, which in OpenJDK is a deny-all implementation. You can configure the Conscrypt provider to not use its TrustManager.
Dependencies
- Starting from this version, some transitive dependencies of gRPC artifacts are changed from compile scope to runtime scope. Users may experience their application can not rebuild once the gRPC version is upgraded, because some other component of the project may require a dependency that is no longer transitively provided by gRPC artifacts at compile time; and if that happens, users should explicitly add that dependency for the other component. This change does not affect running the application at runtime.
- Bumped protobuf to 3.12.0
Examples
- Deleted example-kotlin (#6936). grpc-kotlin was officially released and examples can be found in its own repository.
Acknowledgements
@agasparovic-sabre
@AgentK20
@apolcyn
@asdf2014
@ashithasantosh
@chalin
@bogdandrutu
@DRayX
@hojongs
@Nextproc
@plaflamme
@reggiemcdonald
@RiyaTyagi