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.
- 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
flowControlWindowusers need to use
initialFlowWindowSizeto 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.
- This release adds an xDS URI scheme called
xds. This is the stable version of the scheme
xds-experimentalthat was introduced in v1.28.0.
xds-experimentalscheme will be removed in subsequent releases so you must switch to
xdsscheme 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
ServerCallStreamObserver.disableAutoRequest()that disables all automatic inbound flow-control requests. These methods are intended to replace the existing
CallStreamObserver.disableAutoInboundFlowControl(). There may still be some tweaks to the API, so
disableAutoInboundFlowControl()is not yet deprecated.
- inprocess: Add
InprocessChannelBuilder.propagateCauseWithStatus(true)to propagate exceptions from the server within
status.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
NettyServerBuilderto allow passing channel options for the boss ELG.
- 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
- For Java 9+ users, we now recommend using
@Generatedannotation instead of
javax.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.
- 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
- Deleted example-kotlin (#6936). grpc-kotlin was officially released and examples can be found in its own repository.