gRPC Java 1.68.1 Release Notes
v1.68.0 was a mistake. This is the first release of version 1.68.x
Bug Fixes
- xds: Fix NullPointerException introduced in "Fix load reporting when pick first is used for locality-routing" (#11553). This was in 1.67.1 but not 1.68.0
Behavior Changes
- core: JSON parsing rejects duplicate keys in objects (#11575) (4be69e3). This is the existing behavior in C core. Duplicate keys in objects are dangerous as which value takes effect is undefined. Previously, the last value was used
- okhttp: Detect transport executors with no remaining threads (#11503) (3a6be9c). The transport uses two threads, but one is on-demand. If the executor provided to
builder.transportExecutor()
runs out of threads (e.g., it is a fixed-size thread pool), all transports can be wedged, unable to run on-demand tasks, until keepalive kills one of them. Two threads are now used when handshaking a new transport, and the transport will time out after 1 second with “Timed out waiting for second handshake thread” if two threads are unavailable - gcp-csm-o11y: Get
mesh_id
value fromCSM_MESH_ID
environment variable, instead of getting it from bootstrap file (84d30af)
Improvements
- New grpc-context-override-opentelemetry artifact (#11523) (782a44a) (#11599) (e59ae5f). This is a
io.grpc.Context
storage override to store its state inio.opentelemetry.context.Context
. Libraries should not add a dependency on this artifact, as applications can only have one storage override in their classpath - New grpc-s2a artifact. It is a transport that offloads the handshake similar to ALTS, but for TLS. It provides
io.grpc.s2a.S2AChannelCredentials
- api: Enhance name resolver `ResolutionResult` to hold addresses or error so the single listener API onResult2 is used to convey both success and error cases for name resolution (#11330) (1ded8af)
- core: Handle NameResolver/LoadBalancer exceptions when panicking (b692b9d). This expands the class of bugs that will fail RPCs with the panic error, versus some undefined behavior
- core: Use the default service config in case of initial name resolver address resolution error (#11577) (fa26a8b)
- core:
StreamTracer.inboundMessageRead()
now reports uncompressed message size when the message does not need compression (#11598) (2aae68e). Previously it always reported-1
(unknown) - netty: Avoid TCP_USER_TIMEOUT warning when explicitly specifying a non-epoll channel type to use (#11564) (62f4098)
- okhttp: Don't warn about missing Conscrypt (6f35422). This is especially helpful when using TLS but not running on Android
- android: For
UdsChannelBuilder
, use fake IP instead of localhost (a908b5e). This avoids an unnecessary DNS lookup - xds: Add xDS node ID in select control plane errors to enable cross-referencing with control plane logs when debugging (f3cf7c3)
- xds: Enhanced how ADS stream terminations are handled, specifically addressing cases where a response has or hasn't been received (#2e9c3e19f)
- binder: Update status code documentation for Android 11's package visibility rules. (#11551) (99be6e9)
- binder: Update binderDied() error description to spell out the possibilities for those unfamiliar with Android internals. (#11628) (46c1b38)
- example-gauth: Use application default creds instead of file argument (#11595) (94a0a0d)
- opentelemetry: Experimental OpenTelemetry tracing is available. Set the
GRPC_EXPERIMENTAL_ENABLE_OTEL_TRACING
environment variable totrue
to enable tracing support inGrpcOpenTelemetry
(#11409, #11477)(043ba55, 421e237)
Dependencies
- Updated protobuf-java to 3.25.5. This helps avoid CVE-2024-7254 (2ff837a)
Thanks to:
@Juneezee
@lgalfaso
@bestbeforetoday
@hlx502
@JoeCqupt