Release 1.82.1
- server: Stop reading from the connection when flooded by HTTP/2 frames. The default value for this limit is 100 frames, excluding DATA and HEADERS, and may be changed by setting environment variable
GRPC_GO_EXPERIMENTAL_CONTROL_BUFFER_THROTTLE_LIMIT. - xds/rbac: Support
MetadataandRequestedServerNamepermissions matcher fields. If present in a DENY rule, previously these would be ignored and fail-open. - xds/rbac: Fix panic when parsing unsupported fields in
NotRule/NotIdpermissions. - xds/rbac: Support the deprecated
source_ipprincipal identifier by treating it as equivalent todirect_remote_ip.
Release 1.82.0
- server: Remove support for
GRPC_GO_EXPERIMENTAL_DISABLE_STRICT_PATH_CHECKINGenvironment varibale. Strict incoming RPC path validation (which has been the default sincev1.79.3) can no longer be disabled. (#9112) - transport: Add environment variable to change the default max header list size from
16MBto8KB. This may be enabled by settingGRPC_GO_EXPERIMENTAL_ENABLE_8KB_DEFAULT_HEADER_LIST_SIZE=true. This will be enabled by default in a subsequent release. (#9019) - balancer: Load Balancing policy registry is now case-sensitive. Set
GRPC_GO_EXPERIMENTAL_CASE_SENSITIVE_BALANCER_REGISTRIES=false(and file an issue) to revert to case-insensitive behavior. (#9017)
- experimental/stats: Expose a new API,
NewContextWithLabelCallback, to register a callback that is invoked when telemetry labels are added. (#8877)- Special Thanks: @seth-epps
- client: Return a portion of the response body in the error message, when the client receives an unexpected non-gRPC HTTP response, to make debugging easier. (#8929)
- Special Thanks: @chengxilo
- server: Add environment variable
GRPC_GO_SERVER_GOROUTINE_LABELSthat controls settingruntime/pprof.Labelson goroutines spawned by the server. SetGRPC_GO_SERVER_GOROUTINE_LABELS=grpc.method=trueto add thegrpc.methodlabel on goroutines spawned to handle incoming requests. (#9082)- Special Thanks: @dfinkel
- xds/server: Fix a memory leak of HTTP filter instances occurring when route configurations are updated in-place during a Route Discovery Service (RDS) update. (#9138)
- grpc: In the deprecated
gzipCompressor (used via the deprecatedWithCompressordial option), enforce theMaxRecvMsgSizelimit on the decompressed message buffer, preventing excessive memory allocation from highly compressed payloads. (#9114)- Special Thanks: @evilgensec
- stats/opentelemetry: Record retry attempts,
grpc.previous-rpc-attempts, at the call level and not the attempt level. (#8923) - encoding: Ensure
Close()is always called on readers returned fromCompressor.Decompressif possible. (#9135) - channelz: Fix the
LastMessageSentTimestampandLastMessageReceivedTimestampfields inSocketMetricsto ensure they contain correct timestamp values. (#9109)
Release 1.81.1
- xds/rbac: Fix a potential authorization bypass caused by incorrectly falling through URI/DNS SANs to Subject Distinguished Name (DN) when matching the authenticated principal name. With this fix, only the first non-empty identity source will be used, as per gRFC A41. (#9111)
- Special Thanks: @al4an444
- otel: Segregate client and server RPC information used for metrics and traces, to avoid one overwriting the other. (#9081)
Release 1.81.0
- balancer/rls: Switch gauge metrics to asynchronous emission (once per collection cycle) to reduce telemetry noise and align with other gRPC language implementations. (#8808)
- Minimum supported Go version is now 1.25. (#8969)
- xds: Use the leaf cluster's security config for the TLS handshake instead of the aggregate cluster's config. (#8956)
- transport: Send a
RST_STREAMwhen receiving anEND_STREAMwhen the stream is not already half-closed. (#8832) - xds: Fix ADS resource name validation to prevent a panic. (#8970)
- grpc/stats: Add support for custom labels in per-call metrics (gRFC A108). (#9008)
- xds: Add support for Server Name Indication (SNI) and SAN validation (gRFC A101). Disabled by default. To enable, set
GRPC_EXPERIMENTAL_XDS_SNI=trueenvironment variable. (#9016) - xds: Add support to control which fields get propagated from ORCA backend metric reports to LRS load reports (gRFC A85). Disabled by default. To enable, set
GRPC_EXPERIMENTAL_XDS_ORCA_LRS_PROPAGATION=true. (#9005) - xds: Add metrics to track xDS client connectivity and cached resource state (gRFC A78). (#8807)
- stats/otel: Enhance
grpc.subchannel.disconnectionsmetric by adding disconnection reason to thegrpc.disconnect_errorlabel (gRFC A94). This provides granular insights into why subchannels are closing. (#8973) - mem: Add
mem.Buffer.Slice()API to slice the buffer like a slice. (#8977)- Special Thanks: @ash2k
- alts: Pool read buffers to lower memory utilization when sockets are unreadable. (#8964)
- transport: Pool HTTP/2 framer read buffers to reduce idle memory consumption. Currently limited to Linux for ALTS and non-encrypted transports (TCP, Unix). To disable, set
GRPC_GO_EXPERIMENTAL_HTTP_FRAMER_READ_BUFFER_POOLING=falseand report any issues. (#9032)
Release 1.80.0
- balancer: log a warning if a balancer is registered with uppercase letters, as balancer names should be lowercase. In a future release, balancer names will be treated as case-insensitive; see #5288 for details. (#8837)
- xds: update resource error handling and re-resolution logic (#8907)
- Re-resolve all
LOGICAL_DNSclusters simultaneously when re-resolution is requested. - Fail all in-flight RPCs immediately upon receipt of listener or route resource errors, instead of allowing them to complete.
- Re-resolve all
- xds: support the LB policy configured in
LOGICAL_DNScluster resources instead of defaulting topick_first. (#8733) - credentials/tls: perform per-RPC authority validation against the leaf certificate instead of the entire peer certificate chain. (#8831)
- xds: enabling A76 ring hash endpoint keys no longer causes EDS resources with invalid proxy metadata to be NACKed when HTTP CONNECT (gRFC A86) is disabled. (#8875)
- xds: validate that the sum of endpoint weights in a locality does not exceed the maximum
uint32value. (#8899)- Special Thanks: @RAVEYUS
- xds: fix incorrect proto field access in the weighted round robin (WRR) configuration where
blackout_periodwas used instead ofweight_expiration_period. (#8915)- Special Thanks: @gregbarasch
- xds/rbac: handle addresses with ports in IP matchers. (#8990)
- ringhash: enable gRFC A76 (endpoint hash keys and request hash headers) by default. (#8922)
- credentials/alts: pool write buffers to reduce memory allocations and usage. (#8919)
- grpc: enable the use of pooled write buffers for buffering HTTP/2 frame writes by default. This reduces memory usage when connections are idle. Use the WithSharedWriteBuffer dial option or the SharedWriteBuffer server option to disable this feature. (#8957)
- xds/priority: stop caching child LB policies removed from the configuration. This will help reduce memory and cpu usage when localities are constantly switching between priorities. (#8997)
- mem: add a faster tiered buffer pool; use the experimental mem.NewBinaryTieredBufferPool function to create such pools. (#8775)
Release 1.79.2
- stats: Prevent redundant error logging in health/ORCA producers by skipping stats/tracing processing when no stats handler is configured. (https://github.com/grpc/grpc-go/pull/8874)
Release 1.79.1
- grpc: Remove the
-devsuffix from the User-Agent header. (https://github.com/grpc/grpc-go/pull/8902)
Release 1.79.0
- mem: Add experimental API
SetDefaultBufferPoolto change the default buffer pool. (#8806)- Special Thanks: @vanja-p
- experimental/stats: Update
MetricsRecorderto require embedding the newUnimplementedMetricsRecorder(a no-op struct) in all implementations for forward compatibility. (#8780)
- balancer/weightedtarget: Remove handling of
Addressesand only handleEndpointsin resolver updates. (#8841)
- experimental/stats: Add support for asynchronous gauge metrics through the new
AsyncMetricReporterandRegisterAsyncReporterAPIs. (#8780) - pickfirst: Add support for weighted random shuffling of endpoints, as described in gRFC A113.
- This is enabled by default, and can be turned off using the environment variable
GRPC_EXPERIMENTAL_PF_WEIGHTED_SHUFFLING. (#8864)
- This is enabled by default, and can be turned off using the environment variable
- xds: Implement
:authorityrewriting, as specified in gRFC A81. (#8779) - balancer/randomsubsetting: Implement the
random_subsettingLB policy, as specified in gRFC A68. (#8650)- Special Thanks: @marek-szews
- server: Include status detail headers, if available, when terminating a stream during request header processing. (#8754)
- Special Thanks: @joybestourous
- credentials/tls: Fix a bug where the port was not stripped from the authority override before validation. (#8726)
- Special Thanks: @Atul1710
- xds/priority: Fix a bug causing delayed failover to lower-priority clusters when a higher-priority cluster is stuck in
CONNECTINGstate. (#8813) - health: Fix a bug where health checks failed for clients using legacy compression options (
WithDecompressororRPCDecompressor). (#8765)- Special Thanks: @sanki92
- transport: Fix an issue where the HTTP/2 server could skip header size checks when terminating a stream early. (#8769)
- Special Thanks: @joybestourous
- credentials/alts: Optimize read buffer alignment to reduce copies. (#8791)
- mem: Optimize pooling and creation of
bufferobjects. (#8784) - transport: Reduce slice re-allocations by reserving slice capacity. (#8797)