)]}'
{
  "log": [
    {
      "commit": "1c63fa5f5492fb6cb4cabf9847999ce469505f49",
      "tree": "0a13550a506fcd80e90e7bb0e1dfcda3269e0e1f",
      "parents": [
        "959af53ce2991a6984e0faba90b2837dbaa595e7"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Thu May 07 05:07:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 05:07:53 2026"
      },
      "message": "grpc: remove support for env var GRPC_GO_EXPERIMENTAL_DISABLE_STRICT_PATH_CHECKING (#9112)\n\nFixes https://github.com/grpc/grpc-go/issues/8986\n\nThis PR addresses a TODO to have this env var removed.\n\nRELEASE NOTES:\n- grpc: Remove support for environment variable\n`GRPC_GO_EXPERIMENTAL_DISABLE_STRICT_PATH_CHECKING`. Strict path\nchecking will be enforced unconditionally, going forward."
    },
    {
      "commit": "959af53ce2991a6984e0faba90b2837dbaa595e7",
      "tree": "7e309cbc4dd4d37dd9f373e72603eee01715386a",
      "parents": [
        "94b9449eb2ebd46403dc7f4f1068a4d60df1f6f8"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Thu May 07 04:50:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 04:50:39 2026"
      },
      "message": "transport: set current timestamp in channelz socket metrics (#9109)\n\nRELEASE NOTES:\n- channelz: Fix `LastMessageSentTimestamp` and\n`LastMessageReceivedTimestamp` in `SocketMetrics` to contain the correct\ntimestamp"
    },
    {
      "commit": "94b9449eb2ebd46403dc7f4f1068a4d60df1f6f8",
      "tree": "d0cc4676b35c76549e9d6732605b98988ac3e502",
      "parents": [
        "89fe783a79a49ae6b097cd3e215970eede1fb1f3"
      ],
      "author": {
        "name": "Alan Ortega Alamo",
        "email": "alanortega7312@gmail.com",
        "time": "Wed May 06 16:32:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 16:32:39 2026"
      },
      "message": "xds/rbac: enforce strict presence-based short-circuit in authenticatedMatcher (#9111)\n\nThis PR fixes a bug in the xDS RBAC authenticatedMatcher where it\nincorrectly falls through URI/DNS SANs to the Subject DN. According to\ngRFC A41 and Envoy\u0027s specification, only the first non-empty identity\nsource must be consulted. This bug allows an authorization bypass in\ncertain scenarios. A regression test is included.\n\nRELEASE NOTES:\n- xds/rbac: Fix `Authenticated` matcher to use the first non-empty\nidentity source (URI SAN, DNS SAN, and Subject DN) in the order\nspecified in gRFC A41."
    },
    {
      "commit": "89fe783a79a49ae6b097cd3e215970eede1fb1f3",
      "tree": "7e91c15eb8e95e426cdc77d0e99a446877ffafb1",
      "parents": [
        "3d0dd1e30b6b354d7c8d86b26f52eda4ea45e3cb"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Wed May 06 07:16:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 07:16:19 2026"
      },
      "message": "grpc: Document interactions between static flow control window options (#9096)\n\nFixes: #9090\n\nSetting a static flow control window at either the stream or connection\nlevel entirely disables BDP estimation across the channel. If a user\nconfigures one without the other, the unspecified window falls back to\nthe HTTP/2 default of 64KB, which can cause a severe drop in throughput.\nThis PR documents these interactions to help users avoid this common\nfootgun.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "3d0dd1e30b6b354d7c8d86b26f52eda4ea45e3cb",
      "tree": "046570cef3fd86064e5aa5fb04eb3d5873b0c33b",
      "parents": [
        "811290b5776c0ceaf7dd6c84feaf9c9ac0971154"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Tue May 05 22:58:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 22:58:59 2026"
      },
      "message": "cmd/protoc-gen-go-grpc: Update to latest version of grpc-go (#9110)\n\nRELEASE NOTES:\n- cmd/protoc-gen-go-grpc-go: Update to latest grpc-go version to pull in\nthe fix for https://nvd.nist.gov/vuln/detail/CVE-2026-33186"
    },
    {
      "commit": "811290b5776c0ceaf7dd6c84feaf9c9ac0971154",
      "tree": "9f8f1ff48d4b5927fbfc6f70c9e34e49873da2ed",
      "parents": [
        "679ae4c7df728622eb8d58e7ea8dcffc043169b7"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Tue May 05 15:15:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 15:15:40 2026"
      },
      "message": "stats/opentelemetry: restore the changes from #8342 and fix the flaky test. (#8923)\n\nFixes https://github.com/grpc/grpc-go/issues/8700\n\nThis PR re-lands the changes from #8342 , which were reverted due to a\nflaky test. It cherry-picks the original commits and adds a fix for the\nunderlying race condition that caused the test\n`TestTraceSpan_WithRetriesAndNameResolutionDelay` to flake.\n\n**Problem**\n\nAs mentioned\n[here](https://github.com/grpc/grpc-go/pull/8715#issuecomment-3581229693),\nthe test was flaky because of a race condition between the load\nbalancing policy creating a ready picker and the RPC attempting to pick\na connection. If the picker became ready before the first Pick attempt,\nthe RPC would not be delayed, the \"Delayed LB pick complete\" event would\nnot be emitted, and the test would fail.\n\n**Fix**\n\nTo solve the race condition, the test now uses a custom stub balancer\nand returns a blocking picker that guarantees the RPC will wait for a\nconnection. As soon as the RPC attempts to Pick and is confirmed to be\nin a waiting state, the balancer then provides a valid, \"non-blocking\"\npicker, allowing the RPC to succeed. This sequence reliably triggers the\n`DelayedPickComplete` event.\n\nRELEASE NOTES: \n* stats/opentelemetry: Retry attempts (grpc.previous-rpc-attempts) are\nnow recorded as span attributes for non-transparent client retries.\n\n---------\n\nCo-authored-by: vinothkumarr227 \u003cvinothkumarr@google.com\u003e"
    },
    {
      "commit": "679ae4c7df728622eb8d58e7ea8dcffc043169b7",
      "tree": "94d588008353001fe5a537f087fd46bfe5acddf3",
      "parents": [
        "850cc543aa3c5b86b82697b91f3ec5a7210829a0"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Tue May 05 03:45:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 03:45:30 2026"
      },
      "message": "stats: use correct import for services (#9107)\n\nRELEASE NOTES: none"
    },
    {
      "commit": "850cc543aa3c5b86b82697b91f3ec5a7210829a0",
      "tree": "3e7dc977e1e1aedc09086acfa4cdfeb1572e332b",
      "parents": [
        "3d82ab3bfdbaa9d1b791186043fd700282ac0615"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Thu Apr 30 17:45:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 17:45:43 2026"
      },
      "message": "grpc: Remove ErrRetriesExhausted type in favor of error string (#9105)\n\nAddresses: #7023\n\nThis change removes the `ErrRetriesExhausted` error type introduced in\n#8894. The original requirement was only to add information to the error\nmessage, not to provide the ability to programmatically inspect error\ntypes. This PR keeps the updated error message but removes the new error\ntype. Since #7023 hasn\u0027t been released yet, this is not a breaking\nchange.\n\nRELEASE NOTES:\n* grpc: enhance RPC failure error messages to indicate when retries are\nexhausted."
    },
    {
      "commit": "3d82ab3bfdbaa9d1b791186043fd700282ac0615",
      "tree": "dda4f739cfdcc7460c978cc3e9d54f3d5d5a12a2",
      "parents": [
        "a481b8f755bccf5c0308f1530e785bb58a770150"
      ],
      "author": {
        "name": "Madhav Bissa",
        "email": "48023579+mbissa@users.noreply.github.com",
        "time": "Tue Apr 28 11:59:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 11:59:58 2026"
      },
      "message": "otel: Segregate client and server RPCInfo used for metrics and traces (#9081)\n\nFixes #9053 \nClient and Server metrics and traces handling code during RPC was using\nthe same RPCInfo. This lead to overwriting of context when an\napplication was acting as server and then initiating other grpc call as\na client. This PR segregates the rpcInfoKey context key into\nclientRPCInfoKey and serverRPCInfoKey so that it is not\nreused/overwritten between server and client code.\n\nRELEASE NOTES:\n* otel: Segregate client and server RPCInfo used for metrics and traces."
    },
    {
      "commit": "a481b8f755bccf5c0308f1530e785bb58a770150",
      "tree": "d048ac35588069450f4f7edc6b0ecda73b0c4fb2",
      "parents": [
        "eafb29a4ac7eedce5ca9e468988998a2ead68eea"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Tue Apr 28 11:40:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 11:40:37 2026"
      },
      "message": "cleanup: removing TODO to improve timeouts encoding. (#9101)\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "eafb29a4ac7eedce5ca9e468988998a2ead68eea",
      "tree": "2b71458deabe50a2dd5b205d1ae862f7ec7960d1",
      "parents": [
        "bdf4571c08a6be02daf38942d7f78f2326931175"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Tue Apr 28 08:03:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 08:03:38 2026"
      },
      "message": "Revert \"xds/rbac: handle errors returned from matcher evaluation (#9092)\". (#9099)\n\nThis PR reverts commit fa4c702b5380b1c702e08804fec9be301c0a0a1b.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "bdf4571c08a6be02daf38942d7f78f2326931175",
      "tree": "c0c24c5073f5d8af8a37c44558b1e5afa15f025c",
      "parents": [
        "fa4c702b5380b1c702e08804fec9be301c0a0a1b"
      ],
      "author": {
        "name": "Niraj Nepal",
        "email": "nirajn3pal@gmail.com",
        "time": "Tue Apr 28 02:55:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 02:55:05 2026"
      },
      "message": "interop/orcalb: Delegate SubConn management to pick_first (#8914)\n\nThis PR switches the interop ORCA test load balancer to delegate SubConn\nmanagement to endpointsharding + pick_first instead of creating and\nhandling SubConns itself As per [ gRFC\nA61](https://github.com/grpc/proposal/blob/master/A61-IPv4-IPv6-dualstack-backends.md#use-pick_first-as-the-universal-leaf-policy)\n.\n\nFixes [#8809](https://github.com/grpc/grpc-go/issues/8809)\n\nRELEASE NOTES: TODO"
    },
    {
      "commit": "fa4c702b5380b1c702e08804fec9be301c0a0a1b",
      "tree": "e7cb3555e991765fce5ab14bfb6fb72da7ec7076",
      "parents": [
        "4ac8a4571ca3254feb2d2085b0d25132815377bf"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Mon Apr 27 11:00:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 11:00:35 2026"
      },
      "message": "xds/rbac: handle errors returned from matcher evaluation (#9092)\n\nThis PR improves the error handling in the RBAC engine during policy\nevaluation. Matchers (such as the IP matcher) now propagate errors when\nthey encounter invalid inputs. The engine in rbac_engine.go has been\nupdated to process these errors and apply safe default behaviors that\nalign with the intent of the specific policy action (ALLOW or DENY)\nbeing evaluated, ensuring predictable authorization decisions.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "4ac8a4571ca3254feb2d2085b0d25132815377bf",
      "tree": "9e98bf19b2359913723f5953ad0293bcd0b7fc2f",
      "parents": [
        "d9d87bd9f4fb0e117aa2889ba018f704c1e3b748"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Fri Apr 24 18:00:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 24 18:00:40 2026"
      },
      "message": "grpc: use enum instead of integer in return statements in compress() (#9089)\n\nMinor readability improvement in the `compress` function to use the enum\nvalue in return statements instead of using `0`.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "d9d87bd9f4fb0e117aa2889ba018f704c1e3b748",
      "tree": "97d6299a36ddc2195e8836554207b6822bf0c454",
      "parents": [
        "ac4aa01bd485f3a574469d7985cf55e79abf44a9"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Thu Apr 23 19:37:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 19:37:44 2026"
      },
      "message": "xds/resolver: change int32 to atomic.int32 (#9080)\n\nFixes point 6 of https://github.com/grpc/grpc-go/issues/8880\n\nChanges the `refCount` used in `xds_resolver.go` to be atomic.Int32\ninstead of Int32 and updates the usages and test accordingly.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "ac4aa01bd485f3a574469d7985cf55e79abf44a9",
      "tree": "1c6228ee81157f9986346591178cefaac93dd283",
      "parents": [
        "29665f43f04c8877f3bb91ef6b52c5054c41d27e"
      ],
      "author": {
        "name": "Bala Nallamilli",
        "email": "30488711+Bala-Nallamilli@users.noreply.github.com",
        "time": "Wed Apr 22 10:40:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 10:40:08 2026"
      },
      "message": "cleanup: replace net.IP with netip.Addr in tests (#9075)\n\nFixes #8884\n\nReplace usages of net.IP with netip.Addr in binarylog and grpclb test\nfiles. This uses the more performant and ergonomic net/netip package\ntypes introduced in Go 1.18:\n\n- binarylog: change srvIP/clientIP fields from net.IP to netip.Addr,\n  use AddrPort().Addr().Unmap() for extraction, and Is4() instead of\n  To4() !\u003d nil for IPv4 detection.\n- grpclb: change beIPs from []net.IP to []netip.Addr, use AsSlice()\n  when assigning to proto []byte fields.\n\nRELEASE NOTES: n/a"
    },
    {
      "commit": "29665f43f04c8877f3bb91ef6b52c5054c41d27e",
      "tree": "f6f3c5ab59d57fd848381fe4750f7bb6fc6a8ee7",
      "parents": [
        "f6304e9ffeaf7cbdbc723c4a41350536f23aeb81"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Wed Apr 22 06:02:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 06:02:19 2026"
      },
      "message": "transport: Pool read buffers used by the HTTP/2 framer (#9032)\n\n## Problem\nThe HTTP/2 framer in gRPC uses a `bufio.Reader` with a 32KB buffer by\ndefault. When there are a large number of transports, these buffers\nconsume significant memory, even when the transport is idle.\n\n## Solution\n#8964 added a `ReadyReader` interface that allows non-memory-pinning\nreads. This PR replaces the standard `bufio.Reader` with a custom\n`io.Reader` implementation that uses pooled buffers and releases the\nbuffer once all data is consumed.\n\nTo defer the re-allocation of the read buffer, the reader calls\n`ReadOnReady` on the underlying `io.Reader`. For this to work, the\nunderlying `io.Reader` must implement either the `ReadyReader` interface\nor `syscall.RawConn`. If neither condition is met, the framer gracefully\nfalls back to using the regular `bufio.Reader`.\n\nAdditional Changes:\n* The ALTS connection has been refactored to implement the `ReadyReader`\ninterface.\n* The write buffer pools used by the framer are updated to use the\n`mem.BufferPool` interface, allowing the pools to be shared across both\nread and write operations.\n* Use `syscall.Read` instead of `unix.Read` to avoid triggering the race\ndetector, see comment for details.\n* Add environment variable protection for the changes to allow fast\nrollback.\n\n## Benchmarks\nIn a [real-world\nbenchmark](https://github.com/arjan-bal/custom-go-client-benchmark/tree/retry-dp),\nwhere a GCS directpath client downloads a file in a loop, the average\n\"in use\" memory falls from 28.3MB to 21.3MB (-24%).\n\nLocal Benchmarks show no significant difference\n```\n❯ go run benchmark/benchresult/main.go streaming-before streaming-after                 \nstreaming-networkMode_Local-bufConn_false-keepalive_false-benchTime_2m0s-trace_false-latency_0s-kbps_0-MTU_0-maxConcurrentCa\nlls_120-reqSize_1024B-respSize_1024B-compressor_off-channelz_false-preloader_false-clientReadBufferSize_-1-clientWriteBuffer\nSize_-1-serverReadBufferSize_-1-serverWriteBufferSize_-1-sleepBetweenRPCs_0s-connections_1-recvBufferPool_simple-sharedWrite\nBuffer_true\n               Title       Before        After Percentage\n            TotalOps     29981273     29966908    -0.05%\n             SendOps            0            0      NaN%\n             RecvOps            0            0      NaN%\n            Bytes/op      4971.06      4971.41     0.00%\n           Allocs/op        19.79        19.79     0.00%\n             ReqT/op 2046721570.13 2045740919.47    -0.05%\n            RespT/op 2046721570.13 2045740919.47    -0.05%\n            50th-Lat    461.523µs    460.906µs    -0.13%\n            90th-Lat    654.435µs    655.327µs     0.14%\n            99th-Lat   1.225856ms   1.240984ms     1.23%\n             Avg-Lat    478.845µs    479.553µs     0.15%\n           GoVersion     go1.25.0     go1.25.0\n         GrpcVersion   1.81.0-dev   1.81.0-dev\n```\n\nRELEASE NOTES:\n* transport: Pool HTTP/2 framer read buffers to reduce idle memory\nconsumption. Currently limited to Linux for ALTS and non-encrypted\ntransports (TCP, Unix). To disable, set\n`GRPC_GO_EXPERIMENTAL_HTTP_FRAMER_READ_BUFFER_POOLING\u003dfalse` and report\nany issues."
    },
    {
      "commit": "f6304e9ffeaf7cbdbc723c4a41350536f23aeb81",
      "tree": "68ef8bad591f55d332221f4b03eebb72cc1762e2",
      "parents": [
        "ab7a2aaf61f65e4daf5a1a3bd1dac1f1c08297f7"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Mon Apr 20 17:21:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 17:21:41 2026"
      },
      "message": "internal/transport: defer calls to mu.Unlock in the stream inbound flow control implementation (#9077)\n\nThe existing code was written way back when there were serious\nperformance issues with the `defer` implementation in Go. The\nperformance overhead is now negligible. So, we can safely defer calls to\n`mu.Unlock` here.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "ab7a2aaf61f65e4daf5a1a3bd1dac1f1c08297f7",
      "tree": "b239010382f669ed61c926da9dfc97d1386ed415",
      "parents": [
        "22adc9efbccc38143b09c3cdb3dfaa754a394e5e"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Mon Apr 20 17:21:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 17:21:18 2026"
      },
      "message": "clusterimpl: fix test logic waiting for calls to ResolveNow (#9071)\n\nAddresses one test in https://github.com/grpc/grpc-go/issues/8995\n\nThis is the sequence of events happening in the test:\n- gRPC channel moves to READY and is able to make an RPC.\n- The server goes down, causing the client transport to close. This\ncauses the gRPC channel to invoke `ResolveNow`. See:\nhttps://github.com/grpc/grpc-go/blob/06fc26a196350499dd0cf2dabdd5cf11bbee01a7/clientconn.go#L1517\n- Subchannel moves to IDLE. \n- `pick_first` moves channel state to IDLE. `round_robin` reacts with a\ncall to `ExitIdle`, causing `pick_first` to reconnect.\n- Reconnection attempt fails as the server is still down, and the\nsubchannel moves to TRANSIENT_FAILURE.\n- This causes the `clusterimpl` policy to call `ResolveNow`\n\nThere are two calls to `ResolveNow`, but the test was only expecting\none, and therefore the second one was blocking until the test context\nexpires.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "22adc9efbccc38143b09c3cdb3dfaa754a394e5e",
      "tree": "16f403d7c0134dd4beae7b6dc1508584e7eda29e",
      "parents": [
        "06fc26a196350499dd0cf2dabdd5cf11bbee01a7"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Mon Apr 20 17:20:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 17:20:54 2026"
      },
      "message": "clustermanager: fix test logic waiting for picker during graceful switch (#9072)\n\nFixes https://github.com/grpc/grpc-go/issues/8995\n\nThe test was waiting for an event that was not expected to happen, but\nwas waiting for it with the test context instead of a short context.\nThis is the offending line:\nhttps://github.com/grpc/grpc-go/blob/master/internal/xds/balancer/clustermanager/clustermanager_test.go#L668-L672\n\nI ended up cleaning the test up, adding comments to make it more\nreadable, and removing a stub policy that was not being used in anyway.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "06fc26a196350499dd0cf2dabdd5cf11bbee01a7",
      "tree": "7491c88aa1657eb46f327761496862147aacd47c",
      "parents": [
        "c01f4f1f502f0c459afe50fd58f340634e72cd2d"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Fri Apr 17 05:22:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 17 05:22:05 2026"
      },
      "message": "xds: support disabling HTTP filters (#9054)\n\nThis PR is part of implementing [A93:\nxds-ext-proc](https://github.com/grpc/proposal/blob/master/A93-xds-ext-proc.md)\n\nThis PR introduces support for disabling xDS HTTP filters on both client\nand server side. The xDS resolver and the filter chain manager will now\nevaluate the effective disabled state of a filter, checking the base\nconfiguration and allowing it to be overridden by a route-specific\nconfiguration. If a filter evaluates to disabled, interceptor creation\nfor that filter will be skipped.\n\nThis new behavior is guarded by a feature flag and must be explicitly\nenabled by setting the `GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_CLIENT`\nenvironment variable to `true`\n\n#ext-proc-a93\n\nRELEASE NOTES: None"
    },
    {
      "commit": "c01f4f1f502f0c459afe50fd58f340634e72cd2d",
      "tree": "0a5447da71ce0ff94a64de413ec00ffcb2aec94a",
      "parents": [
        "6cd0d0c4299b15b014a30f0fcfef0b0422b332c0"
      ],
      "author": {
        "name": "Ali Asghar",
        "email": "98263017+alliasgher@users.noreply.github.com",
        "time": "Thu Apr 16 14:36:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 14:36:39 2026"
      },
      "message": "grpc: deprecate WithSharedWriteBuffer and SharedWriteBuffer (#9060)\n\nSince #8957 shared write buffers are always enabled by default and\npassing `false` is no longer beneficial. This PR deprecates both options\nper the request in #8966, replacing the `# Experimental` notice with a\n`Deprecated:` godoc comment consistent with the pattern used elsewhere\nin `dialoptions.go` and `server.go`.\n\nThe options are left functional for now; removal can follow in a\nsubsequent release.\n\nFixes #8966\n\nRELEASE NOTES:\n* grpc: deprecate `WithSharedWriteBuffer` dial option and\n`SharedWriteBuffer` server option; shared write buffers are now always\nenabled."
    },
    {
      "commit": "6cd0d0c4299b15b014a30f0fcfef0b0422b332c0",
      "tree": "0393e9e221c86735a9ef61da33e28da3dba78995",
      "parents": [
        "b3f2df44cac066e59339887df85a0fd78a46a327"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Thu Apr 16 14:18:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 14:18:47 2026"
      },
      "message": "grpc: add link to CVE in log messages (#9069)\n\nRELEASE NOTES: none"
    },
    {
      "commit": "b3f2df44cac066e59339887df85a0fd78a46a327",
      "tree": "58886d0a420c2ef199a423684a55481b69840a2f",
      "parents": [
        "bac45884b5c5a8a5e035a4db15bab8d8762c796d"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Thu Apr 16 14:18:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 14:18:38 2026"
      },
      "message": "internal/resolver: improve the docstring of ClientInterceptor.NewStream (#9070)\n\nFixes https://github.com/grpc/grpc-go/issues/8925\n\nThis PR clarifies a couple of things in the docstring:\n- The responsibility of the interceptor to delegate stream creation\n- The responsibility of the interceptor to invoke the provided done\nfunction which its own is invoked\n\nRELEASE NOTES: none"
    },
    {
      "commit": "bac45884b5c5a8a5e035a4db15bab8d8762c796d",
      "tree": "820f70b620fa2c6ba46277846d8fcedfd416c480",
      "parents": [
        "39a15f69ed89c40a7148b3441c2e12e89ca3ea67"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Thu Apr 16 09:59:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 09:59:29 2026"
      },
      "message": "readyreader: add buffered reader (#9055)\n\nThis PR introduces a buffered `io.Reader` that automatically releases\nits read buffer when empty. To optimize memory usage, the reader defers\nbuffer reallocation until data is available in the underlying\n`readyreader.Reader` (achieved by calling `ReadOnReady`).\n\nIn a follow-up PR (#9032), the HTTP/2 framer will be updated to utilize\nthis new buffered reader whenever the underlying reader implements the\n`readyreader.Reader` interface.\n\nThe implementation and associated tests are based on the [standard\nlibrary\u0027s](https://cs.opensource.google/go/go/+/refs/tags/go1.26.2:src/bufio/bufio.go;l\u003d35).\n\nRELEASE NOTES: N/A\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "39a15f69ed89c40a7148b3441c2e12e89ca3ea67",
      "tree": "631a9f367475eb4994e3943f2e7c352ce4f5a6df",
      "parents": [
        "e80524df97599752f770e6e1bce3b9cc0240d2c1"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Thu Apr 16 04:45:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 04:45:34 2026"
      },
      "message": "xds: implement cluster metadata parsing for GCP Authentication filter (gRFC A83) (#9044)\n\nThis PR implements the xDS Cluster Metadata parsing logic as specified\nin [gRFC\nA83](https://github.com/grpc/proposal/blob/master/A83-xds-gcp-authn-filter.md#xds-cluster-metadata).\nThis allows the xDS client to extract and validate cluster metadata to\nconfigure the audience used by GCP Authentication filter.\n  \n### Changes\n- **GCP Authn Support**: Added `audienceConverter` to parse\n`envoy.extensions.filters.http.gcp_authn.v3.Audience` protos.\n- **CDS Integration**: Updated\n`validateClusterAndConstructClusterUpdate` to invoke metadata\nvalidation.\n- **Validation**: Added strict validation for the `url` field; an empty\nURL in the audience metadata will now result in a NACK of the Cluster\nresource.\n- **Environment Variable**: Metadata parsing for GCP Authn is guarded by\nthe `GCPAuthenticationFilterEnabled` environment variable.\n  \nRELEASE NOTES: N/A"
    },
    {
      "commit": "e80524df97599752f770e6e1bce3b9cc0240d2c1",
      "tree": "40399b170ee4027d4ae9d46eab8679addbd0ae1b",
      "parents": [
        "6b3284041849906b65f3fd77011e5294e92655f1"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Wed Apr 15 20:21:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 20:21:57 2026"
      },
      "message": "transport: set default header list size to 8KB and guard behind an env variable. (#9019)\n\nPart of: https://github.com/grpc/grpc-go/issues/2308\n\nFollow up of PR: https://github.com/grpc/grpc-go/pull/8845 \n\nThis PR implements a change to restrict the default maximum header list\nsize to 8KB. The change is guarded by a new environment variable\nGRPC_GO_EXPERIMENTAL_DEFAULT_HEADER_LIST_SIZE, which is disabled by\ndefault.\n\nWhen the environment variable is disabled (default), the legacy default\nof 16MB is used. When enabled, RPCs with a total size of headers\nexceeding 8KB will fail unless explicitly configured otherwise by the\nuser.\n\n## Changes\n\n`internal/envconfig`\n* Added DefaultHeaderListSize: A boolean flag controlled by the\nGRPC_GO_EXPERIMENTAL_DEFAULT_HEADER_LIST_SIZE environment variable.\n\n`internal/transport/http2_client.go` and\n`internal/transport/http2_server.go`\n* Use upcomingDefaultHeaderListSize (8KB) as the default value if\n`DefaultHeaderListSize` is enabled.\n* If env variable is disabled and header size is greater than\nupcomingDefaultHeaderListSize, log a warning.\n\nRELEASE NOTES:\n* transport: change default header list size from 16MB to 8KB and guard\nit behind `GRPC_GO_EXPERIMENTAL_DEFAULT_HEADER_LIST_SIZE` env var which\nis disabled by default. The env var will be enabled by default in\nv1.82.0 release."
    },
    {
      "commit": "6b3284041849906b65f3fd77011e5294e92655f1",
      "tree": "7c5e78e00a812f4d444b4b19ae7f81fd6ed16a16",
      "parents": [
        "c5b160eb8cf50f1552b36ed615a77b06baab40ec"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Wed Apr 15 10:33:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 10:33:42 2026"
      },
      "message": "deps: update dependencies for all modules (#9068)\n\nRELEASE NOTES: none"
    },
    {
      "commit": "c5b160eb8cf50f1552b36ed615a77b06baab40ec",
      "tree": "ba37f2459e77b8c458bc4081d25b10956b545f99",
      "parents": [
        "412cfbdd0ce55e8ca2ea0938005cad1adb3548df"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Wed Apr 15 07:27:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 07:27:11 2026"
      },
      "message": "balancer: enable `GRPC_GO_EXPERIMENTAL_CASE_SENSITIVE_BALANCER_REGISTRIES` by default (#9017)\n\nPart of https://github.com/grpc/grpc-go/issues/5288\n\nFollow up of PR: https://github.com/grpc/grpc-go/pull/8837\n\nThis PR enabled the env variable\nGRPC_GO_EXPERIMENTAL_CASE_SENSITIVE_BALANCER_REGISTRIES by default to\ntransition balancer registries to be case-sensitive.\n\nRELEASE NOTES:\n* balancer: balancer registries are now case-sensitive by default.\nDisable GRPC_GO_EXPERIMENTAL_CASE_SENSITIVE_BALANCER_REGISTRIES env var\nto temporarily revert this behavior."
    },
    {
      "commit": "412cfbdd0ce55e8ca2ea0938005cad1adb3548df",
      "tree": "e9c392dfe0f311c4a2e9b5056cd5159458eb4dae",
      "parents": [
        "cdc60dfaaadde45e16aa3c28237c0e655a722c1a"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Wed Apr 15 05:20:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 05:20:00 2026"
      },
      "message": "Change version to 1.82.0-dev (#9064)\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "cdc60dfaaadde45e16aa3c28237c0e655a722c1a",
      "tree": "7b54eb9aee89ec13c25092bd38f826b1db6d5a53",
      "parents": [
        "208d053e3204c806ba9e6205c26aa064c8b42852"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Tue Apr 14 06:16:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 06:16:39 2026"
      },
      "message": "transport: optimize heap allocations in ready reader and update syscall connection handling (#9035)\n\nThis PR eliminates per-call heap allocations in\n`nonBlockingReader.ReadOnReady()`.\n\nPreviously, calling\n[`RawConn.Read`](https://pkg.go.dev/syscall#RawConn.Read) with an inline\nclosure caused captured variables (and the closure itself) to escape to\nthe heap. To resolve this, we moved the closure\u0027s required state and\nreturn values into fields on the `nonBlockingReader` struct. The state\nis set before execution, and the results are read afterward. Because the\nclosure now only relies on the receiver\u0027s fields, we instantiate it\nexactly once during `nonBlockingReader` construction and reuse it,\ncompletely avoiding allocations on the hot path.\n\nAdditionally, this change updates the types for which non-blocking reads\nare performed to the following:\n* Unwrapped types created by `net.Dial`. This avoid reading encrypted\ndata from\n[credentials.syscallConns](https://github.com/grpc/grpc-go/blob/74b3acd1a801570e1cefb28cf61620a4ef7c8ee2/internal/credentials/syscallconn.go#L37-L42).\n* Types that already implement the `ReadyReader` interface themselves to\nsupport encrypted connections.\n \nThese changes are a prerequisite for #9032.\n\n## Benchmarks\n#9032 uses `nonBlockingReader` instead of standard `net.Conn.Read` and\nconfirms zero increase in heap allocations for streaming RPCs.\n\nRELEASE NOTES: N/A\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "208d053e3204c806ba9e6205c26aa064c8b42852",
      "tree": "03e0530e997f917b408b76435c4ded2bb431eb85",
      "parents": [
        "50fe1cc7fd78b78ae638ed90ea78514c934167ac"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Mon Apr 13 19:53:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 19:53:49 2026"
      },
      "message": "xds/resolver: pass complete XDSConfig in RPC context for HTTP filters (gRFC A83) (#9046)\n\nThis PR modifies the xDS resolver\u0027s config selector to place the\ncomplete `XDSConfig` into the RPC context during config selection. This\nmakes the full xDS configuration available to HTTP filters as described\n[here](https://github.com/grpc/proposal/blob/master/A83-xds-gcp-authn-filter.md#xds-configselector-behavior).\n\nKey changes:\n- **`xdsresource`**: Added `SetXDSConfigToContext` and\n`XDSConfigFromContext` helper functions using context key.\n- **`resolver`**: Updated `configSelector.SelectConfig` to inject the\ncurrent `XDSConfig` into the RPC context .\n- **Deduplication of Test Helpers**: Moved `makeXDSConfig` and\n`verifyXDSConfig` from `xds_dependency_manager_test.go` to a shared\nlocation in `internal/xds/test/e2e/e2e_utils.go` to avoid code\nduplication across packages.\n- **Tests**: Added a dedicated test `TestResolver_XDSConfigInRPCContext`\nto verify that the config is correctly propagated.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "50fe1cc7fd78b78ae638ed90ea78514c934167ac",
      "tree": "bb767db3872eaafab63f328c7eee02574bc40864",
      "parents": [
        "d574bad188f25ba03d41a506e6f2ef93837ad10b"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Mon Apr 13 14:20:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 14:20:53 2026"
      },
      "message": "test: Fix flaky test `TestServerStreaming_ClientCallRecvMsgTwice` in `end2end_test.go`. (#9058)\n\nFixes: #9057 \n\n**Problem**\nThe test `TestServerStreaming_ClientCallRecvMsgTwice` was flaky with the\nerror `stream.Send(_) \u003d EOF, want \u003cnil\u003e`. This occurred because the\nserver-side handler for the client-streaming RPC (StreamingInputCallF)\nwas immediately calling SendAndClose and returning without reading the\nmessage sent by the client.\n\nThis creates a race condition: if the server closes the stream before\nthe client has finished sending its message, the client\u0027s Send operation\ncan fail with io.EOF.\n\n**Fix**\nAdded a call to `stream.RecvMsg` in the server handler to ensure that\nthe server receives the client\u0027s message before it responds and closes\nthe stream. This ensures proper synchronization between the client and\nserver and prevents the stream from being closed prematurely during the\nSend operation.\n\nSuccessfully run the test on forge for 1 million times without any\nflake: http://sponge2/7dff4ca4-9cf8-413c-9842-6ce562be8e4a\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "d574bad188f25ba03d41a506e6f2ef93837ad10b",
      "tree": "80a3eadbf86c6bed83c847ee9dd33a71e48f992d",
      "parents": [
        "b8bf4d0488a351c563d63797ffba321585d6bb24"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Apr 10 10:51:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 10:51:59 2026"
      },
      "message": "build(deps): bump go.opentelemetry.io/otel/sdk from 1.42.0 to 1.43.0 (#9050)\n\nBumps\n[go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go)\nfrom 1.42.0 to 1.43.0.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md\"\u003ego.opentelemetry.io/otel/sdk\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.43.0/0.65.0/0.19.0] 2026-04-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eIsRandom\u003c/code\u003e and \u003ccode\u003eWithRandom\u003c/code\u003e on\n\u003ccode\u003eTraceFlags\u003c/code\u003e, and \u003ccode\u003eIsRandom\u003c/code\u003e on\n\u003ccode\u003eSpanContext\u003c/code\u003e in \u003ccode\u003ego.opentelemetry.io/otel/trace\u003c/code\u003e\nfor \u003ca\nhref\u003d\"https://www.w3.org/TR/trace-context-2/#random-trace-id-flag\"\u003eW3C\nTrace Context Level 2 Random Trace ID Flag\u003c/a\u003e support. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8012\"\u003e#8012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd service detection with \u003ccode\u003eWithService\u003c/code\u003e in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/resource\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7642\"\u003e#7642\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eDefaultWithContext\u003c/code\u003e and\n\u003ccode\u003eEnvironmentWithContext\u003c/code\u003e in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/resource\u003c/code\u003e to support plumbing\n\u003ccode\u003econtext.Context\u003c/code\u003e through default and environment detectors.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8051\"\u003e#8051\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for per-series start time tracking for cumulative\nmetrics in \u003ccode\u003ego.opentelemetry.io/otel/sdk/metric\u003c/code\u003e.\nSet \u003ccode\u003eOTEL_GO_X_PER_SERIES_START_TIMESTAMPS\u003dtrue\u003c/code\u003e to enable.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8060\"\u003e#8060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eWithCardinalityLimitSelector\u003c/code\u003e for metric reader for\nconfiguring cardinality limits specific to the instrument kind. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7855\"\u003e#7855\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIntroduce the \u003ccode\u003eEMPTY\u003c/code\u003e Type in\n\u003ccode\u003ego.opentelemetry.io/otel/attribute\u003c/code\u003e to reflect that an empty\nvalue is now a valid value, with \u003ccode\u003eINVALID\u003c/code\u003e remaining as a\ndeprecated alias of \u003ccode\u003eEMPTY\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove slice handling in\n\u003ccode\u003ego.opentelemetry.io/otel/attribute\u003c/code\u003e to optimize short slice\nvalues with fixed-size fast paths. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8039\"\u003e#8039\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of span metric recording in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/trace\u003c/code\u003e by returning early if\nself-observability is not enabled. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8067\"\u003e#8067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove formatting of metric data diffs in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8073\"\u003e#8073\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate \u003ccode\u003eINVALID\u003c/code\u003e in\n\u003ccode\u003ego.opentelemetry.io/otel/attribute\u003c/code\u003e. Use \u003ccode\u003eEMPTY\u003c/code\u003e\ninstead. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReturn spec-compliant \u003ccode\u003eTraceIdRatioBased\u003c/code\u003e description.\nThis is a breaking behavioral change, but it is necessary to\nmake the implementation \u003ca\nhref\u003d\"https://opentelemetry.io/docs/specs/otel/trace/sdk/#traceidratiobased\"\u003espec-compliant\u003c/a\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8027\"\u003e#8027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix a race condition in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/metric\u003c/code\u003e where the lastvalue\naggregation could collect the value 0 even when no zero-value\nmeasurements were recorded. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8056\"\u003e#8056\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLimit HTTP response body to 4 MiB in\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp\u003c/code\u003e\nto mitigate excessive memory usage caused by a misconfigured or\nmalicious server.\nResponses exceeding the limit are treated as non-retryable errors. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLimit HTTP response body to 4 MiB in\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp\u003c/code\u003e\nto mitigate excessive memory usage caused by a misconfigured or\nmalicious server.\nResponses exceeding the limit are treated as non-retryable errors. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLimit HTTP response body to 4 MiB in\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp\u003c/code\u003e\nto mitigate excessive memory usage caused by a misconfigured or\nmalicious server.\nResponses exceeding the limit are treated as non-retryable errors. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eWithHostID\u003c/code\u003e detector in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/resource\u003c/code\u003e to use full path for\n\u003ccode\u003ekenv\u003c/code\u003e command on BSD. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8113\"\u003e#8113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix missing \u003ccode\u003erequest.GetBody\u003c/code\u003e in\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp\u003c/code\u003e\nto correctly handle HTTP2 GOAWAY frame. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8096\"\u003e#8096\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/9276201a64b623606e3eaa0d61ae8ee6d62756c0\"\u003e\u003ccode\u003e9276201\u003c/code\u003e\u003c/a\u003e\nRelease v1.43.0 / v0.65.0 / v0.19.0 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8128\"\u003e#8128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/61b8c9466c4e6b17e69b622279fe9b63fb15c89a\"\u003e\u003ccode\u003e61b8c94\u003c/code\u003e\u003c/a\u003e\nchore(deps): update module github.com/mattn/go-runewidth to v0.0.22 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8131\"\u003e#8131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/97a086e82ffe01502f4c620e9c447efa229e2a23\"\u003e\u003ccode\u003e97a086e\u003c/code\u003e\u003c/a\u003e\nchore(deps): update github.com/golangci/dupl digest to c99c5cf (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8122\"\u003e#8122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/5e363de517dba6db62736b2f5cdef0e0929b4cd0\"\u003e\u003ccode\u003e5e363de\u003c/code\u003e\u003c/a\u003e\nlimit response body size for OTLP HTTP exporters (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/35214b60138eac8dec97a2d2b851d8c8471680c7\"\u003e\u003ccode\u003e35214b6\u003c/code\u003e\u003c/a\u003e\nUse an absolute path when calling bsd kenv (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8113\"\u003e#8113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/290024ceaf695f9cdbf29a0c6731a317d92bc361\"\u003e\u003ccode\u003e290024c\u003c/code\u003e\u003c/a\u003e\nfix(deps): update module google.golang.org/grpc to v1.80.0 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8121\"\u003e#8121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/e70658e098033d6bb5ec1b399de16bbb2642f6dc\"\u003e\u003ccode\u003ee70658e\u003c/code\u003e\u003c/a\u003e\nfix: support getBody in otelploghttp (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8096\"\u003e#8096\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/4afe468e3b4859c949a1c1e8d92684d43d86ef8a\"\u003e\u003ccode\u003e4afe468\u003c/code\u003e\u003c/a\u003e\nfix(deps): update googleapis to 9d38bb4 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8117\"\u003e#8117\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/b9ca729776309e3c08fe700c131797a3b4d10634\"\u003e\u003ccode\u003eb9ca729\u003c/code\u003e\u003c/a\u003e\nchore(deps): update module github.com/go-git/go-git/v5 to v5.17.2 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8115\"\u003e#8115\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/69472ec56cb7674d55ca2e2bcb04dea73228ab79\"\u003e\u003ccode\u003e69472ec\u003c/code\u003e\u003c/a\u003e\nchore(deps): update fossas/fossa-action action to v1.9.0 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8118\"\u003e#8118\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/compare/v1.42.0...v1.43.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nRELEASE NOTES: N/A\n\n---------\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Pranjali-2501 \u003cpranjalisaxena@google.com\u003e"
    },
    {
      "commit": "b8bf4d0488a351c563d63797ffba321585d6bb24",
      "tree": "43958ef62a6b956185ef3f81dfdd637eb3fb1fca",
      "parents": [
        "19d23bf9bb0c978bccfaea669b8bb3a9d5d893a5"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Apr 10 10:36:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 10:36:29 2026"
      },
      "message": "build(deps): bump go.opentelemetry.io/otel/sdk from 1.42.0 to 1.43.0 in /interop/xds (#9051)\n\nBumps\n[go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go)\nfrom 1.42.0 to 1.43.0.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md\"\u003ego.opentelemetry.io/otel/sdk\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.43.0/0.65.0/0.19.0] 2026-04-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eIsRandom\u003c/code\u003e and \u003ccode\u003eWithRandom\u003c/code\u003e on\n\u003ccode\u003eTraceFlags\u003c/code\u003e, and \u003ccode\u003eIsRandom\u003c/code\u003e on\n\u003ccode\u003eSpanContext\u003c/code\u003e in \u003ccode\u003ego.opentelemetry.io/otel/trace\u003c/code\u003e\nfor \u003ca\nhref\u003d\"https://www.w3.org/TR/trace-context-2/#random-trace-id-flag\"\u003eW3C\nTrace Context Level 2 Random Trace ID Flag\u003c/a\u003e support. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8012\"\u003e#8012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd service detection with \u003ccode\u003eWithService\u003c/code\u003e in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/resource\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7642\"\u003e#7642\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eDefaultWithContext\u003c/code\u003e and\n\u003ccode\u003eEnvironmentWithContext\u003c/code\u003e in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/resource\u003c/code\u003e to support plumbing\n\u003ccode\u003econtext.Context\u003c/code\u003e through default and environment detectors.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8051\"\u003e#8051\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for per-series start time tracking for cumulative\nmetrics in \u003ccode\u003ego.opentelemetry.io/otel/sdk/metric\u003c/code\u003e.\nSet \u003ccode\u003eOTEL_GO_X_PER_SERIES_START_TIMESTAMPS\u003dtrue\u003c/code\u003e to enable.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8060\"\u003e#8060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eWithCardinalityLimitSelector\u003c/code\u003e for metric reader for\nconfiguring cardinality limits specific to the instrument kind. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7855\"\u003e#7855\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIntroduce the \u003ccode\u003eEMPTY\u003c/code\u003e Type in\n\u003ccode\u003ego.opentelemetry.io/otel/attribute\u003c/code\u003e to reflect that an empty\nvalue is now a valid value, with \u003ccode\u003eINVALID\u003c/code\u003e remaining as a\ndeprecated alias of \u003ccode\u003eEMPTY\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove slice handling in\n\u003ccode\u003ego.opentelemetry.io/otel/attribute\u003c/code\u003e to optimize short slice\nvalues with fixed-size fast paths. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8039\"\u003e#8039\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of span metric recording in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/trace\u003c/code\u003e by returning early if\nself-observability is not enabled. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8067\"\u003e#8067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove formatting of metric data diffs in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8073\"\u003e#8073\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate \u003ccode\u003eINVALID\u003c/code\u003e in\n\u003ccode\u003ego.opentelemetry.io/otel/attribute\u003c/code\u003e. Use \u003ccode\u003eEMPTY\u003c/code\u003e\ninstead. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReturn spec-compliant \u003ccode\u003eTraceIdRatioBased\u003c/code\u003e description.\nThis is a breaking behavioral change, but it is necessary to\nmake the implementation \u003ca\nhref\u003d\"https://opentelemetry.io/docs/specs/otel/trace/sdk/#traceidratiobased\"\u003espec-compliant\u003c/a\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8027\"\u003e#8027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix a race condition in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/metric\u003c/code\u003e where the lastvalue\naggregation could collect the value 0 even when no zero-value\nmeasurements were recorded. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8056\"\u003e#8056\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLimit HTTP response body to 4 MiB in\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp\u003c/code\u003e\nto mitigate excessive memory usage caused by a misconfigured or\nmalicious server.\nResponses exceeding the limit are treated as non-retryable errors. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLimit HTTP response body to 4 MiB in\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp\u003c/code\u003e\nto mitigate excessive memory usage caused by a misconfigured or\nmalicious server.\nResponses exceeding the limit are treated as non-retryable errors. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLimit HTTP response body to 4 MiB in\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp\u003c/code\u003e\nto mitigate excessive memory usage caused by a misconfigured or\nmalicious server.\nResponses exceeding the limit are treated as non-retryable errors. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eWithHostID\u003c/code\u003e detector in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/resource\u003c/code\u003e to use full path for\n\u003ccode\u003ekenv\u003c/code\u003e command on BSD. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8113\"\u003e#8113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix missing \u003ccode\u003erequest.GetBody\u003c/code\u003e in\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp\u003c/code\u003e\nto correctly handle HTTP2 GOAWAY frame. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8096\"\u003e#8096\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/9276201a64b623606e3eaa0d61ae8ee6d62756c0\"\u003e\u003ccode\u003e9276201\u003c/code\u003e\u003c/a\u003e\nRelease v1.43.0 / v0.65.0 / v0.19.0 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8128\"\u003e#8128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/61b8c9466c4e6b17e69b622279fe9b63fb15c89a\"\u003e\u003ccode\u003e61b8c94\u003c/code\u003e\u003c/a\u003e\nchore(deps): update module github.com/mattn/go-runewidth to v0.0.22 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8131\"\u003e#8131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/97a086e82ffe01502f4c620e9c447efa229e2a23\"\u003e\u003ccode\u003e97a086e\u003c/code\u003e\u003c/a\u003e\nchore(deps): update github.com/golangci/dupl digest to c99c5cf (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8122\"\u003e#8122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/5e363de517dba6db62736b2f5cdef0e0929b4cd0\"\u003e\u003ccode\u003e5e363de\u003c/code\u003e\u003c/a\u003e\nlimit response body size for OTLP HTTP exporters (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/35214b60138eac8dec97a2d2b851d8c8471680c7\"\u003e\u003ccode\u003e35214b6\u003c/code\u003e\u003c/a\u003e\nUse an absolute path when calling bsd kenv (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8113\"\u003e#8113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/290024ceaf695f9cdbf29a0c6731a317d92bc361\"\u003e\u003ccode\u003e290024c\u003c/code\u003e\u003c/a\u003e\nfix(deps): update module google.golang.org/grpc to v1.80.0 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8121\"\u003e#8121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/e70658e098033d6bb5ec1b399de16bbb2642f6dc\"\u003e\u003ccode\u003ee70658e\u003c/code\u003e\u003c/a\u003e\nfix: support getBody in otelploghttp (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8096\"\u003e#8096\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/4afe468e3b4859c949a1c1e8d92684d43d86ef8a\"\u003e\u003ccode\u003e4afe468\u003c/code\u003e\u003c/a\u003e\nfix(deps): update googleapis to 9d38bb4 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8117\"\u003e#8117\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/b9ca729776309e3c08fe700c131797a3b4d10634\"\u003e\u003ccode\u003eb9ca729\u003c/code\u003e\u003c/a\u003e\nchore(deps): update module github.com/go-git/go-git/v5 to v5.17.2 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8115\"\u003e#8115\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/69472ec56cb7674d55ca2e2bcb04dea73228ab79\"\u003e\u003ccode\u003e69472ec\u003c/code\u003e\u003c/a\u003e\nchore(deps): update fossas/fossa-action action to v1.9.0 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8118\"\u003e#8118\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/compare/v1.42.0...v1.43.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nRELEASE NOTES: N/A\n\n---------\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Pranjali-2501 \u003cpranjalisaxena@google.com\u003e"
    },
    {
      "commit": "19d23bf9bb0c978bccfaea669b8bb3a9d5d893a5",
      "tree": "503f1abe76cd012074833a37b79c71ba8a5ad2f2",
      "parents": [
        "74b3acd1a801570e1cefb28cf61620a4ef7c8ee2"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Apr 10 10:15:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 10:15:38 2026"
      },
      "message": "build(deps): bump go.opentelemetry.io/otel/sdk from 1.42.0 to 1.43.0 in /examples (#9052)\n\nBumps\n[go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go)\nfrom 1.42.0 to 1.43.0.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md\"\u003ego.opentelemetry.io/otel/sdk\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.43.0/0.65.0/0.19.0] 2026-04-02\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eIsRandom\u003c/code\u003e and \u003ccode\u003eWithRandom\u003c/code\u003e on\n\u003ccode\u003eTraceFlags\u003c/code\u003e, and \u003ccode\u003eIsRandom\u003c/code\u003e on\n\u003ccode\u003eSpanContext\u003c/code\u003e in \u003ccode\u003ego.opentelemetry.io/otel/trace\u003c/code\u003e\nfor \u003ca\nhref\u003d\"https://www.w3.org/TR/trace-context-2/#random-trace-id-flag\"\u003eW3C\nTrace Context Level 2 Random Trace ID Flag\u003c/a\u003e support. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8012\"\u003e#8012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd service detection with \u003ccode\u003eWithService\u003c/code\u003e in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/resource\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7642\"\u003e#7642\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eDefaultWithContext\u003c/code\u003e and\n\u003ccode\u003eEnvironmentWithContext\u003c/code\u003e in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/resource\u003c/code\u003e to support plumbing\n\u003ccode\u003econtext.Context\u003c/code\u003e through default and environment detectors.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8051\"\u003e#8051\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport attributes with empty value (\u003ccode\u003eattribute.EMPTY\u003c/code\u003e)\nin\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for per-series start time tracking for cumulative\nmetrics in \u003ccode\u003ego.opentelemetry.io/otel/sdk/metric\u003c/code\u003e.\nSet \u003ccode\u003eOTEL_GO_X_PER_SERIES_START_TIMESTAMPS\u003dtrue\u003c/code\u003e to enable.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8060\"\u003e#8060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eWithCardinalityLimitSelector\u003c/code\u003e for metric reader for\nconfiguring cardinality limits specific to the instrument kind. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7855\"\u003e#7855\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIntroduce the \u003ccode\u003eEMPTY\u003c/code\u003e Type in\n\u003ccode\u003ego.opentelemetry.io/otel/attribute\u003c/code\u003e to reflect that an empty\nvalue is now a valid value, with \u003ccode\u003eINVALID\u003c/code\u003e remaining as a\ndeprecated alias of \u003ccode\u003eEMPTY\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove slice handling in\n\u003ccode\u003ego.opentelemetry.io/otel/attribute\u003c/code\u003e to optimize short slice\nvalues with fixed-size fast paths. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8039\"\u003e#8039\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of span metric recording in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/trace\u003c/code\u003e by returning early if\nself-observability is not enabled. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8067\"\u003e#8067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove formatting of metric data diffs in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8073\"\u003e#8073\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate \u003ccode\u003eINVALID\u003c/code\u003e in\n\u003ccode\u003ego.opentelemetry.io/otel/attribute\u003c/code\u003e. Use \u003ccode\u003eEMPTY\u003c/code\u003e\ninstead. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8038\"\u003e#8038\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReturn spec-compliant \u003ccode\u003eTraceIdRatioBased\u003c/code\u003e description.\nThis is a breaking behavioral change, but it is necessary to\nmake the implementation \u003ca\nhref\u003d\"https://opentelemetry.io/docs/specs/otel/trace/sdk/#traceidratiobased\"\u003espec-compliant\u003c/a\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8027\"\u003e#8027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix a race condition in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/metric\u003c/code\u003e where the lastvalue\naggregation could collect the value 0 even when no zero-value\nmeasurements were recorded. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8056\"\u003e#8056\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLimit HTTP response body to 4 MiB in\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp\u003c/code\u003e\nto mitigate excessive memory usage caused by a misconfigured or\nmalicious server.\nResponses exceeding the limit are treated as non-retryable errors. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLimit HTTP response body to 4 MiB in\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp\u003c/code\u003e\nto mitigate excessive memory usage caused by a misconfigured or\nmalicious server.\nResponses exceeding the limit are treated as non-retryable errors. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLimit HTTP response body to 4 MiB in\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp\u003c/code\u003e\nto mitigate excessive memory usage caused by a misconfigured or\nmalicious server.\nResponses exceeding the limit are treated as non-retryable errors. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eWithHostID\u003c/code\u003e detector in\n\u003ccode\u003ego.opentelemetry.io/otel/sdk/resource\u003c/code\u003e to use full path for\n\u003ccode\u003ekenv\u003c/code\u003e command on BSD. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8113\"\u003e#8113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix missing \u003ccode\u003erequest.GetBody\u003c/code\u003e in\n\u003ccode\u003ego.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp\u003c/code\u003e\nto correctly handle HTTP2 GOAWAY frame. (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8096\"\u003e#8096\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/9276201a64b623606e3eaa0d61ae8ee6d62756c0\"\u003e\u003ccode\u003e9276201\u003c/code\u003e\u003c/a\u003e\nRelease v1.43.0 / v0.65.0 / v0.19.0 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8128\"\u003e#8128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/61b8c9466c4e6b17e69b622279fe9b63fb15c89a\"\u003e\u003ccode\u003e61b8c94\u003c/code\u003e\u003c/a\u003e\nchore(deps): update module github.com/mattn/go-runewidth to v0.0.22 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8131\"\u003e#8131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/97a086e82ffe01502f4c620e9c447efa229e2a23\"\u003e\u003ccode\u003e97a086e\u003c/code\u003e\u003c/a\u003e\nchore(deps): update github.com/golangci/dupl digest to c99c5cf (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8122\"\u003e#8122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/5e363de517dba6db62736b2f5cdef0e0929b4cd0\"\u003e\u003ccode\u003e5e363de\u003c/code\u003e\u003c/a\u003e\nlimit response body size for OTLP HTTP exporters (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/35214b60138eac8dec97a2d2b851d8c8471680c7\"\u003e\u003ccode\u003e35214b6\u003c/code\u003e\u003c/a\u003e\nUse an absolute path when calling bsd kenv (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8113\"\u003e#8113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/290024ceaf695f9cdbf29a0c6731a317d92bc361\"\u003e\u003ccode\u003e290024c\u003c/code\u003e\u003c/a\u003e\nfix(deps): update module google.golang.org/grpc to v1.80.0 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8121\"\u003e#8121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/e70658e098033d6bb5ec1b399de16bbb2642f6dc\"\u003e\u003ccode\u003ee70658e\u003c/code\u003e\u003c/a\u003e\nfix: support getBody in otelploghttp (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8096\"\u003e#8096\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/4afe468e3b4859c949a1c1e8d92684d43d86ef8a\"\u003e\u003ccode\u003e4afe468\u003c/code\u003e\u003c/a\u003e\nfix(deps): update googleapis to 9d38bb4 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8117\"\u003e#8117\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/b9ca729776309e3c08fe700c131797a3b4d10634\"\u003e\u003ccode\u003eb9ca729\u003c/code\u003e\u003c/a\u003e\nchore(deps): update module github.com/go-git/go-git/v5 to v5.17.2 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8115\"\u003e#8115\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/commit/69472ec56cb7674d55ca2e2bcb04dea73228ab79\"\u003e\u003ccode\u003e69472ec\u003c/code\u003e\u003c/a\u003e\nchore(deps): update fossas/fossa-action action to v1.9.0 (\u003ca\nhref\u003d\"https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8118\"\u003e#8118\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/open-telemetry/opentelemetry-go/compare/v1.42.0...v1.43.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dgo.opentelemetry.io/otel/sdk\u0026package-manager\u003dgo_modules\u0026previous-version\u003d1.42.0\u0026new-version\u003d1.43.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the\n[Security Alerts page](https://github.com/grpc/grpc-go/network/alerts).\n\n\u003c/details\u003e\n\n\nRELEASE NOTES: N/A\n\n---------\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Pranjali-2501 \u003cpranjalisaxena@google.com\u003e"
    },
    {
      "commit": "74b3acd1a801570e1cefb28cf61620a4ef7c8ee2",
      "tree": "cccea453db054f41f0b85fbc7cb093056a2dee2b",
      "parents": [
        "1c132b9bfcd929e2c4ffbe48d2c2436608191f07"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Wed Apr 08 16:38:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 16:38:37 2026"
      },
      "message": "xds: remove TODO to replace Endpoint with resolver.Endpoint struct (#9049)\n\nFixes https://github.com/grpc/grpc-go/issues/8757\n\nSee https://github.com/grpc/grpc-go/pull/9023#discussion_r3014697410 for\nmore context.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "1c132b9bfcd929e2c4ffbe48d2c2436608191f07",
      "tree": "294d0c958e7f08969734ab96ba7da91d5840df3e",
      "parents": [
        "280b81bd2bf7db4a83fb5413c264758314501319"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Wed Apr 08 06:50:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 06:50:24 2026"
      },
      "message": "tests: avoid relying on socket reads/writes for synchronization (#9033)\n\n### Background\nIn #9032, we will transition from standard `net.Conn.Read` methods to\n`syscall` UNIX APIs to enable non-memory-pinning reads. Due to this\nchange, the Go race detector beings failing on tests that share state\nbetween client and server goroutines without standard synchronization\nprimitives (mutexes, channels, etc.).\n\nBecause these tests rely on the network request itself as a memory\nbarrier, they are logically safe but technically racy from the Go\nruntime\u0027s perspective. The standard `net.Conn` leverages Go\u0027s internal\nnetwork poller, which inadvertently provides the \"happens-before\" edges\nthe race detector looks for. Dropping down to raw syscalls bypasses\nthis, causing the detector to flag the accesses. (Minimal repro:\nhttps://go.dev/play/p/yvEtBmLTOJ2)\n\n### Solution\nIntroduce explicit synchronization to the affected tests. Tests now\nproperly coordinate shared state access between clients and servers\nwithout relying on socket I/O timing.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "280b81bd2bf7db4a83fb5413c264758314501319",
      "tree": "53cbfa626a5dd1764e2c472f9becea11f05d4bba",
      "parents": [
        "ce2bdef9156933c3982e5143fb7bfbcc3091eee5"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Apr 07 13:17:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 13:17:12 2026"
      },
      "message": "build(deps): bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 (#9042)\n\nBumps\n[github.com/go-jose/go-jose/v4](https://github.com/go-jose/go-jose) from\n4.1.3 to 4.1.4.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/go-jose/go-jose/commit/0e59876635f3dbf46d7b5e97b52bb75a3f96e7d9\"\u003e\u003ccode\u003e0e59876\u003c/code\u003e\u003c/a\u003e\nMerge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/go-jose/go-jose/commit/ddffdbcec8bdadea8e02a20bdf19239878228215\"\u003e\u003ccode\u003eddffdbc\u003c/code\u003e\u003c/a\u003e\nBump actions/checkout from 5 to 6 (\u003ca\nhref\u003d\"https://redirect.github.com/go-jose/go-jose/issues/213\"\u003e#213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/go-jose/go-jose/compare/v4.1.3...v4.1.4\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dgithub.com/go-jose/go-jose/v4\u0026package-manager\u003dgo_modules\u0026previous-version\u003d4.1.3\u0026new-version\u003d4.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the\n[Security Alerts page](https://github.com/grpc/grpc-go/network/alerts).\n\n\u003c/details\u003e\n\nRELEASE NOTES: N/A\n\n---------\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Pranjali-2501 \u003cpranjalisaxena@google.com\u003e"
    },
    {
      "commit": "ce2bdef9156933c3982e5143fb7bfbcc3091eee5",
      "tree": "1fff923e7022b31fcd01543adce64fc66e2c4bc7",
      "parents": [
        "71849e8cac98814fc5e46633c592d000762b1817"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Tue Apr 07 13:04:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 13:04:42 2026"
      },
      "message": "transport: fixes non-linux environment failures (#9048)\n\nThis PR removes the names of the unused parameters in\n`raw_conn_nonlinux.go` file. Also skips the\n`TestReadyReader_TCP_Blocking` for non-linux environment because the\nfunctionality is meant only for linux environments and failing on\nnon-linux environments.\n\nRELEASE NOTES: None"
    },
    {
      "commit": "71849e8cac98814fc5e46633c592d000762b1817",
      "tree": "249e89f0dd4e95e5b3e77ffe724ffa1a1c32bc36",
      "parents": [
        "5fdb6d087ad79848f3b72a8f79f398152c42a18b"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Tue Apr 07 10:21:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 10:21:03 2026"
      },
      "message": "xds: change clusterimpl to add SNI to handshake info (#9016)\n\nThis PR is the final PR for implementation of [gRFC\nA101](https://github.com/grpc/proposal/blob/master/A101-SNI-setting-and-SNI-SAN-validation.md)\n\nThis PR does the following : \n- Change NewSubconn in ClusterImpl to add the hostname to attribute of\nthe address so that it can be propagated to the ClientHandshake and\nretrieved there to decide the SNI which can be either DNS Hostname or\nendpoint Hostname if `AutoHostSni` is set , or the SNI received from\ncontrol plane. This is done because each endpoint can have a different\nhostname. It is not a config that can be used across all endpoints of\nthe cluster , so it cannot be set in handshake info.\n- Add `AutoHostSni` filed to the handshake info.\n- Adds a functions to set and get hostname from address attributes. As\nof now, there was a function to get the Hostname from address\nbalancer.Attributes and set in endpoint atrributes.\n- Adds E2E tests to verify the complete SNI setting and validation flow.\n- Fix comments that mention CDS balancer creates handshake info.\n\nNote: We will turn the environment variable to true only after inter-op\ntests pass.\n\nRELEASE NOTES:\n- xds: add SNI support and SAN validation behind\nGRPC_EXPERIMENTAL_XDS_SNI ([gRFC\nA101](https://github.com/grpc/proposal/blob/master/A101-SNI-setting-and-SNI-SAN-validation.md))"
    },
    {
      "commit": "5fdb6d087ad79848f3b72a8f79f398152c42a18b",
      "tree": "933cd926cbe6618e592951930e51fbe05bd91511",
      "parents": [
        "aa4d281834e244825881a5856a87296bb50c3f7a"
      ],
      "author": {
        "name": "Mikhail Mazurskiy",
        "email": "126021+ash2k@users.noreply.github.com",
        "time": "Tue Apr 07 05:28:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 05:28:26 2026"
      },
      "message": "mem: add `Buffer.Slice()` (#8977)\n\nI have a `CodecV2` that gives me a `mem.BufferSlice` (i.e. exposes what\nit gets from gRPC directly). I need to get another `mem.BufferSlice`\nfrom it that is a subslice. In some scenarios I need to slice the first\nand/or the last buffer to get only the subset of data. Hence, having a\n`Slice()` method on the `Buffer` type would be really useful.\n\n\nAnother use case: I want to use `BufferSlice.Reader` and implement a\n`Peek()`(or similar) to get a `BufferSlice` of the next N bytes. I don\u0027t\nwant a `[]byte` or `[][]byte`, I\u0027d like to return this `BufferSlice`\nfrom a codecv2 and let gRPC free the buffers when it no longer needs\nthem (i.e. I don\u0027t want to wrap those individual `[]byte` into\n`BufferSlice`s).\n\nRELEASE NOTES:\n* mem: add `mem.Buffer.Slice()` - new method to slice the buffer like a\nslice."
    },
    {
      "commit": "aa4d281834e244825881a5856a87296bb50c3f7a",
      "tree": "de4c4d95e139797ff6aa9e94f14876386e078b52",
      "parents": [
        "a21508ee84dbb1051fe617beef4bb95f73886097"
      ],
      "author": {
        "name": "Madhav Bissa",
        "email": "48023579+mbissa@users.noreply.github.com",
        "time": "Fri Apr 03 00:08:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 00:08:45 2026"
      },
      "message": "xds/internal/client: Add async gauge metrics for Connected and Resources (A78) (#8807)\n\nThis PR leverages the async gauge framework and implements the xdsclient\nmetrics to report number of xds resources and whether or not the xDS\nclient currently has a working ADS stream to the xDS server along with\nthe required labels as part of\n[A78](https://github.com/grpc/proposal/blob/master/A78-grpc-metrics-wrr-pf-xds.md)\n\nRELEASE NOTES:\n* xds/internal/client: Add async gauge metrics for\n\"grpc.xds_client.connected\" and \"grpc.xds_client.resources\" as part of\n[A78](https://github.com/grpc/proposal/blob/master/A78-grpc-metrics-wrr-pf-xds.md)."
    },
    {
      "commit": "a21508ee84dbb1051fe617beef4bb95f73886097",
      "tree": "aac56adabe195f73621e87941878cc24dc015851",
      "parents": [
        "99312fedcc195412c7c13efda6f188d42ead2e23"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Thu Apr 02 19:57:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 19:57:35 2026"
      },
      "message": "transport: move readyreader to its own package (#9037)\n\nThis reduces the transitive dependencies of the ALTS credentials which\nare used in Google3 without gRPC.\n\nInternal issue: b/498988713\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "99312fedcc195412c7c13efda6f188d42ead2e23",
      "tree": "87c008be712efa481244dc681bb603c6247f5a64",
      "parents": [
        "21438020fd4e0154302f3e234462097d4ab2513f"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Thu Apr 02 10:06:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 10:06:11 2026"
      },
      "message": "stats: Use service import for gRPC code (#9034)\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "21438020fd4e0154302f3e234462097d4ab2513f",
      "tree": "595934be1e6a1d71376702ebd6046ee29715a0c6",
      "parents": [
        "2b8b708f2d81733cd599502419358419911365dc"
      ],
      "author": {
        "name": "Madhav Bissa",
        "email": "48023579+mbissa@users.noreply.github.com",
        "time": "Thu Apr 02 09:32:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 09:32:24 2026"
      },
      "message": "xds: LRS custom metrics changes (a85) (#9005)\n\nAddresses\n[A85](https://github.com/grpc/proposal/blob/master/A85-lrs-custom-metrics-changes.md).\nImplements changes for LRS custom metrics.\nRELEASE NOTES:\n* xds: Add changes for LRS custom metrics (A85)"
    },
    {
      "commit": "2b8b708f2d81733cd599502419358419911365dc",
      "tree": "267807ec9ff934c288a9cc71f1321c9d9cc435cd",
      "parents": [
        "c754bf92cb55ef739c397e8583e823ab09e5b9c3"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Thu Apr 02 04:40:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 04:40:55 2026"
      },
      "message": "interop: regenerate proto (#9028)\n\nRELEASE NOTES: none"
    },
    {
      "commit": "c754bf92cb55ef739c397e8583e823ab09e5b9c3",
      "tree": "f6cb3d5895cc72fe1f2e1be2b7ffddf557c87db6",
      "parents": [
        "c33aa45e147aa1e08070a0764c285ea30a82688a"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Wed Apr 01 16:32:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 01 16:32:47 2026"
      },
      "message": "transport: Fix handling of closed connections in ReadyReader (#9031)\n\n## Problem\nThe `ReadyReader` interface was added to support non-blocking reads\nusing the `syscall` package in #8964. While working on [follow-up\nchanges](https://github.com/grpc/grpc-go/compare/master...arjan-bal:h2-read-buffer-pool?expand\u003d1)\nto support pooling read buffers in the http2 layer, I noticed test\nfailures where servers were closing the TCP connection, but the client\nchannel remained in the READY state.\n\n## Root Cause\nThe [unix.Read](https://pkg.go.dev/golang.org/x/sys/unix#Read) function\ndoesn\u0027t consider the graceful closure of a connection to be an error and\ninstead returns `(0, nil)`. Since consumers of the `io.Reader` interface\nexpect an `io.EOF` error in such cases, the translation from `(0, nil)`\nto `(0, io.EOF)` needs to be handled by the reader implementation.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "c33aa45e147aa1e08070a0764c285ea30a82688a",
      "tree": "049926e8cb55434062b40d281198d12e0da46b30",
      "parents": [
        "34da8d039c53f186d2537cadb93179bd9f98720e"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Wed Apr 01 07:00:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 01 07:00:42 2026"
      },
      "message": "alts: Release read buffer when blocked on socket read (#8964)\n\n## Problem\nNormally, since the Go `net.Conn` interface provides the abstraction of\na blocking read to hide the complexity of non-blocking I/O (epoll,\nkqueue), users need to pass a read buffer to the `net.Conn.Read` call.\nEven when the TCP socket doesn\u0027t have data, the application needs to\nhold onto the read buffer. This results in the ALTS conn and the gRPC\nHTTP/2 stack holding on to 32KB read buffers each, even for non-readable\ntransports.\n\n## Solution\nOn Unix platforms, there is a\n[RawConn](https://pkg.go.dev/syscall#RawConn#Read) interface that\nexposes a non-blocking mechanism. The idea is that the Go runtime will\ncall a user-registered callback when the socket is readable. gRPC can\nuse this callback to allocate a buffer from the pool and return it once\nit has passed the plaintext to the HTTP/2 layer. The same RawConn\ninterface is also available in other OSs, but with slightly different\nmethod signatures for the blocking `Read` method. In the future, we can\nadd the same optimization for them and have CI runners to catch\nregressions.\n\nThe main abstraction that allows these non-memory-pinning reads is the\nfollowing interface:\n```go\n// ReadyReader is an optional interface that can be implemented by net.Conn\n// implementations to enable gRPC to perform non-memory-pinning reads.\ntype ReadyReader interface {\n\t// ReadOnReady waits for data to arrive, fetches a buffer, and performs a\n\t// read. It returns a pointer to the buffer so you can return it to the pool\n\t// later.\n\tReadOnReady(bufSize int, pool mem.BufferPool) (*[]byte, int, error)\n}\n```\nIn this PR, an implementation is provided that wraps a `RawConn`. This\nallows the ALTS conn to perform efficient reads.\n\nIn a future PR, the following changes will enable getting rid of the\nbufio.Reader in the HTTP/2 layer:\n1. `ReadyReader` will be implemented by the ALTS conn.\n2. gRPC will implement its own buffered reader that releases the buffer\nwhen it\u0027s empty.\n3. The buffered reader will call `ReadOnReady()` instead of `Read()` on\nthe underlying conn, if supported, to delay the re-allocation of the\nbuffer.\n\n\n## Benchmarks\n\nThe following micro-benchmarks show no regression in QPS (LargeMessage\ntest) and a significant reduction in memory usage while performing reads\n(ReadMemoryUsage). There is an increase in 2 allocs in conn construction\ndue to the use of pointer fields for the `ReadyReader` and read buffer\nhandle, but these happen only when creating a subchannel, not per-RPC.\nThere is an increase in sec/op for the `WriteMemoryUsage` test, but\nthese tests are not meant to measure conn construction time, only the\nmemory effeciency.\n\n```\ngoos: linux\ngoarch: amd64\npkg: google.golang.org/grpc/credentials/alts/internal/conn\ncpu: Intel(R) Xeon(R) CPU @ 2.60GHz\n                    │   old.txt   │               new.txt               │\n                    │   sec/op    │   sec/op     vs base                │\nLargeMessage-48       77.54m ± 2%   76.51m ± 1%        ~ (p\u003d0.202 n\u003d15)\nWriteMemoryUsage-48   6.816µ ± 1%   7.519µ ± 1%  +10.31% (p\u003d0.000 n\u003d15)\nReadMemoryUsage-48    9.754µ ± 1%   7.021µ ± 1%  -28.02% (p\u003d0.000 n\u003d15)\ngeomean               172.7µ        159.3µ        -7.81%\n\n                    │   old.txt    │               new.txt                │\n                    │     B/op     │     B/op      vs base                │\nLargeMessage-48       4.578Mi ± 0%   4.579Mi ± 7%        ~ (p\u003d0.373 n\u003d15)\nWriteMemoryUsage-48   41.60Ki ± 0%   41.77Ki ± 0%   +0.39% (p\u003d0.000 n\u003d15)\nReadMemoryUsage-48    83.06Ki ± 0%   43.25Ki ± 0%  -47.94% (p\u003d0.000 n\u003d15)\ngeomean               253.0Ki        203.8Ki       -19.44%\n\n                    │  old.txt   │               new.txt                │\n                    │ allocs/op  │ allocs/op   vs base                  │\nLargeMessage-48       2.000 ± 0%   2.000 ± 0%        ~ (p\u003d1.000 n\u003d15) ¹\nWriteMemoryUsage-48   5.000 ± 0%   7.000 ± 0%  +40.00% (p\u003d0.000 n\u003d15)\nReadMemoryUsage-48    16.00 ± 0%   18.00 ± 0%  +12.50% (p\u003d0.000 n\u003d15)\ngeomean               5.429        6.316       +16.35%\n```\n\nIn a [real-world\nbenchmark](https://github.com/arjan-bal/custom-go-client-benchmark/tree/retry-dp),\nwhere a GCS directpath client downloads a file in a loop, the average\n\"in use\" memory falls from ~35MB to ~20MB.\n\nRELEASE NOTES:\n* alts: pool read buffers to lower memory utilization when sockets are\nunreadable."
    },
    {
      "commit": "34da8d039c53f186d2537cadb93179bd9f98720e",
      "tree": "a6c87b3e1fdc0dfa0a40083dfd731638bcab9fee",
      "parents": [
        "2de5b1c09879a51b545069a29cd4611702f533ae"
      ],
      "author": {
        "name": "Madhav Bissa",
        "email": "48023579+mbissa@users.noreply.github.com",
        "time": "Tue Mar 31 17:56:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 17:56:54 2026"
      },
      "message": "transport: Add values to the grpc.disconnect_error label for grpc.subchannel.disconnections metric (A94) (#8973)\n\nThis PR implements granular grpc.disconnect_error labels for the\ngrpc.subchannel.disconnections metric, as defined in [gRFC\nA94](https://github.com/grpc/proposal/blob/master/A94-subchannel-otel-metrics.md).\n\nRELEASE NOTES:\n* transport: Add disconnection reason to the grpc.disconnect_error label\nfor grpc.subchannel.disconnections metric as defined in [gRFC\nA94](https://github.com/grpc/proposal/blob/master/A94-subchannel-otel-metrics.md)."
    },
    {
      "commit": "2de5b1c09879a51b545069a29cd4611702f533ae",
      "tree": "73a96d78b614d4d847ad5c0edc83f081713a93db",
      "parents": [
        "0fe467a5077b10189c3c82e0168113e7b11c6b5d"
      ],
      "author": {
        "name": "Yuki Ito",
        "email": "mrno110y@gmail.com",
        "time": "Mon Mar 30 13:21:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 13:21:37 2026"
      },
      "message": "grpclb: replace testServer with StubServer in grpclb_test.go (#8979)\n\n- grpclb: replace testServer with StubServer in grpclb_test.go\n    - https://github.com/grpc/grpc-go/issues/7291\n\nRELEASE NOTES: none"
    },
    {
      "commit": "0fe467a5077b10189c3c82e0168113e7b11c6b5d",
      "tree": "fe5da6b9083afb603ec7ae0cf61b32602b1c65c9",
      "parents": [
        "8de729c03f732f5d27528cf07632ed5b0b805b88"
      ],
      "author": {
        "name": "Yuki Ito",
        "email": "mrno110y@gmail.com",
        "time": "Mon Mar 30 13:20:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 13:20:04 2026"
      },
      "message": "binarylog: replace testServer with StubServer in binarylog_end2end_test.go (#8978)\n\n- binarylog: replace testServer with StubServer in\nbinarylog_end2end_test.go\n    - https://github.com/grpc/grpc-go/issues/7291\n\nRELEASE NOTES: none"
    },
    {
      "commit": "8de729c03f732f5d27528cf07632ed5b0b805b88",
      "tree": "2bdbb79b1189e7f0c4553411c2beeb7c054446ac",
      "parents": [
        "b71c26202050d6a6c528e42f96a2712baa74eb61"
      ],
      "author": {
        "name": "Chengxi Luo",
        "email": "chengxi.luo2004@gmail.com",
        "time": "Mon Mar 30 06:39:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 06:39:35 2026"
      },
      "message": "xds: fix typo in `xdsresource.Metadata` (#9026)\n\nThis PR fixes a minor typo in `xdsresource.Metadata`\n\nFixed `metdataRegistry ` → `metadataRegistry `\n\nRELEASE NOTES: none"
    },
    {
      "commit": "b71c26202050d6a6c528e42f96a2712baa74eb61",
      "tree": "3ece8ba2ef8df5df24943db8ad31f159ad1b587d",
      "parents": [
        "f1d1ce56feebe21c14d4d692ebf202b395872582"
      ],
      "author": {
        "name": "Madhav Bissa",
        "email": "48023579+mbissa@users.noreply.github.com",
        "time": "Fri Mar 27 09:31:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 09:31:01 2026"
      },
      "message": "grpc/stats: Add support for custom labels in per call metrics (A108) (#9008)\n\nRelated Issues/gRFC :\n[A108](https://github.com/grpc/proposal/blob/master/A108-otel-custom-per-call-label.md).\nIt introduces a mechanism for application authors to inject a custom,\nrequest-scoped string label (grpc.client.call.custom) into their RPCs\nvia context.Context, which is then extracted and propagated directly to\nclient-side per-call metrics.\n\nAdded `grpc.NewContextWithCustomLabel(ctx, label)` and\n`grpc.CustomLabelFromContext(ctx)` to provide a type-safe, canonical way\nfor clients to attach the label to metrics associated with their\noutgoing RPCs.\n\nRELEASE NOTES:\n* grpc/stats : Add an API (`grpc.NewContextWithCustomLabel(ctx, label)`\nand `grpc.CustomLabelFromContext(ctx)`) to allow clients to attach\n`grpc.client.call.custom` label with specified value to per-call metrics\nas part of implementing\n[A108](https://github.com/grpc/proposal/blob/master/A108-otel-custom-per-call-label.md)."
    },
    {
      "commit": "f1d1ce56feebe21c14d4d692ebf202b395872582",
      "tree": "6ba92dce442de357aaa02c818395c07ab9685259",
      "parents": [
        "c20fba0fa91403ad530afff515c6e389f8674643"
      ],
      "author": {
        "name": "Madhav Bissa",
        "email": "48023579+mbissa@users.noreply.github.com",
        "time": "Thu Mar 26 23:32:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 23:32:38 2026"
      },
      "message": "xds/rbac: add additional handling for addresses with ports (#8990)\n\nThis PR enhances the rbac matcher to handle IP address string with a\nport attached.\n\nThe fix introduces the `net.SplitHostPort` utility function, ensuring\nthe port is properly stripped out of the underlying\n`peerInfo.Addr.String()` and `localAddr.String()` values before parsing\nthem with `netip.ParseAddr`. A fallback mechanism is also included in\ncase `SplitHostPort` fails due to a missing port.\n\nRELEASE NOTES:\n* xds/rbac: Add additional handling for addresses with ports"
    },
    {
      "commit": "c20fba0fa91403ad530afff515c6e389f8674643",
      "tree": "7a627b3b3aa3c12ef311416897ef2a5e892277e9",
      "parents": [
        "6477252c28b2222e6f0e6d2b7c01fa0b7b7eb3e5"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Wed Mar 25 10:45:28 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 10:45:28 2026"
      },
      "message": "xds: Exported `buildXDSClientConfig` to use in external packages and update `xds_fake_transport.go`. (#9014)\n\nThis PR contains changes required for the xDS client resource parsing\nfuzzer. These changes facilitate the initialization of the xDS client in\nthe fuzzer and resolve potential deadlocks during stream operations in\nthe fake transport.\n## Changes\n`internal/xds/xdsclient`\n- **Export `BuildXDSClientConfig`**: Exported `buildXDSClientConfig` to\nallow external packages (like the fuzzer) to construct\n`xdsclient.Config` from a bootstrap config.\n\n`internal/xds/clients/internal/testutils/faketransport`\n- **Add Timeout to `Send`**: Added a 10ms timeout to `Send` in\n`xds_fake_transport.go`. This prevents the client from deadlocking when\nsending messages if the fuzzer\u0027s server handle is not actively consuming\nthem.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "6477252c28b2222e6f0e6d2b7c01fa0b7b7eb3e5",
      "tree": "c93511e9dbcca4fe218d1b644043fdf0bf9bbe9b",
      "parents": [
        "2eade05a0cf274fb082fd7f7a01b31a52d623142"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Wed Mar 25 10:33:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 10:33:47 2026"
      },
      "message": "test: Fix flaky test `TestServerStreaming_ClientCallSendMsgTwice` in `end2end_test.go`. (#9004)\n\nFixes: #8993 \n\nThis PR will fix the flaky test\n`TestServerStreaming_ClientCallSendMsgTwice` introduced in PR #8385 .\n\nThe test expected a single call to `stream.SendMsg()` to return a\n`codes.Canceled` error immediately after the stream\u0027s context was marked\nas done.\n\nSolution: Introduced a retry loop with a timeout for the\n`stream.SendMsg()` call. Instead of testing a single invocation, the\nserver handler now continuously attempts to send a message until it\neither receives an error or timeout expired.\n\nSuccessfully run the test on forge for 1 million times without any\nflake.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "2eade05a0cf274fb082fd7f7a01b31a52d623142",
      "tree": "a084a36221c16559dc72a50fc0ac494d710612b1",
      "parents": [
        "89af32f67b9b0c0152b293fd1181f9fe73928a7f"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Wed Mar 25 10:12:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 10:12:36 2026"
      },
      "message": "Fix flaky test `TestAggregatedClusterSuccess_SwitchBetweenLeafAndAggregate` in aggregate_cluster_test.go. (#9009)\n\nFixes #8989 \n\nThis PR addresses the flakiness observed in the\n`TestAggregatedClusterSuccess_SwitchBetweenLeafAndAggregate ` test. Test\nwas using real DNS resolution which introduced non-deterministic delays\nand race conditions during testing.\n\n### Changes:\n* **Mocked DNS Resolver**: Introduced a `setupDNS` helper function in\n`cdsbalancer_test.go` that unregisters the default DNS resolver and\nregisters a manual resolver for the `dns` scheme. This allows us to\nintercept DNS targets and provide mock addresses immediately.\n\n* **Updated Tests**: Updated the following tests in\n`aggregate_cluster_test.go` to use the fake DNS resolver:\n    *   `TestAggregatedClusterSuccess_SwitchBetweenLeafAndAggregate`\n    *   `TestAggregateClusterSuccess_ThenUpdateChildClusters`\n    *   `TestAggregateClusterSuccess_ThenChangeRootToEDS`\n \n* **Adjusted Test Timeout**: Increased the `defaultTestTimeout` in\n`cdsbalancer_test.go` from `5s` to `10s` to align with the standard test\ntimeout practices used across the `grpc-go` codebase.\n\n### Testing/Validation:\n* Successfully reproduced the flakiness locally by manually injecting a\nsleep delay to simulate a slow real DNS resolution update in\n`TestAggregatedClusterSuccess_SwitchBetweenLeafAndAggregate`.\n* Validated that applying the mock DNS resolver completely resolves the\nflakiness.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "89af32f67b9b0c0152b293fd1181f9fe73928a7f",
      "tree": "f1d9609392094920104e2f45b47516f5c4042572",
      "parents": [
        "45a3304f6c1bfa250e50f97530e584e5af83da68"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Wed Mar 25 07:45:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 07:45:03 2026"
      },
      "message": "xds: Add SNI related field in handshake info (#8965)\n\nThis PR is part of [A101\n](https://github.com/grpc/proposal/blob/master/A101-SNI-setting-and-SNI-SAN-validation.md)\nimplementation.\n\nThis PR does the following changes: \n1. Add `sni` and `autoSniSanValidation` field to handshake info.\n2. Change the TLS config building to add SNI if env variable is true\n(currently false by default so will not be set), and `sni` is present\n(currently set as empty in handshake so will not be set).\n3. Change verify function to match SANs against SNI if set and env\nvariable and `autoSniSanValidation` is true (currently set to false by\ndefault).\n4. Set `sni` to empty and `autoSniSanValidation` to false by default\nwhen creating handshake info in `clusterimpl`\n5. Adds tests to verify the happy and failure cases of handshake.\n\nIn the next PR :\n1. Will decide between hostname and SNI from CDS update in `clusterimpl`\nbalancer.\n2. Add end to end tests to verify the SNI flow.\n\nRELEASE NOTES: None"
    },
    {
      "commit": "45a3304f6c1bfa250e50f97530e584e5af83da68",
      "tree": "41b550aa595835e975a76d31f43efee4e92225fb",
      "parents": [
        "52bf4d9ecf923c7fdecd8c3985966e96353fa721"
      ],
      "author": {
        "name": "Yuki Ito",
        "email": "mrno110y@gmail.com",
        "time": "Wed Mar 25 05:18:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 05:18:26 2026"
      },
      "message": "stats: replace testServer with StubServer in stats_test.go (#8980)"
    },
    {
      "commit": "52bf4d9ecf923c7fdecd8c3985966e96353fa721",
      "tree": "b0625ca51e31f35ff7edd1c05f6047a305d27e05",
      "parents": [
        "4b786ffb611adf37aeb65226111b48960342fbd6"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 24 07:24:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 07:24:46 2026"
      },
      "message": "build(deps): bump google.golang.org/grpc from 1.70.0 to 1.79.3 in /cmd/protoc-gen-go-grpc (#8988)\n\nBumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from\n1.70.0 to 1.79.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/releases\"\u003egoogle.golang.org/grpc\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 1.79.3\u003c/h2\u003e\n\u003ch1\u003eSecurity\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eserver: fix an authorization bypass where malformed :path headers\n(missing the leading slash) could bypass path-based restricted\n\u0026quot;deny\u0026quot; rules in interceptors like \u003ccode\u003egrpc/authz\u003c/code\u003e. Any\nrequest with a non-canonical path is now immediately rejected with an\n\u003ccode\u003eUnimplemented\u003c/code\u003e error. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8981\"\u003e#8981\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 1.79.2\u003c/h2\u003e\n\u003ch1\u003eBug Fixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003estats: Prevent redundant error logging in health/ORCA producers by\nskipping stats/tracing processing when no stats handler is configured.\n(\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/pull/8874\"\u003egrpc/grpc-go#8874\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 1.79.1\u003c/h2\u003e\n\u003ch1\u003eBug Fixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003egrpc: Remove the \u003ccode\u003e-dev\u003c/code\u003e suffix from the User-Agent\nheader. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/pull/8902\"\u003egrpc/grpc-go#8902\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 1.79.0\u003c/h2\u003e\n\u003ch1\u003eAPI Changes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003emem: Add experimental API \u003ccode\u003eSetDefaultBufferPool\u003c/code\u003e to\nchange the default buffer pool. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8806\"\u003e#8806\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/vanja-p\"\u003e\u003ccode\u003e@​vanja-p\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eexperimental/stats: Update \u003ccode\u003eMetricsRecorder\u003c/code\u003e to require\nembedding the new \u003ccode\u003eUnimplementedMetricsRecorder\u003c/code\u003e (a no-op\nstruct) in all implementations for forward compatibility. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8780\"\u003e#8780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eBehavior Changes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ebalancer/weightedtarget: Remove handling of \u003ccode\u003eAddresses\u003c/code\u003e\nand only handle \u003ccode\u003eEndpoints\u003c/code\u003e in resolver updates. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8841\"\u003e#8841\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eNew Features\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eexperimental/stats: Add support for asynchronous gauge metrics\nthrough the new \u003ccode\u003eAsyncMetricReporter\u003c/code\u003e and\n\u003ccode\u003eRegisterAsyncReporter\u003c/code\u003e APIs. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8780\"\u003e#8780\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003epickfirst: Add support for weighted random shuffling of endpoints,\nas described in \u003ca\nhref\u003d\"https://redirect.github.com/grpc/proposal/pull/535\"\u003egRFC A113\u003c/a\u003e.\n\u003cul\u003e\n\u003cli\u003eThis is enabled by default, and can be turned off using the\nenvironment variable\n\u003ccode\u003eGRPC_EXPERIMENTAL_PF_WEIGHTED_SHUFFLING\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8864\"\u003e#8864\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003exds: Implement \u003ccode\u003e:authority\u003c/code\u003e rewriting, as specified in \u003ca\nhref\u003d\"https://github.com/grpc/proposal/blob/master/A81-xds-authority-rewriting.md\"\u003egRFC\nA81\u003c/a\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8779\"\u003e#8779\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ebalancer/randomsubsetting: Implement the\n\u003ccode\u003erandom_subsetting\u003c/code\u003e LB policy, as specified in \u003ca\nhref\u003d\"https://github.com/grpc/proposal/blob/master/A68-random-subsetting.md\"\u003egRFC\nA68\u003c/a\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8650\"\u003e#8650\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/marek-szews\"\u003e\u003ccode\u003e@​marek-szews\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eBug Fixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ecredentials/tls: Fix a bug where the port was not stripped from the\nauthority override before validation. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8726\"\u003e#8726\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/Atul1710\"\u003e\u003ccode\u003e@​Atul1710\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003exds/priority: Fix a bug causing delayed failover to lower-priority\nclusters when a higher-priority cluster is stuck in\n\u003ccode\u003eCONNECTING\u003c/code\u003e state. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8813\"\u003e#8813\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ehealth: Fix a bug where health checks failed for clients using\nlegacy compression options (\u003ccode\u003eWithDecompressor\u003c/code\u003e or\n\u003ccode\u003eRPCDecompressor\u003c/code\u003e). (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8765\"\u003e#8765\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/sanki92\"\u003e\u003ccode\u003e@​sanki92\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003etransport: Fix an issue where the HTTP/2 server could skip header\nsize checks when terminating a stream early. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8769\"\u003e#8769\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/joybestourous\"\u003e\u003ccode\u003e@​joybestourous\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eserver: Propagate status detail headers, if available, when\nterminating a stream during request header processing. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8754\"\u003e#8754\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/joybestourous\"\u003e\u003ccode\u003e@​joybestourous\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ePerformance Improvements\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ecredentials/alts: Optimize read buffer alignment to reduce copies.\n(\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8791\"\u003e#8791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emem: Optimize pooling and creation of \u003ccode\u003ebuffer\u003c/code\u003e objects.\n(\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8784\"\u003e#8784\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etransport: Reduce slice re-allocations by reserving slice capacity.\n(\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8797\"\u003e#8797\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/dda86dbd9cecb8b35b58c73d507d81d67761205f\"\u003e\u003ccode\u003edda86db\u003c/code\u003e\u003c/a\u003e\nChange version to 1.79.3 (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8983\"\u003e#8983\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/72186f163e75a065c39e6f7df9b6dea07fbdeff5\"\u003e\u003ccode\u003e72186f1\u003c/code\u003e\u003c/a\u003e\ngrpc: enforce strict path checking for incoming requests on the server\n(\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8981\"\u003e#8981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/97ca3522b239edf6813e2b1106924e9d55e89d43\"\u003e\u003ccode\u003e97ca352\u003c/code\u003e\u003c/a\u003e\nChanging version to 1.79.3-dev (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8954\"\u003e#8954\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/8902ab6efea590f5b3861126559eaa26fa9783b2\"\u003e\u003ccode\u003e8902ab6\u003c/code\u003e\u003c/a\u003e\nChange the version to release 1.79.2 (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8947\"\u003e#8947\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/a9286705aa689bee321ec674323b6896284f3e02\"\u003e\u003ccode\u003ea928670\u003c/code\u003e\u003c/a\u003e\nCherry-pick \u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8874\"\u003e#8874\u003c/a\u003e to\nv1.79.x (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8904\"\u003e#8904\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/06df3638c0bcee88197b1033b3ba83e1eb8bc010\"\u003e\u003ccode\u003e06df363\u003c/code\u003e\u003c/a\u003e\nChange version to 1.79.2-dev (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8903\"\u003e#8903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/782f2de44f597af18a120527e7682a6670d84289\"\u003e\u003ccode\u003e782f2de\u003c/code\u003e\u003c/a\u003e\nChange version to 1.79.1 (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8902\"\u003e#8902\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/850eccbb2257bd2de6ac28ee88a7172ab6175629\"\u003e\u003ccode\u003e850eccb\u003c/code\u003e\u003c/a\u003e\nChange version to 1.79.1-dev (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8851\"\u003e#8851\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/765ff056b6890f6c8341894df4e9668e9bfc18ef\"\u003e\u003ccode\u003e765ff05\u003c/code\u003e\u003c/a\u003e\nChange version to 1.79.0 (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8850\"\u003e#8850\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/68804be0e78ed0365bb5a576dedc12e2168ed63e\"\u003e\u003ccode\u003e68804be\u003c/code\u003e\u003c/a\u003e\nCherry pick \u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8864\"\u003e#8864\u003c/a\u003e to\nv1.79.x (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/8896\"\u003e#8896\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/compare/v1.70.0...v1.79.3\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dgoogle.golang.org/grpc\u0026package-manager\u003dgo_modules\u0026previous-version\u003d1.70.0\u0026new-version\u003d1.79.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the\n[Security Alerts page](https://github.com/grpc/grpc-go/network/alerts).\n\n\u003c/details\u003e\n\nRELEASE NOTES: N/A\n\n---------\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Arjan Bal \u003carjansbal@google.com\u003e"
    },
    {
      "commit": "4b786ffb611adf37aeb65226111b48960342fbd6",
      "tree": "0426dd9c2460728a4fd78b0b36129f3ffe02b4b0",
      "parents": [
        "ccc8d7bda3a1e8e82dcacfdf277819fa81ca7dc1"
      ],
      "author": {
        "name": "Chengxi Luo",
        "email": "chengxi.luo2004@gmail.com",
        "time": "Tue Mar 24 03:45:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 03:45:09 2026"
      },
      "message": "xds: replace net with netip in `xds/xdsclient` and `xds/server` (#8909)\n\nUpdates https://github.com/grpc/grpc-go/issues/8884\n\nThis PR replace `net.IP` and `net.IPNet` with `netip.Addr` and\n`netip.Prefix` in directories `internal/xds/xdsclient` and\n`internal/xds/server`\n\nRELEASE NOTES: \n- TBD"
    },
    {
      "commit": "ccc8d7bda3a1e8e82dcacfdf277819fa81ca7dc1",
      "tree": "1ce6785450a5d5c1f0f756cdc48ea29ee5ebeb14",
      "parents": [
        "99d6291eac05dd4e2e32d815fb6701104054bf47"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Mon Mar 23 22:17:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 22:17:55 2026"
      },
      "message": "priority: implement changes to child policy caching specified in A115 (#8997)\n\nSummary of changes:\n- Add a new API to the `balancergroup` that allows removal of child\npolicies with immediate effect, even when a cache is configured.\n- Make the `priority` LB use this new API when removing child policies\nthat have been removed from its configuration.\n- This change is protected with an environment variable that turns on\nthe new behavior by default.\n- Update the name generation algorithm to give higher preference to\nreuse names of existing priority (if there is a locality match) over\nlower priorities.\n- Fix a bunch of tests in the `priority` LB policy to ensure that they\nwork with the *old* and *new* behavior.\n- Fix a couple of aggregate cluster tests such that they don\u0027t\ncontinuously handle the same NACKed resource from the management server.\n- Other minor cleanups in tests that I had to look at as part of making\nthis change.\n\nRELEASE NOTES:\n* xds/priority: Stop caching child LB policies removed from the\nconfiguration. This will help reduce memory and cpu usage when\nlocalities are constantly switching between priorities."
    },
    {
      "commit": "99d6291eac05dd4e2e32d815fb6701104054bf47",
      "tree": "0a1625a5bc6c6a8d70850d20bd6f1f5351b8cc1a",
      "parents": [
        "12e91ddb6df6150efa1dd13affc7e6cae7d12ff5"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Mon Mar 23 21:51:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 21:51:36 2026"
      },
      "message": "test/xds: wait for server to enter SERVING mode before sending the first RPC (#9003)\n\nFixes #9002 \n\nxDS-enabled gRPC servers start accepting connections on the\n`net.Listener` passed to them, but will close the accepted connections\nimmediately as long as it hasn\u0027t yet received good configuration from\nthe management server. This could be the failure the client is seeing in\nthe failing log:\n```\nxds_server_filter_state_retention_test.go:468: EmptyCall() failed: rpc error: code \u003d Unavailable desc \u003d write tcp 127.0.0.1:38168-\u003e127.0.0.1:37463: write: broken pipe\n```\n\nThis PR fixes the flaky test by waiting for the server to enter\n`SERVING` mode before sending the first RPC.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "12e91ddb6df6150efa1dd13affc7e6cae7d12ff5",
      "tree": "8983d5b5d4e3e016a179654cd216c379c922fef0",
      "parents": [
        "58bbf8ab36838ce1454da092ac0dad350b0162ea"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Wed Mar 18 07:46:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 07:46:45 2026"
      },
      "message": "xds: add support for HTTP filter state retention, as specified in A83 (#8924)\n\n#### How the API looked before this change?\n- We had a single interface, `Filter`, that was responsible for\nfunctionality like config parsing and optionally for building client and\nserver interceptors (or filter instances).\n- We had a registry of `Filter`s keyed by the supported type_urls.\n\n#### How the API looks after this change?\n- We will have an interface, `Builder`, that contains functionality for\nconfig parsing and other things like \"what are the supported\ntype_urls?\", \"Are filters produced by this builder supposed to be\nterminal?\",\n- Two optional interfaces that the `Builder` can implement that provide\nthe functionality to create filter instances for the client and server,\n`ClientFilterBuilder` and `ServerFilterBuilder` respectively.\n- The `ClientFilterBuilder` and `ServerFilterBuilder` create\n`ClientFilter` and `ServerFilter` respectively.\n- The `ClientFilter` and `ServerFilter` interface contains functionality\nto build client and server interceptors.\n- The methods to create filter instances and interceptors will return\ncleanup functions that callers need to invoke when the\nfilter/interceptor is no longer required.\n- We will have a registry of `Builders`s keyed by the supported\ntype_urls.\n\n#### Why is this change required?\n- As part of gRFC A83 and moving forward on a bunch of other gRFCs, we\nwill start having HTTP filters that need to maintain a bunch of state,\nand this state needs to be retained across resource updates. For\nexample, the filter might contain a gRPC channel to an external service,\nand we don\u0027t want to recreate this channel for resource updates that\ndoesn\u0027t change any properties associated with the service that is being\nconnected to.\n\n#### How will this be used?\n- The xDS name resolver and the xDS enabled grpc server (entities that\ncreate HTTP filters on the client and server side) will create new\n`Filter` instances only when the filter names in the xDS resources\nchange. Otherwise, they will only create new interceptors using the\nupdated filter configuration from the existing `Filter`. This will allow\n`Filter` instances to share state across interceptors and across state\nupdates.\n\nThe changes here and inspired by similar changes made for Java and\ndescribed here:\nhttps://github.com/grpc/proposal/blob/master/A83-xds-gcp-authn-filter.md#java\n\nRELEASE NOTES: None"
    },
    {
      "commit": "58bbf8ab36838ce1454da092ac0dad350b0162ea",
      "tree": "ff909fedbc8341f52edfc520f412a457f9828ab8",
      "parents": [
        "d0d7cab71e4c3e1fef69dcfafe23af86e9b31b50"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Tue Mar 17 23:35:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 23:35:32 2026"
      },
      "message": "grpc: enforce strict path checking for incoming requests on the server (#8985)\n\nRELEASE NOTES:\n* server: fix an authorization bypass where malformed :path headers\n(missing the leading slash) could bypass path-based restricted \"deny\"\nrules in interceptors like `grpc/authz`. Any request with a\nnon-canonical path is now immediately rejected with an `Unimplemented`\nerror."
    },
    {
      "commit": "d0d7cab71e4c3e1fef69dcfafe23af86e9b31b50",
      "tree": "084e06c10fb15244dc8b9e5611a2bff77df01927",
      "parents": [
        "36e13de71321618d881f7334e4150ea48d5a82d2"
      ],
      "author": {
        "name": "Doug Fawley",
        "email": "dfawley@google.com",
        "time": "Tue Mar 17 23:26:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 23:26:53 2026"
      },
      "message": "github: set testing CI names to be stable (#8982)\n\nThis will make it so we don\u0027t have to pick the new tests every time we\nupgrade the Go version.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "36e13de71321618d881f7334e4150ea48d5a82d2",
      "tree": "b7ecf2d6ec9ea0cfc5f80139be91ecaa1a38580e",
      "parents": [
        "7f7834272ff54776c9bbed4325c664c6ed91c5d7"
      ],
      "author": {
        "name": "Varun Chawla",
        "email": "34209028+veeceey@users.noreply.github.com",
        "time": "Tue Mar 17 09:00:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 09:00:13 2026"
      },
      "message": "grpclb: replace net.IP with netip.Addr (#8918)\n\nContributes to #8884\n\nThis PR replaces deprecated `net.IP` usage with the modern `netip.Addr`\nAPI in two packages:\n\n- **grpclb**: Replace `net.IP(s.IpAddress).String()` with\n`netip.AddrFromSlice()` in `processServerList`, adding proper error\nhandling for invalid IP addresses instead of silently producing `\"?\"`\nfrom `net.IP.String()`.\n\nNote: `x509.Certificate.IPAddresses` fields in test files\n(`internal/credentials/xds/handshake_info_test.go`,\n`security/advancedtls/crl_test.go`) are typed as `[]net.IP` by the\nstandard library, so those cannot be migrated. The xds/server and\nxds/xdsclient packages are being addressed in #8909.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "7f7834272ff54776c9bbed4325c664c6ed91c5d7",
      "tree": "7e1460fb347379915ab60a15c73c074c223dbb97",
      "parents": [
        "e5563c6541622af1a92aa35f397e86fbdbe3cda7"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Tue Mar 17 08:32:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 08:32:18 2026"
      },
      "message": "xdsclient: fix panic on empty resource in ADS response (#8970)\n\nThis PR fixes an intermittent panic in xdsclient `decodeResponse` that\noccurs when processing an xDS ADS response containing an empty resource\nname, while doing fuzz testing.\n\nRELEASE NOTES: \n* xds: Fix a panic in the xDS client that can occur when processing an\nADS response containing an empty resource name."
    },
    {
      "commit": "e5563c6541622af1a92aa35f397e86fbdbe3cda7",
      "tree": "7a8febf61d6f5919a75b158b2ea9c633ecfd1776",
      "parents": [
        "7daee260de26ffc8b0e7d9e436767931fc71935b"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Mon Mar 16 16:38:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 16 16:38:26 2026"
      },
      "message": "change directory name `fakeTransport` to `faketransport`. (#8976)\n\nThis PR changes the name of a newly added directory `fakeTransport` in\nlowercase.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "7daee260de26ffc8b0e7d9e436767931fc71935b",
      "tree": "2682a768f3400e5105da3e93c2eff30292074baa",
      "parents": [
        "f967422acc6d9649b480d76c1b66e7b5028989e0"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Mon Mar 16 08:09:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 16 08:09:40 2026"
      },
      "message": "grpc: introduce ErrRetriesExhausted to wrap retry failures (#8894)\n\nFixes: https://github.com/grpc/grpc-go/issues/7023\n\nThis change wraps RPC errors when the maximum retry limit is reached.\n\nRELEASE NOTES:\n* grpc: Introduce `ErrRetriesExhausted` to wrap RPC failures after\nmaximum retries are reached."
    },
    {
      "commit": "f967422acc6d9649b480d76c1b66e7b5028989e0",
      "tree": "31300508585215f6e070296023eb8df3df79b456",
      "parents": [
        "99f36d4a0c28bc967a8d3fe23ebc2a264b322070"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Sun Mar 15 01:14:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 15 01:14:41 2026"
      },
      "message": "transport: make the client send a RST_STREAM when it receives an END_STREAM from the server (#8832)\n\nFixes https://github.com/grpc/grpc-go/issues/835\n\nThis PR fixes the behavior of the client to send a RST_STREAM when it\nreceives an END_STREAM from the server when the client-side of the\nstream is still open. It also adds tests for both the client and server\nside behaviors of sending RST_STREAM when they receive an END_STREAM\nfrom their peer.\n\nRELEASE NOTES:\n- transport: fix a bug in the client where it was failing to send a\nRST_STREAM upon receiving an END_STREAM from the server when the stream\nwas still open"
    },
    {
      "commit": "99f36d4a0c28bc967a8d3fe23ebc2a264b322070",
      "tree": "85a1c466785682802703c455b9303fdff14ddb94",
      "parents": [
        "98573cbe232b5a6c2669f238b68d640c5f87f658"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Fri Mar 13 10:11:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 13 10:11:32 2026"
      },
      "message": "xds/testutils: add fakeTransport for testing. (#8890)\n\nThis PR introduces `fakeTransport`, a deterministic transport layer\ndesigned to facilitate fuzz testing of the xDS client in `grpc-go`.\n\n### Purpose\nThe `fakeTransport` decouples the xDS client from the actual network,\nallowing tests to simulate management server interactions without\nestablishing real connections. This is a critical component for the\nupcoming google3-based xdsClient fuzzer, which requires a way to inject\nspecific responses directly into the client.\n\n### Design\nThis component implements the `clients.TransportBuilder`,\n`clients.Transport` and `clients.Stream` interfaces.\n\n* When the `xdsClient` attempts to create a stream, the `Builder`\nintercepts these calls. Instead of establishing a real connection, it\nreturns a local `FakeTransport` object.\n* The `FakeStream` replaces the network socket. It exposes standard\nmethods (`Recv`, `Send`) for the xdsClient, and control hooks\n(`InjectResponse`, `ReadRequest`). Allows the fuzzer to drive the\nxdsclient\u0027s resource parsing by pushing `DiscoveryResponse` protos and\ninspecting `DiscoveryRequest` messages via buffered channels.\n\n### Future Scope\nWhile primarily added for fuzzing, this utility is placed in\n`internal/testutils` to allow that it can be used by standard unit and\ne2e tests in the future.\nReference:\n[go/grpc-go-xdsclient-fuzzing](http://goto.google.com/grpc-go-xdsclient-fuzzing)\n\nPart of : #8749 \n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "98573cbe232b5a6c2669f238b68d640c5f87f658",
      "tree": "bcdce34bdcde909c59cbd0b79ab3c72cf3a3e288",
      "parents": [
        "fd539615a762f795c2c316e7f75f32eac31a578a"
      ],
      "author": {
        "name": "Madhav Bissa",
        "email": "48023579+mbissa@users.noreply.github.com",
        "time": "Wed Mar 11 17:33:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 11 17:33:31 2026"
      },
      "message": "rls: update rls cache metrics to use async gauge framework (#8808)\n\nThis PR changes the way rls cache metrics (\"grpc.lb.rls.cache_entries\" \u0026\n\"grpc.lb.rls.cache_size\") to use async gauge framework instead of\nsynchronoush capturing.\nThis also does cleanup to remove the NoopMetricsRecorder struct along\nwith addressing some old nits.\n\nRELEASE NOTES:\n* rls: Change rls cache metrics (\"grpc.lb.rls.cache_entries\" \u0026\n\"grpc.lb.rls.cache_size\") to be recorded asynchronously (i.e the metric\nwill be recorded once per collection cycle, rather than every time its\nvalue changes) going forward.\n\n---------\n\nSigned-off-by: Tom Wieczorek \u003ctwieczorek@mirantis.com\u003e\nSigned-off-by: iamrajiv \u003crajivperfect007@gmail.com\u003e\nCo-authored-by: eshitachandwani \u003c59800922+eshitachandwani@users.noreply.github.com\u003e\nCo-authored-by: Arjan Singh Bal \u003c46515553+arjan-bal@users.noreply.github.com\u003e\nCo-authored-by: Tom Wieczorek \u003ctwz123@users.noreply.github.com\u003e\nCo-authored-by: Easwar Swaminathan \u003ceaswars@google.com\u003e\nCo-authored-by: Sankalp Tripathi \u003csankalpt92@gmail.com\u003e\nCo-authored-by: Joy Bestourous \u003c32601978+joybestourous@users.noreply.github.com\u003e\nCo-authored-by: Pranjali-2501 \u003c87357388+Pranjali-2501@users.noreply.github.com\u003e\nCo-authored-by: Vanja Pejovic \u003cvvaffle@gmail.com\u003e\nCo-authored-by: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Yuki Ito \u003cmrno110y@gmail.com\u003e\nCo-authored-by: yy \u003cyhymmt37@gmail.com\u003e\nCo-authored-by: Evan Jones \u003cevan.jones@datadoghq.com\u003e\nCo-authored-by: Antoine Tollenaere \u003catollena@gmail.com\u003e\nCo-authored-by: Rajiv Singh \u003crajivperfect007@gmail.com\u003e\nCo-authored-by: Mikhail Mazurskiy \u003c126021+ash2k@users.noreply.github.com\u003e\nCo-authored-by: Jille Timmermans \u003cjille@quis.cx\u003e"
    },
    {
      "commit": "fd539615a762f795c2c316e7f75f32eac31a578a",
      "tree": "c9d585c55c0e0d2a636fce3b4ace9693b41442fa",
      "parents": [
        "ad2d82e315bbdbfb08b5f6312a5c11ee8ce6cdcd"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Wed Mar 11 03:50:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 11 03:50:30 2026"
      },
      "message": "xds: leaf clusters provide the handshake info instead of top level cluster (#8956)\n\nFixes: https://github.com/grpc/grpc-go/issues/8599\n\nThis PR is part of gRFC A74.  The changes in this PR are : \n1. Ensures the handshake uses the security configuration defined at the\nleaf cluster level, rather than defaulting to the top-level aggregate\ncluster configuration.\n2. Previously, errors returned by `priority.UpdateClientConnState` to\nupdate the clusterimpl\u0027s state were silently suppressed. This has been\nchanged to ensure these errors are properly propagated, triggering a\nTransient Failure (TF) state when an error is returned.\n3. Added a test case to verify that leaf cluster security configurations\ntake precedence over the top-level aggregate cluster. The test uses a\ntop-level cluster with an invalid SAN matcher (which passes xDS\nvalidation but fails at the handshake level) and a leaf cluster with a\nvalid configuration. Confirmed that RPCs now succeed by correctly\nutilizing the leaf config; verified the test fails on master but passes\nwith this PR.\n\nRELEASE NOTES:\n* xds: Fixed an issue where security config from the top-level aggregate\ncluster were used instead of the leaf cluster for handshake."
    },
    {
      "commit": "ad2d82e315bbdbfb08b5f6312a5c11ee8ce6cdcd",
      "tree": "9bb576c32c58ef154a709cc9ab3bdabfdf43883f",
      "parents": [
        "d0ea4f35e181ee8a8af1e5b47e5ab41786ef8952"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Tue Mar 10 20:09:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 10 20:09:07 2026"
      },
      "message": "xdsresource: add SNI related fields in security config of CDS update for A101 (#8941)\n\nPart of [gRFC\nA101](https://github.com/grpc/proposal/blob/master/A101-SNI-setting-and-SNI-SAN-validation.md).\nThis PR: \n- Adds environment variable for A101 , which is default to false for\nnow, will default to true when all the changes go in\n- Add and set SNI related fields in security config of CDS update from\n`UpstreamTLSContext`\n\nRELEASE NOTES: none"
    },
    {
      "commit": "d0ea4f35e181ee8a8af1e5b47e5ab41786ef8952",
      "tree": "4e3ad4d54212048411a39b14e08d101926cf8e31",
      "parents": [
        "0e2c0ea16ea75c49f5c80bb524d3b9ce073ae5dc"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Tue Mar 10 17:47:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 10 17:47:00 2026"
      },
      "message": "cds: use a grpcsync.Event instead of a channel to communicate resource names being requested (#8960)\n\nFixes https://github.com/grpc/grpc-go/issues/8920\n\nThe fix is very similar to the one that fixed a flake in\nTestAggregateCluster_WithTwoEDSClusters.\n\nRan 100K times without a failure on Forge.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "0e2c0ea16ea75c49f5c80bb524d3b9ce073ae5dc",
      "tree": "9b41d92c60ad2c59edb547c6628f420d7d3b8f40",
      "parents": [
        "81c7924ec9f5f4a01c18b82c9d67691c1cd93bd5"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Tue Mar 10 16:59:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 10 16:59:15 2026"
      },
      "message": "deps: update dependencies for all modules (#8969)"
    },
    {
      "commit": "81c7924ec9f5f4a01c18b82c9d67691c1cd93bd5",
      "tree": "cc0f3e3f508c2c0ccb20e91cb478fc94cd2288e6",
      "parents": [
        "71a4abb619b5d53a4121f9a1b68967b9b35f589a"
      ],
      "author": {
        "name": "ulas",
        "email": "45449532+ulascansenturk@users.noreply.github.com",
        "time": "Mon Mar 09 10:37:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 10:37:22 2026"
      },
      "message": "xds/clusterresolver: improve configbuilder tests by removing globals (#8939)\n\nFixes #8868.\n\n## Summary\n- Remove package-level test globals (`testLocalityIDs`,\n`testResolverEndpoints`, `testEndpoints`, `testLocalitiesP0`,\n`testLocalitiesP1`) and the `init()` function\n- Add well-documented helper functions (`makeLocalityID`,\n`makeEndpoint`, `makeResolverEndpoint`, `makeLocality`) so all test\nstate is local to each test function\n- Add documentation to the existing `testEndpointWithAttrs` helper\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "71a4abb619b5d53a4121f9a1b68967b9b35f589a",
      "tree": "17ad6a2c0703f401c3e103e9bc815adf2a84507b",
      "parents": [
        "1acfea83b6cd71e8c60b37872eb5c6e91017f8e6"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Mon Mar 09 05:46:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 05:46:24 2026"
      },
      "message": "xds: regenrate expired SPIFFE certs (#8963)\n\nThis PR regenerates the expired SPIFFE certs and changes the expiry time\nto 10 years.\nThis PR also corrects the `README.md` which had 1 type and one wrong\nscript name.\n\nRELEASE NOTES: None"
    },
    {
      "commit": "1acfea83b6cd71e8c60b37872eb5c6e91017f8e6",
      "tree": "825b5cf293787e5652836bd06b3bf6fc2478d191",
      "parents": [
        "8360b4c482ed1dd99a0415c99874c513a5f45133"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Mon Mar 09 05:25:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 05:25:03 2026"
      },
      "message": "grpc: Enable shared write buffers by default (#8957)\n\ngRPC is already using pooled buffers extensively. These write buffers\ncan hold more than 20% of the \"in use\" memory when using LB policies\nlike roundrobin, least request etc. The pools help releasing the memory\nwhen a subchannel is inactive.\n\n## Benchmarks\n\nThere is no significant performance difference in the local benchmarks.\n\nBefore\n```\ngo1.24.13/grpc1.80.0-dev\nstreaming-networkMode_Local-bufConn_true-keepalive_false-benchTime_2m0s-trace_false-latency_0s-kbps_0-MTU_0-maxConcurrentC\nalls_120-reqSize_1024B-respSize_1024B-compressor_off-channelz_false-preloader_false-clientReadBufferSize_-1-clientWriteBuf\nferSize_-1-serverReadBufferSize_-1-serverWriteBufferSize_-1-sleepBetweenRPCs_0s-connections_1-recvBufferPool_simple-shared\nWriteBuffer_false:\n50_Latency: 344.0650µs  90_Latency: 478.0550µs  99_Latency: 884.7730µs  Avg_Latency: 354.6700µs Bytes/op: 4964.3704955955A\nllocs/op: 19.35011915747468\nHistogram (unit: µs)\nCount: 40403676  Min:   9.7  Max: 213729.4  Avg: 354.67\n------------------------------------------------------------\n[        9.742000,         9.743000)         1    0.0%    0.0%  \n[        9.743000,         9.750424)         0    0.0%    0.0%  \n[        9.750424,         9.812970)         0    0.0%    0.0%  \n[        9.812970,        10.339881)         3    0.0%    0.0%  \n[       10.339881,        14.778782)      1522    0.0%    0.0%  \n[       14.778782,        52.173796)     39748    0.1%    0.1%  \n[       52.173796,       367.203851)  23974441   59.3%   59.4%  ######\n[      367.203851,      3021.138790)  16383483   40.5%  100.0%  ####\n[     3021.138790,     25378.912455)      3968    0.0%  100.0%  \n[    25378.912455,    213729.439000)       509    0.0%  100.0%  \n[   213729.439000,   1800467.071380)         1    0.0%  100.0%  \nNumber of requests:  40403676   Request throughput:  2.7582242816e+09 bit/s\nNumber of responses: 40403676   Response throughput: 2.7582242816e+09 bit/s\n```\n\nAfter\n```\ngo1.24.13/grpc1.80.0-dev\nstreaming-networkMode_Local-bufConn_true-keepalive_false-benchTime_2m0s-trace_false-latency_0s-kbps_0-MTU_0-maxConcurrentC\nalls_120-reqSize_1024B-respSize_1024B-compressor_off-channelz_false-preloader_false-clientReadBufferSize_-1-clientWriteBuf\nferSize_-1-serverReadBufferSize_-1-serverWriteBufferSize_-1-sleepBetweenRPCs_0s-connections_1-recvBufferPool_simple-shared\nWriteBuffer_true:\n50_Latency: 346.4820µs  90_Latency: 478.2350µs  99_Latency: 695.2270µs  Avg_Latency: 353.1640µs Bytes/op: 4972.45957928533\n5       Allocs/op: 19.64101560175674\nHistogram (unit: µs)\nCount: 40619977  Min:  10.1  Max: 74013.3  Avg: 353.16\n------------------------------------------------------------\n[      10.103000,       10.104000)         1    0.0%    0.0%  \n[      10.104000,       10.110488)         0    0.0%    0.0%  \n[      10.110488,       10.159069)         2    0.0%    0.0%  \n[      10.159069,       10.522840)         5    0.0%    0.0%  \n[      10.522840,       13.246726)       612    0.0%    0.0%  \n[      13.246726,       33.642970)     15498    0.0%    0.0%  \n[      33.642970,      186.368403)   2763883    6.8%    6.8%  #\n[     186.368403,     1329.964187)  37638929   92.7%   99.5%  #########\n[    1329.964187,     9893.117609)    200384    0.5%  100.0%  \n[    9893.117609,    74013.323000)       662    0.0%  100.0%  \n[   74013.323000,   554140.273508)         1    0.0%  100.0%  \nNumber of requests:  40619977   Request throughput:  2.772990429866667e+09 bit/s\nNumber of responses: 40619977   Response throughput: 2.772990429866667e+09 bit/s\n```\n\nRELEASE NOTES:\n* grpc: Enable shared write buffers by default. Use the the\n[WithSharedWriteBuffer](https://pkg.go.dev/google.golang.org/grpc#WithSharedWriteBuffer)\ndial option or the\n[SharedWriteBuffer](https://pkg.go.dev/google.golang.org/grpc#SharedWriteBuffer)\nserver option to disable it."
    },
    {
      "commit": "8360b4c482ed1dd99a0415c99874c513a5f45133",
      "tree": "934be2293119f5cc5d427984d8b05c6bc5569a64",
      "parents": [
        "223662f031a0f6d9893b3ca660eb8e1627efaddd"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Fri Mar 06 23:01:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 06 23:01:31 2026"
      },
      "message": "xds/resolver: make service config human readable in the log (#8958)\n\n#### Prior to this change, the log looked like this:\nthird_party/golang/grpc/internal/grpctest/tlogger.go:133: INFO\nxds_resolver.go:350 [xds] [xds-resolver 0xc000c185a0] For Listener\nresource \"listener-my-service-client-side-xds\" and RouteConfiguration\nresource \"route-my-service-client-side-xds\", generated service config:\n[123 34 108 111 97 100 66 97 108 97 110 99 105 110 103 67 111 110 102\n105 103 34 58 91 123 34 120 100 115 95 99 108 117 115 116 101 114 95 109\n97 110 97 103 101 114 95 101 120 112 101 114 105 109 101 110 116 97 108\n34 58 123 34 99 104 105 108 100 114 101 110 34 58 123 34 99 108 117 115\n116 101 114 58 99 108 117 115 116 101 114 45 109 121 45 115 101 114 118\n105 99 101 45 99 108 105 101 110 116 45 115 105 100 101 45 120 100 115\n34 58 123 34 99 104 105 108 100 80 111 108 105 99 121 34 58 91 123 34 99\n100 115 95 101 120 112 101 114 105 109 101 110 116 97 108 34 58 123 34\n99 108 117 115 116 101 114 34 58 34 99 108 117 115 116 101 114 45 109\n121 45 115 101 114 118 105 99 101 45 99 108 105 101 110 116 45 115 105\n100 101 45 120 100 115 34 125 125 93 125 125 125 125 93 125]\n(t\u003d+311.705869ms)\n\n#### Post this change, it looks like this:\nthird_party/golang/grpc/internal/grpctest/tlogger.go:133: INFO\nxds_resolver.go:350 [xds] [xds-resolver 0xc000c72990] For Listener\nresource \"listener-my-service-client-side-xds\" and RouteConfiguration\nresource \"route-my-service-client-side-xds\", generated service config:\n{\"loadBalancingConfig\":[{\"xds_cluster_manager_experimental\":{\"children\":{\"cluster:cluster-my-service-client-side-xds\":{\"childPolicy\":[{\"cds_experimental\":{\"cluster\":\"cluster-my-service-client-side-xds\"}}]}}}}]}\n(t\u003d+220.184355ms)\n\nRELEASE NOTES: none"
    },
    {
      "commit": "223662f031a0f6d9893b3ca660eb8e1627efaddd",
      "tree": "e28e82591b72658433c8cec037d12178280d3d4f",
      "parents": [
        "b9f7967353473f3b585092ac5d961de3878e1f12"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Fri Mar 06 22:51:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 06 22:51:58 2026"
      },
      "message": "cds: increase defaultTestTimeout to 10s for e2e tests (#8959)\n\nI noticed a bunch of test failures in this package during local\ndevelopment. I traced down one of the tests `TestEDS_EndpointsHealth`\nand was able to confirm that the test was failing because of test\ntimeout expiry. This test attempts to make 2000 RPCs to check the\ndistribution of RPCs and this can easily go past the current `5s`\ndeadline.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "b9f7967353473f3b585092ac5d961de3878e1f12",
      "tree": "105d6f60ec1d9fb441636888b8a92915d83a3197",
      "parents": [
        "549306ae736d845aba3052eae3778b28d4f42db3"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Fri Mar 06 09:52:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 06 09:52:33 2026"
      },
      "message": "xds/resolver: remove unnecessary error check in test (#8955)\n\n`xdsclient.NewPool` does not return an error , but there is a check for\nerror in the next line. This PR removes the unnecessary error check in\ntest.\n\nRELEASE NOTES: None"
    },
    {
      "commit": "549306ae736d845aba3052eae3778b28d4f42db3",
      "tree": "6f4eb4c700766d14bd67e0b5f1a44e7bb9e5c782",
      "parents": [
        "5c4e754a90af870f2cc9c756cc2618c18aa3fe62"
      ],
      "author": {
        "name": "Madhav Bissa",
        "email": "48023579+mbissa@users.noreply.github.com",
        "time": "Fri Mar 06 09:25:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 06 09:25:49 2026"
      },
      "message": "Update gRPC-Go\u0027s dependency versions on master (#8953)\n\nUpdate gRPC-Go\u0027s dependency versions on master\n\nRELEASE NOTES: none"
    },
    {
      "commit": "5c4e754a90af870f2cc9c756cc2618c18aa3fe62",
      "tree": "b8cff42989053b9aa50f0600544b469a6a34553c",
      "parents": [
        "7e2686f9f5de7ca8050e38c98933801519bfbd5f"
      ],
      "author": {
        "name": "Madhav Bissa",
        "email": "48023579+mbissa@users.noreply.github.com",
        "time": "Fri Mar 06 07:51:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 06 07:51:08 2026"
      },
      "message": "Change version to 1.81.0-dev (#8950)\n\nRELEASE NOTES: none"
    },
    {
      "commit": "7e2686f9f5de7ca8050e38c98933801519bfbd5f",
      "tree": "3bd398cb752c15cbdfb69d15210db936e296d639",
      "parents": [
        "b6597b3d328c1ed6b003f9a23b942af7148352ca"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Fri Mar 06 07:05:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 06 07:05:19 2026"
      },
      "message": "cdsbalancer: Update comment about usage of BalancerAttributes (#8951)\n\nThe old `pick_first` has been removed, making the workaround for\npropagating locality no longer necessary. However, in the meantime, two\nadditional usages of the deprecated field were introduced, which\ncurrently prevent the removal of this code.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "b6597b3d328c1ed6b003f9a23b942af7148352ca",
      "tree": "1755de4f921771b734c8bda0bbb0a124722816eb",
      "parents": [
        "1d4fa8a7b772553e82137b059ad4a8f632a1c522"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Thu Mar 05 21:00:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 05 21:00:26 2026"
      },
      "message": "xds/clusterimpl: use xdsConfig for updates and remove redundant fields from LB config (#8945)\n\nThis is part of [gRFC\nA74](https://github.com/grpc/proposal/blob/master/A74-xds-config-tears.md)\nchanges. This PR changes clusterimpl balancer to use updates from\nXDSConfig directly and as a result remove fields from LBConfig that can\nbe used from XDSConfig. Changed tests and configbuilder for cds balancer\naccordingly.\n\nRELEASE NOTES: None"
    },
    {
      "commit": "1d4fa8a7b772553e82137b059ad4a8f632a1c522",
      "tree": "b4b908eba24f2aa138375238bae7d13db8ae70d8",
      "parents": [
        "8f47d364511c8eb0517b47e1a39f13a1370c6a10"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Mon Mar 02 05:25:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 05:25:20 2026"
      },
      "message": "xds: change cdsbalancer to use update from dependency manager (#8907)\n\nThis PR is part of A74 changes. This PR changes following: \n1. Changes the CDS balancer to use the CDS and EDS/DNS update from\nXDSConfig received by xds_resolver instead of starting its own CDS\nwatchers.\n2. Remove cluster resolver completely\n3. CDS balancer creates the priority config and creates priority\nbalancer as its child.\n4. Remove serializer from CDS balancer since it was there to serializer\nwatcher updates and ClientConn updates, now that there are no watchers\nand clientConn updates are already serialized , serializer is no longer\nneeded.\n5. Update tests in cdsbalancer package to check the priority config\ninstead of cluster_resolver config.\n6. xds_resolver tracks reference counts for weighted cluster and cluster\nspecifier plugin seperately. xds_resolver subscribes to the weighted\ncluster in dependency manager when referenced for first time and\nunsubscribes when references in xds_resolver go to zero.\n7. Incase of LDS/RDS resource error , we now directly send empty service\nconfig , instead of sending a complete service config with clusters that\nRPCs are still referenced to.\n8. Minor test fixes.\n\nRELEASE NOTES: \n* xds: \n* Ambient errors for cluster resources are now logged exclusively in the\ndependency manager and are no longer propagated to Load Balancing (LB)\npolicies.\n* When re-resolution is requested, all clusters of type LOGICAL_DNS will\nbe re-resolved simultaneously, rather than only a single cluster.\n* Upon receipt of a listener or route resource error, all in-flight RPCs\nwill now fail immediately.\n* Any error encountered during the creation or update of a priority\nconfiguration will now transition the channel to a TRANSIENT_FAILURE\nstate."
    },
    {
      "commit": "8f47d364511c8eb0517b47e1a39f13a1370c6a10",
      "tree": "14b17cd51dc612f560bfcc900ebbd849c4e83a4c",
      "parents": [
        "22e1ee8085952b4bdadf2928c187d665f6daff99"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Fri Feb 27 06:05:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 06:05:41 2026"
      },
      "message": "attributes: Replace internal map with linked list (#8933)\n\nFixes: #8921\n\nThis PR replaces the underlying `map[any]any` implementation in the\n`Attributes` struct with a singly linked list.\n\nBecause `Attributes` are immutable, the previous implementation required\na complete allocation and map copy every time `WithValue` was called.\nSince this data structure is primarily used in the control plane and\ntypically holds a small number of values (10-20 at most), optimizing for\nmemory is significantly more valuable than optimizing for lookup speed.\n\nBy switching to a persistent linked-list , appending a new value becomes\na highly efficient operation. `WithValue` now simply prepends a new node\nthat points to the previous state, entirely eliminating the need to copy\nexisting elements. Shadowing is handled naturally by returning the first\nmatch found during traversal. This approach is very similar to the\nimplementation of\n[context.WithValue](https://cs.opensource.google/go/go/+/refs/tags/go1.26.0:src/context/context.go;l\u003d727;drc\u003d1a53ce9734c0b2a3e2a9814e75949ea77a978143).\n\n### Complexity Comparison\n\nThe following table breaks down the time and memory complexity of the\n`Attributes` operations, where $N$ is the number of keys.\n\n| Operation | Previous Time | Previous Space | New Time | New Space |\nNotes on New Implementation |\n| :--- | :--- | :--- | :--- | :--- | :--- |\n| **`New`** | $O(1)$ | $O(1)$ | $O(1)$ | $O(1)$ | Allocates a single\nhead node. |\n| **`WithValue`** | $O(N)$ | $O(N)$ | $O(1)$ | $O(1)$ | **Highly\nOptimized:** Merely prepends a new node to the existing list instead of\ncopying a full map. |\n| **`Value`** (Lookup) | $O(1)$ | $O(1)$ | $O(N)$ | $O(1)$ | Requires a\nlinear scan. For $N \\le 20$, this overhead is negligible. |\n| **`Equal`** | $O(N)$ | $O(1)$ | $O(N)$ | $O(N)$ | Allocates temporary\nmaps to track shadowed keys and compare list contents. |\n\n### Benchmark\n\nThe benchmark added compares the memory usage for storing 10 attributes\nin 50 endpoints. It shows a 86% reduction is memory utilization.\n\n```sh\ngoos: linux\ngoarch: amd64\npkg: google.golang.org/grpc/attributes\ncpu: Intel(R) Xeon(R) CPU @ 2.60GHz\n             │   old.txt    │               new.txt               │\n             │    sec/op    │   sec/op     vs base                │\nWithValue-48   168.26µ ± 0%   15.53µ ± 1%  -90.77% (p\u003d0.000 n\u003d10)\n\n             │    old.txt    │               new.txt                │\n             │     B/op      │     B/op      vs base                │\nWithValue-48   200.00Ki ± 0%   23.44Ki ± 0%  -88.28% (p\u003d0.000 n\u003d10)\n\n             │   old.txt   │              new.txt               │\n             │  allocs/op  │ allocs/op   vs base                │\nWithValue-48   1700.0 ± 0%   500.0 ± 0%  -70.59% (p\u003d0.000 n\u003d10)\n```\n\nRELEASE NOTES:\n* attributes: Optimize memory utilization from $O(n)$ to $O(1)$."
    },
    {
      "commit": "22e1ee8085952b4bdadf2928c187d665f6daff99",
      "tree": "62b837c05964b45c24e39d88576258f1e669626b",
      "parents": [
        "7136e99ee323c26984174eb3cec85c201fef9946"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Fri Feb 27 05:46:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 05:46:02 2026"
      },
      "message": "xds: add panic recovery in xdsclient resource unmarshalling. (#8895)\n\nThis PR introduces panic recovery mechanisms to the xdsclient resource\nunmarshaling logic.\n\nCurrently, a panic during the parsing of a malformed xDS update could\ncrash the entire application. To improve resilience in production\nenvironments, this change wraps the resource parsing logic in a `defer\nrecover()` block.\n\nThe recovery mechanism is controlled by the\n`GRPC_EXPERIMENTAL_XDS_PANIC_RECOVERY` environment variable, which\ndefaults to `true`.\n- When enabled, panics during unmarshaling are caught and returned as\nerrors, preventing the application from crashing.\n- When disabled, panics are allowed to propagate. This is required for\nfuzz testing, where crashing on unexpected input is the desired behavior\nto identify bugs:\n[go/grpc-go-xdsclient-fuzzing](http://goto.google.com/grpc-go-xdsclient-fuzzing)\n\nPart of : #8749 \n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "7136e99ee323c26984174eb3cec85c201fef9946",
      "tree": "cd34b9fed13c4b6f954913c0cc7136e2b7218d02",
      "parents": [
        "46a31de5a9f101d515a80dea8b945615e4a5f6f5"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Wed Feb 25 05:22:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 05:22:06 2026"
      },
      "message": "credentials/alts: Pool write buffers (#8919)\n\nFixes: #8906\n\nThis change removes the fixed-size read buffer used by each ALTS\nconnection. A new, internal \"dirty\" buffer pool is introduced to allow\nfetching buffers without the overhead of clearing them first.\n\nThis PR also addresses a few comments from #8910 that were not pushed\nbefore that PR was merged.\n\n## Results\nA new micro-benchmark was added to measure memory usage by a `conn`,\ndemonstrating a ~40% reduction in memory usage. Existing performance\nbenchmark shows no regressions.\n```\ngoos: linux\ngoarch: amd64\npkg: google.golang.org/grpc/credentials/alts/internal/conn\ncpu: Intel(R) Xeon(R) CPU @ 2.60GHz\n                │   old.txt    │               new.txt               │\n                │    sec/op    │    sec/op     vs base               │\nLargeMessage-48   80.81m ± ∞ ¹   79.96m ± ∞ ¹        ~ (p\u003d0.548 n\u003d5)\nMemoryUsage-48    25.45µ ± ∞ ¹   14.29µ ± ∞ ¹  -43.85% (p\u003d0.008 n\u003d5)\ngeomean           1.434m         1.069m        -25.46%\n¹ need \u003e\u003d 6 samples for confidence interval at level 0.95\n\n                │    old.txt     │               new.txt                │\n                │      B/op      │     B/op       vs base               │\nLargeMessage-48    4.582Mi ± ∞ ¹   4.578Mi ± ∞ ¹   -0.08% (p\u003d0.008 n\u003d5)\nMemoryUsage-48    147.16Ki ± ∞ ¹   83.33Ki ± ∞ ¹  -43.38% (p\u003d0.008 n\u003d5)\ngeomean            830.9Ki         625.0Ki        -24.78%\n¹ need \u003e\u003d 6 samples for confidence interval at level 0.95\n\n                │   old.txt   │               new.txt                │\n                │  allocs/op  │  allocs/op   vs base                 │\nLargeMessage-48   2.000 ± ∞ ¹   2.000 ± ∞ ¹        ~ (p\u003d1.000 n\u003d5) ²\nMemoryUsage-48    20.00 ± ∞ ¹   18.00 ± ∞ ¹  -10.00% (p\u003d0.008 n\u003d5)\ngeomean           6.325         6.000         -5.13%\n¹ need \u003e\u003d 6 samples for confidence interval at level 0.95\n² all samples are equal\n```\n\nRELEASE NOTES:\n* credentials/alts: Pool write buffers to reduce memory usage"
    },
    {
      "commit": "46a31de5a9f101d515a80dea8b945615e4a5f6f5",
      "tree": "a0f2dcb8e86992cd9f5b0acb39acf639372235a4",
      "parents": [
        "38eb2de10acad09edef036dadb4656ab07430245"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Tue Feb 24 19:33:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 24 19:33:19 2026"
      },
      "message": "security/advancedtls: fix macOS compatibility in CRL script (#8932)\n\nFixes: https://github.com/grpc/grpc-go/issues/8931\n\nChanges: \n1. Standardized sed : Replaced `sed -i` with a redirection and mv\npattern. GNU sed (Linux) and BSD sed (macOS) handle in-place editing\ndifferently; using a temporary file ensures cross-platform compatibility\nwithout OS detection.\n2. Explicit Subject Key Identifier (SKI) for CAs: Updated the\nself-signed CA generation to use a configuration file\n(`provider_ca.cnf`) instead of only the `-subj` flag. This ensures the\nSubject Key Identifier is consistently included. While Linux (OpenSSL)\noften includes SKI by default, macOS (LibreSSL) does not; using a config\nfile guarantees a uniform output across both.\n\n3. Removed Redundant CSR Flags: Removed the `-config\nprovider_extensions.conf` flag from the `openssl req -new` command for\nmalicious certificates. Since the subsequent signing command explicitly\napplies the extensions, this flag was redundant and caused configuration\nerrors on macOS.\n\n4. Refined Cleanup Logic: Updated the rm commands to more efficiently\nclean up intermediate build artifacts and newly generated configuration\nfiles.\n\n5. Updated Test Constraints: Adjusted `TestFileWatcherCRLProvider` to\nexpect **18** non-CRL files, accounting for the addition of the new\n`provider_ca.cnf` template.\n\nVerified that the script works on both macOS and linux and tests pass\nafter running the script.\n\nRELEASE NOTES: None\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "38eb2de10acad09edef036dadb4656ab07430245",
      "tree": "5ccb2ca5691498c65bff0d3890fabd4fcdd9a275",
      "parents": [
        "7bc57850e5b13ec752d724e5838076ad2ed25e93"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Tue Feb 24 19:32:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 24 19:32:53 2026"
      },
      "message": "protoc-gen-go-grpc: remove use_generic_streams_experimental flag (defaults to true) (#8936)\n\nFixes: https://github.com/grpc/grpc-go/issues/1894 \n\nDeletes the unused code to make stream generics default.\n\nRELEASE NOTES: \n* protoc-gen-go-grpc:\n* Removed the use_generic_streams_experimental flag, stream generics are\nnow the default for all generated code."
    },
    {
      "commit": "7bc57850e5b13ec752d724e5838076ad2ed25e93",
      "tree": "30ab48bc7e2ba9288108e26ebf5aad1dcfba5fa7",
      "parents": [
        "d2eab6871717ba5a4c124897565e1afd43406917"
      ],
      "author": {
        "name": "Greg Barasch",
        "email": "gregbarasch@gmail.com",
        "time": "Tue Feb 24 16:33:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 24 16:33:26 2026"
      },
      "message": "xds: fix copy-paste bug in WeightExpirationPeriod config (#8915)\n\nThis PR fixes a copy-paste bug in the xDS client-side weighted round\nrobin converter where GetBlackoutPeriod() was incorrectly called twice -\nonce for BlackoutPeriod (correct) and once for WeightExpirationPeriod\n(incorrect).\n\nBlackoutPeriod: The duration after startup during which weight updates\nare ignored\nWeightExpirationPeriod: The duration after which backend weights expire\nif not updated\n\nRELEASE NOTES:\n* xds: Fixed incorrect proto field access in weighted round robin\nconfiguration.\n\n---------\n\nSigned-off-by: Greg Barasch \u003cgregbarasch@gmail.com\u003e"
    },
    {
      "commit": "d2eab6871717ba5a4c124897565e1afd43406917",
      "tree": "00af06619e48e788006c6ef0b1848aa0d74b6879",
      "parents": [
        "c9d52ee6110c95abae60dc89524d56cc619ec2ac"
      ],
      "author": {
        "name": "Shivam Kumar",
        "email": "155747305+maishivamhoo123@users.noreply.github.com",
        "time": "Tue Feb 24 07:11:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 24 07:11:57 2026"
      },
      "message": "balancer/rls: fix goroutine leak in control_channel_test (#8898)\n\n## Description\nThis PR fixes a goroutine leak in\n`balancer/rls/control_channel_test.go`.\nThe leak occurred because an unbuffered channel was used in a test with\n`time.After`. If the test timed out, the receiver would stop listening,\ncausing the sender (the callback) to block forever. This change buffers\nthe channel (`make(chan error, 1)`), allowing the goroutine to exit even\nif the receiver is gone.\n\n## Related Issue\nFixes #8892\n\n## Testing\n- Ran `go test -v ./balancer/rls/...` (Passed)\n- Ran `./scripts/vet.sh` (Passed)\n- Ran `go test -race ./balancer/rls/...` (Passed)\n\nRELEASE NOTES: n/a"
    },
    {
      "commit": "c9d52ee6110c95abae60dc89524d56cc619ec2ac",
      "tree": "8ca1344012c31af3e04db9bc488a06d424beb83d",
      "parents": [
        "4a83bf9657a8d8e8e2afa7df43e018c13ff6ae42"
      ],
      "author": {
        "name": "Debayan",
        "email": "135033576+RAVEYUS@users.noreply.github.com",
        "time": "Tue Feb 24 04:32:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 24 04:32:44 2026"
      },
      "message": "xds/xdsclient: add EDS sum of endpoint weights does not exceed MaxUint32 (#8899)\n\nFixes: #8862 \n\nThis PR ensures that the sum of endpoint weights within a single\nlocality does not exceed the maximum uint32 value.\n\nRELEASE NOTES: \n\n- xds: validate that the sum of endpoint weights in a single locality\ndoes not exceed the max uint32 value\n\n---------\n\nSigned-off-by: RAVEYUS \u003crazeodevil@gmail.com\u003e"
    },
    {
      "commit": "4a83bf9657a8d8e8e2afa7df43e018c13ff6ae42",
      "tree": "d224c62918b446ce938c30094185c4fbf158692a",
      "parents": [
        "ace972de53e4a292db3702473181887dc67d7674"
      ],
      "author": {
        "name": "Antoine Tollenaere",
        "email": "atollena@gmail.com",
        "time": "Mon Feb 23 09:11:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 23 09:11:26 2026"
      },
      "message": "ringhash: enable behaviors of A76 by default (#8922)\n\nThose features have been gated by environment variables since 1.73.0,\nand used in production at Datadog. They can be considered stable.\n\nChange the defaults to enable using EDS `hash_key` lb metadata and\n`requestHashHeader` LB config field.\n\nRELEASE NOTES:\n- ringhash: Enable A76 ring hash improvements by default: EDS endpoint\nhash key parsing from LbEndpoint metadata and request hash header\nsupport via the \"requestHashHeader\" field. The previous behavior can be\nrestored by setting GRPC_XDS_ENDPOINT_HASH_KEY_BACKWARD_COMPAT\u003dtrue or\nGRPC_EXPERIMENTAL_RING_HASH_SET_REQUEST_HASH_KEY\u003dfalse."
    },
    {
      "commit": "ace972de53e4a292db3702473181887dc67d7674",
      "tree": "2a03d0b38e9fc1739aecdcc249e995eeb16afae0",
      "parents": [
        "19e41284feb7917bdabb006f6bb1b06ccc55e349"
      ],
      "author": {
        "name": "Bala Nallamilli",
        "email": "30488711+Bala-Nallamilli@users.noreply.github.com",
        "time": "Mon Feb 23 05:26:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 23 05:26:33 2026"
      },
      "message": "orca: fix goroutine leak in fakeORCAService.StreamCoreMetrics (#8911)\n\nFixes #8891\n\nWhen a test context expires before `awaitRequest` reads from `reqCh`,\nthe goroutine running `StreamCoreMetrics` was permanently blocked on the\nunbuffered channel send `f.reqCh \u003c- req`, causing a goroutine leak.\n\nFix this by wrapping the send in a select that also listens to\n`stream.Context().Done()`. When the gRPC connection is cleaned up via\ndeferred `cc.Close()`, the stream context is cancelled, which unblocks\nthe select and allows the goroutine to exit cleanly.\n\nRELEASE NOTES: N/A\n\nCo-authored-by: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "19e41284feb7917bdabb006f6bb1b06ccc55e349",
      "tree": "d09bf5c7eefbd0dce67833d631c9cdcb94790465",
      "parents": [
        "b6f89f7491956c801849febf8cf7c916eb92b904"
      ],
      "author": {
        "name": "Antoine Tollenaere",
        "email": "atollena@gmail.com",
        "time": "Fri Feb 20 10:18:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 20 10:18:07 2026"
      },
      "message": "xds: decouple A76 and A86 EDS metadata parsing (#8875)\n\nThe EDS metadata parsing was inadvertently coupling the A76 (ring hash\nendpoint hash key) and A86 (HTTP CONNECT) features. When either\nGRPC_XDS_ENDPOINT_HASH_KEY_BACKWARD_COMPAT was false (A76 enabled) or\nGRPC_EXPERIMENTAL_XDS_HTTP_CONNECT was true (A86 enabled), the code\nwould\nparse all metadata including TypedFilterMetadata with converters.\n\nThis caused issues because:\n- A76 only needs FilterMetadata[\"envoy.lb\"] for hash_key extraction\n- A86 needs TypedFilterMetadata with converters (e.g., for\n  envoy.config.core.v3.Address) which can fail validation\n\nWhen A76 was enabled but A86 was disabled, invalid proxy addresses in\nTypedFilterMetadata would still cause NACKs, even though the user didn\u0027t\ncare\nabout HTTP CONNECT.\n\nThis change makes TypedFilterMetadata processing conditional on\nGRPC_EXPERIMENTAL_XDS_HTTP_CONNECT, so that A76 can be enabled\nindependently\nwithout triggering A86-specific validation failures.\n\nRELEASE NOTES: \n- Fix a bug where enabling A76 ring hash endpoint hash key feature\nwould cause EDS resources to be NACKed if they contained invalid proxy\naddress\nmetadata, even when HTTP CONNECT (A86) was not enabled."
    }
  ],
  "next": "b6f89f7491956c801849febf8cf7c916eb92b904"
}
