Behavior Changes
- stats/otel: The
grpc.lb.pick_first.*metrics have been removed and replaced withgrpc.subchannel.*metrics. See gRFC A94 for more details. (#9215)
New Features
Bug Fixes
- client: Fix a bug where a
ClientConncould get permanently stuck in IDLE when an RPC was canceled during stream creation. Previously, such cancellations triggered stream cleanup twice, corrupting the channel's idleness state and causing subsequent RPCs to fail with deadline exceeded errors. (#9191)- Special Thanks: @utkuozdemir
- client: Fix a bug where non-gRPC HTTP responses ending with an empty DATA frame failed the RPC with status code
Internalinstead of preserving the HTTP-mapped status code and response body. (#9217)- Special Thanks: @chengxilo
- credentials: Validate metadata returned by per-RPC credentials, failing the RPC with status code
Internalif invalid keys or values are found. Previously, invalid metadata from credentials was sent to the server in outgoing HTTP/2 requests. (#9202)- Special Thanks: @buger
- credentials/sts: Prevent potential token leakage by disallowing HTTP redirects during STS token exchange. Previously, 3xx redirects were followed automatically, replaying the request body containing authentication tokens to the redirect destination. (#9299)
- Special Thanks: @nvxbug
- randomsubsetting: Ignore endpoints that contain no addresses. Previously, this could cause the policy to panic while computing hashes. (#9259)
- Special Thanks: @fallintoplace
- stats/otel: Ensure method names are populated in trace spans when metrics are disabled. Previously, running with tracing enabled and metrics disabled resulted in server trace spans lacking the RPC method name (recording only "Recv."). (#9262)
- transport: Return
io.ErrUnexpectedEOFwhen EOF is encountered after partial header or message body reads. Previously, partial reads could return a plainio.EOF, failing to distinguish truncated data from a clean end of stream. (#9204)- Special Thanks: @buger
- transport: Validate metadata supplied by balancers (in
PickResult.Metadata) and resolver addresses, failing the RPC with status codeInternalif invalid keys or values are found. Previously, invalid metadata from these sources was sent to the server in outgoing HTTP/2 requests. (#9203)- Special Thanks: @buger
- xds: Fix a rare corner case that could prevent a cluster from being removed when it is no longer in use. (#9140)
- xds: Fix panic during route matching for routes containing header matchers with empty
exact_matchstrings. (#9223)- Special Thanks: @nvxbug
- xds: Reject routes containing header matchers with empty
prefix_matchorsuffix_matchstrings. Previously, this caused a panic during route matching. (#9223)- Special Thanks: @nvxbug
- xds: Fix EDS drop policies being applied at a much lower rate than configured due to an integer overflow. (#9257)
- Special Thanks: @nvxbug
- xds: Reject EDS resources containing drop policies with unsupported denominators. Previously, such resources caused the client to panic when calculating drop rates. (#9218)
- Special Thanks: @nvxbug
- xds/rbac: Reject RBAC configurations containing nested
PrincipalorPermissionrules with:schemeorgrpc-prefixed header matchers. Previously, such configurations could cause DENY policies to fail open. (#9258)- Special Thanks: @nvxbug
- xds/rbac: Rewrite
hostheader matchers to:authorityin nestedPrincipalandPermissionrules. Previously, this rewrite only applied to top-level rules, causing nestedhostmatchers to never match incoming requests and DENY policies to fail open. (#9258)- Special Thanks: @nvxbug
- xds/rbac: Reject
CidrRangeswith an unset prefix length. Previously, an omittedprefix_lenfield caused a panic during RBAC configuration parsing. (#9250)- Special Thanks: @nvxbug
Performance Improvements
- transport: Avoid a heap allocation when flushing shared write buffers. (#9233)
- Special Thanks: @zaidoon1
- credentials/alts: Support dynamic frame size negotiation and add the
GRPC_GO_EXPERIMENTAL_ALTS_MAX_FRAME_SIZEenvironment variable (default 4KiB, max 512KiB) to configure the maximum ALTS record frame size. (#9268)