Do not use this release. Its handling of gRPCLB causes problems for the ecosystem
Known Issues
- Since SRV lookup was enabled in this release, services enabling grpclb would break clients that lack the grpc-grpclb dependency. This effectively makes it impossible for existing services to enable gRPC LB
- Bazel apps lacking a (transitive) dependency on @io_grpc_grpc_java//core:util will fail at runtime. See detail / workaround for more detail
Dependencies
- Updated to OpenCensus version to 0.17.0
- Updated to Error Prone to 2.3.2
Bug Fixes
- Bazel build warning "unknown enum constant" is fixed (#5047)
- core: Add missing synchronization in KeepAliveManager which fixes a crash caused by a race (#5096). This fixes the “IllegalStateException: There should be no outstanding pingFuture” exception
New Features
- core: added service-loader-based LoadBalancerProvider/LoadBalancerRegistry. Providers are to be accessed by policy name through the registry. (#4996)
- core: LoadBalancer now exposes ChannelLogger for logging information into ChannelTrace (#5024)
- core: Add
maxInboundMetadataSize()
toManagedChannelBuilder
andServerBuilder
(#4897). It is now also implemented by the inprocess and okhttp transports - okhttp: flow control window size is configurable via OkHttpChannelBuilder.flowControlWindow() (#4959)
- services: implemented the stream-based “Watch” method of health-checking service (#4930)
- services: implemented client-side health-checking (https://github.com/grpc/proposal/blob/master/A17-client-side-health-checking.md). This issues health check RPCs from the client to avoid unhealthy backends
- HealthCheckingLoadBalancerUtil can be used to enable health-checking on custom LoadBalancer implementations.
- The “round_robin” balancer, when accessed through LoadBalancerRegistry, will have health-checking enabled if the application has a runtime dependency on “grpc-services”.
API Changes
- core: Change
CallCredentials.MetadataApplier
from an abstract class back to an interface, as it was in 1.15.x. Introduce a newCallCredentials2.MetadataApplier
that is an abstract class, instead. This is ABI incompatible with 1.16.0 but ABI compatible with 1.15.x and 1.16.1 (#5007) - core: LoadBalancer.Helper.runSerialized() is deprecated in favor of newly introduced getSerializationContext().
- core/grpclb: deprecated all stock LoadBalancerFactory implementations in favor of service-loader-based LoadBalancerProvider/LoadBalancerRegistry. Instead of referencing RoundRobinLoadBalancerFactory and GrpclbLoadBalancerFactory directly, applications should access providers by their policy names, such as “round_robin” and “grpclb”.(#4996).
- core: mark convenience overloads in LoadBalancer.Helper and Subchannel as
final
, as there is no purpose in overriding them. (#4954) - core: Improved documentation of ManagedChannelBuilder.intercept's execution order
- netty: NettyChannelBuilder.maxMessageSize() is removed in favor of maxInboundMessageSize() (#5054)
API Stabilization
- services: V1alpha binlog is removed in favor of v1 (#4963)
Behavior Changes
- core: Enabling retry will automatically disable census. Note that this behavior is still subject to change in future releases as a design is needed. (#4941) Comments are welcome
- core: SRV records are now queried by default when doing DNS lookups. SRV lookups are avoided for localhost and literal IP addresses. SRV is not looked up when running on Android
- core: Trim trailing dot from SRV hostnames (#5006)
- all: Now grpc java library emits binary metadata without padding in its base64 encoding (previously with padding). grpc library still supports receiving both padded and unpadded binary metadata (#5037)
- okhttp: Pending data uses less memory by merging buffers (#5023). This can save memory when the server is applying flow control and many small messages are being sent on a streaming RPC
- core: Improved error message for Auto-LB configuration failure (#5031). Previously it triggered a NullPointerException
- okhttp: “error in frame handler” error is now INTERNAL instead of UNAVAILABLE (#5049)
- core,netty,testing: supports receiving comma-separated multi-valued binary metadata (#5020)
- core: Name resolver error message now includes type of name resolver (#4928)
- core: When SRV lookup is disabled, DNS resolution now fails with helpful error message instead of “UNAVAILABLE: NameResolver returned an empty list” (#4951)
- core: For android devices, DNS cache is disabled due to known issue (#4962). The DNS cache is mainly used for SRV lookup results, which aren’t performed on Android
- Netty: NettyServer log quietly when established connection was aborted by the software in your host machine (#5001)
Acknowledgements
Thanks to all our external contributors: