Dependencies
- Bumped
netty
to 4.1.42 - Bumped
error_prone_annotations
to 2.3.3 - Bumped
perfmark
to 0.19.0 - Bumped
guava
to 28.1 - Bumped
gson
to 2.8.5 - Bumped
protobuf
to 3.10.0 - Tests bumped
truth
to 1.0
Bug Fixes
- Rolled forward the fix for “
ClientCall.Listener.onClose
never called when the call is interrupted” (#6255) - netty: fixed the bug that users using proxy may experience hang when starting channel (#6159)
- alts: fixed potential memory leak when alts negotiation is aborted (#6186)
- alts: fixed wrong
ComputeEngineChannelBuilder
class signature (#6367) - bom: now specifying pom type for
protoc-gen-grpc-java
(#6247) - netty: Check for
TE: trailers
header after checkingContent-Type
. This prevents confusing warnings when a non-grpc client contacts a grpc server - bazel: Fixed typo in
repositories.bzl
formaven_install override_targets
;io.grpc:grpc-core
was pointing to a non-existent target name - okhttp: fixed header scheme that did not match transport type (#6264). OkHttp users using plaintext may experience errors when communicating with dotnet gRPC server is fixed.
API Changes
- api:
MethodDescriptor
’ssafe
andidempotent
methods are now considered stable and set appropriately by the generated code when the proto contains the RPC optionoption idempotency_level = NO_SIDE_EFFECTS;
oroption idempotency_level = IDEMPOTENT;
. grpc-java is not using these values directly, but interceptors are free to observe them - protobuf:
StatusProto.fromStatusAndTrailers
fall-back to status if trailers are not available (#6278). Previously it returnednull
- bazel: Removed deps from
grpc_java_repositories()
thatprotobuf_deps()
provides ManageChannelBuilder.usePlaintext()
(with no argument) is now stabilized.
New Features
- okhttp: add full implementation of HPACK header compression (#6026). Patched HTTP header compression implementation for writer from OkHttp3, which was missing in OkHttp2.
- bazel: added support for
--incompatible_load_cc_rules_from_bzl
and--incompatible_load_proto_rules_from_bzl
- netty: Implicitly use Conscrypt when it is available and is necessary. If tcnative is not available and the JVM is Java 7 or 8, then grpc will use Conscrypt if present. This allows using Conscrypt by just adding Conscrypt to the classpath
- alts: Use Conscrypt when available. This provides Java 7 support and gives a huge performance boost on Java 8. Java 7 update 121 and Java 8 update 111 (released three years ago) are required.
- api: Add
EquivalentAddressGroup.ATTR_AUTHORITY_OVERRIDE
which allows NameResolvers to specify different names for different backends within one Channel which may be especially useful for certain TLS deployments (#6126). Note that NameResolvers must receive the authority names from a trusted source (e.g., local file, remote server with TLS) - core: Propagate
EquivalentAddressGroup
Attributes inRoundRobinLoadBalancer
. This allowsNameResolver
s to set attributes likeATTR_AUTHORITY_OVERRIDE
with round robin - api: Added
ManagedChannelBuilder.offloadExecutor()
for expensive or blocking operations like DNS resolution. Previously an internal executor was used that couldn’t be overridden. The executor is also passed toNameResolver
s viaArgs.getOffloadExecutor()
- grpclb: Add dns NameResolver to
io.grpc.grpclb
that has SRV record lookup enabled by default (#6298). This allows using grpclb without the-Dio.grpc.internal.DnsNameResolverProvider.enable_grpclb=true
system property. Note that grpclb is still experimental and deprecated. In particular, we plan to change grpclb policy selection which together with this change provides a path forward for grpclb to function without custom support in grpc-core; see gRFC A26
Acknowledgements
- Anar Sultanov (@anarsultanov)
- Elliotte Rusty Harold (@elharo)
- Grant Oakley (@groakley)
- Przemek Piotrowski (@ppiotrow)
- Steve Rao (@steverao)
- edr (@enguerrand)