gRPC v1.27.1 Release Notes

Release Date: 2020-02-13 // 7 days ago

Previous changes from v1.25.0

  • 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 checking Content-Type. This prevents confusing warnings when a non-grpc client contacts a grpc server
    • bazel: Fixed typo in repositories.bzl for maven_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’s safe and idempotent methods are now considered stable and set appropriately by the generated code when the proto contains the RPC option option idempotency_level = NO_SIDE_EFFECTS; or option 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 returned null
    • bazel: Removed deps from grpc_java_repositories() that protobuf_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 in RoundRobinLoadBalancer. This allows NameResolvers to set attributes like ATTR_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 to NameResolvers via Args.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