)]}'
{
  "log": [
    {
      "commit": "565a3f80d37095b7b97596b18b85e11689abecba",
      "tree": "64925b0ffb4b081fc81ff1ee01dc30aab88b0ad4",
      "parents": [
        "e84979f07bc360b0a42a55365931438c7b856d9f"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Tue Oct 27 14:01:00 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 14:01:00 2026 +0530"
      },
      "message": " transport: use an intrusive linked list for per-stream data frame queues (#9490)\n\n#9444 replaced the linked lists in the control buffer and in each\nstream\u0027s queue of data frames with ring buffers. This works well for the\ncontrol buffer, which is long lived and shared by all streams. For\nper-stream queues, however, the ring buffer allocates a backing array on\neach stream\u0027s first enqueue, which costs one allocation per stream on\nboth the client and the server. This buffer can also pin [up to 1KB\nmemory](https://github.com/grpc/grpc-go/pull/9444#discussion_r4157701231)\nper stream.\n\nThis PR replaces the per-stream ring buffer with an intrusive singly\nlinked list: `dataFrame` gets a `next` field and `outStream` keeps\n`dataHead/dataTail` pointers. A `dataFrame` is only ever queued on one\nstream, and the queue is only accessed by the loopy writer, so no extra\nsynchronization is needed. Adding the field does not change the\nallocation size class of `dataFrame` (72 → 80 bytes).\n\nServer trailers, which were previously queued behind the data frames as\na `*serverHeaders` item, are now stored in a separate\n`outStream.trailer` field and written once the data queue is empty. As a\nresult, the queue only holds `*dataFrames` and the type assertions in\n`processData` and `updateStreamAfterWrite` are removed.\n\nThe control buffer continues to use the ring buffer from #9444.\n\n## Benchmarks\n\nbenchmain with -bufconn -networkMode\u003dLocal -compression\u003doff\n-benchtime\u003d60s.\n\n### Unary, 100 concurrent calls, 0-byte payloads\n\n| Round | QPS | Avg latency | p99 latency | Bytes/op | Allocs/op |\n|---|---|---|---|---|---|\n| 1 | +2.14% | -2.07% | -2.50% | -1.66% | 137.19 → 135.20 |\n| 2 | +1.57% | -1.56% | -1.58% | -1.69% | 137.19 → 135.19 |\n| 3 | -0.15% | +0.14% | -0.49% | -1.64% | 137.19 → 135.19 |\n| **Mean** | **+1.19%** | **-1.16%** | **-1.52%** | **-1.66% (~158 B)**\n| **-2.00** |\n\n\nThe 2 fewer allocations per RPC are the per-stream ring buffer arrays\n(one on the client, one on the server).\n\n### Streaming, 200 concurrent calls, 100-byte payloads\n\n| Round | QPS | Avg latency | p99 latency | Bytes/op | Allocs/op |\n|---|---|---|---|---|---|\n| 1 | +1.32% | -1.17% | -0.99% | 0.00% | 0.00% |\n| 2 | +1.72% | -1.61% | -1.04% | 0.00% | 0.00% |\n| 3 | +1.24% | -1.33% | -0.69% | 0.00% | 0.00% |\n| **Mean** | **+1.43%** | **-1.37%** | **-0.91%** | **0.00%** |\n**0.00%** |\n\nStreams are long lived in this workload, so the ring buffer\u0027s per-stream\nallocation was already negligible.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "e84979f07bc360b0a42a55365931438c7b856d9f",
      "tree": "518573487a444e87079c435cb8bd21e1bad266a1",
      "parents": [
        "5210090b567328709f04666131c8c539ea93f5bb"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Tue Oct 27 12:51:49 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 12:51:49 2026 +0530"
      },
      "message": "xds/clustermanager: stop splitting endpoints by hierarchical path (#9451)\n\nThe `xds_cluster_manager_experimental` LB policy currently calls\n`hierarchy.Group()` on the endpoints it receives and gives each child\nonly the endpoints whose first hierarchical path element matches the\nchild\u0027s name. Endpoints with no path, or with a path that doesn\u0027t match\nany child, are silently dropped.\n\nThis splitting has never done anything in practice:\n* The cluster manager\u0027s only producer is the xDS resolver, which sends a\nresolver state [without any\nendpoints](https://github.com/grpc/grpc-go/blob/master/internal/xds/resolver/xds_resolver.go#L390-L395).\nSo `hierarchy.Group()` always returns an empty map, and every child gets\n`nil` endpoints.\n* The children are CDS balancers, which get their endpoints from the xDS\nconfig passed in the resolver state attributes, not from\n`ResolverState.Endpoints`.\n\n### History\nThe splitting logic was added in #3746, which introduced the\n`xds_routing` balancer. It was copied, along with its comments, from the\n`weighted_target` balancer (#3541), where splitting by hierarchical path\nis required. `xds_routing` never received endpoints with hierarchical\npaths. In #4083 the routing balancer was split into the xDS config\nselector and the cluster manager, and the `hierarchy.Group()` call\ncarried over unchanged.\n\n### Other languages\n\nNeither gRPC C++ nor gRPC Java splits endpoints by hierarchical path in\nthe cluster manager. Both forward the parent\u0027s full address list to\nevery child and change only the child\u0027s LB config:\n\n* C++:\n[`XdsClusterManagerLb::UpdateLocked`](https://github.com/grpc/grpc/blob/87963e17a3f5651a28eeebcbfe7d5be78c94d457/src/core/load_balancing/xds/xds_cluster_manager.cc#L285-L294)\npasses `args.addresses` to each child, and\n[`ClusterChild::UpdateLocked`](https://github.com/grpc/grpc/blob/87963e17a3f5651a28eeebcbfe7d5be78c94d457/src/core/load_balancing/xds/xds_cluster_manager.cc#L453-L473)\nforwards them unchanged.\n* Java:\n[`ClusterManagerLoadBalancer.createChildAddressesMap`](https://github.com/grpc/grpc-java/blob/96e4d30dc00e8ec62b83d27439fc39925f1b6ce0/xds/src/main/java/io/grpc/xds/ClusterManagerLoadBalancer.java#L108-L114)\nbuilds each child\u0027s `ResolvedAddresses` from the parent\u0027s, overriding\nonly the LB config. By contrast, Java\u0027s `weighted_target` [does call\n`AddressFilter.filter`](https://github.com/grpc/grpc-java/blob/96e4d30dc00e8ec62b83d27439fc39925f1b6ce0/xds/src/main/java/io/grpc/xds/WeightedTargetLoadBalancer.java#L94).\n\n### This PR\n\n* Removes the `hierarchy.Group()` call from the cluster manager and\nforwards `ResolverState` unchanged to every child.\n* Updates the tests that relied on the splitting. The tests now use a\ntest child policy that delegates to `pick_first` with a backend taken\nfrom its own LB config and ignores the endpoints from its parent. This\nmirrors how the real CDS children get their endpoints. The other tests\nnow send plain endpoints without hierarchical paths.\n* Adds `TestClusterManagerForwardsResolverState`, which checks that\nevery child receives the parent\u0027s endpoints and attributes unchanged.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "5210090b567328709f04666131c8c539ea93f5bb",
      "tree": "281f643aa01ac36a02bb86de6c9aedba70b2feda",
      "parents": [
        "d619b5d0208981a4c74c418fe03f486ad6595862"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Mon Oct 26 22:52:19 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 22:52:19 2026 -0700"
      },
      "message": "autosharding: fix flaky test TestAggregatedConnectivityStateAndAutoConnect (#9516)\n\nFixes https://github.com/grpc/grpc-go/issues/9512\n\nVerified that the fix works on forge by running 100K times.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "d619b5d0208981a4c74c418fe03f486ad6595862",
      "tree": "ce66aed9bd1e5c9dc215d279956728975e4c6d74",
      "parents": [
        "b75b9a15f65c35fadd31299c0ce4ec2ad0f7a193"
      ],
      "author": {
        "name": "Madhav Bissa",
        "email": "48023579+mbissa@users.noreply.github.com",
        "time": "Tue Oct 27 10:11:09 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 10:11:09 2026 +0530"
      },
      "message": "transport: protect transports from control frame floods (#9563)"
    },
    {
      "commit": "b75b9a15f65c35fadd31299c0ce4ec2ad0f7a193",
      "tree": "a4b68f8f1b82d1aec20a0fde7dc5e9c10d25894f",
      "parents": [
        "4489fe09a723fc4639c3e31fbd5e6052a08dada2"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Mon Oct 26 23:55:41 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 11:25:41 2026 -0700"
      },
      "message": "internal/wrr/edf: remove unused package (#9561)\n\nThis internal package was only referenced by test code. This PR removes\nthe package and associated tests.\n\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "4489fe09a723fc4639c3e31fbd5e6052a08dada2",
      "tree": "49edfc3e7f445a8ff2a32b0a11dc4d3b99e91539",
      "parents": [
        "a93c0e7bfa317d688a7a7cc129553b5a676397c4"
      ],
      "author": {
        "name": "Elric",
        "email": "tbnsok40@gmail.com",
        "time": "Mon Oct 26 19:46:51 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 16:16:51 2026 +0530"
      },
      "message": "xds: unify header matcher parsing (#9389)"
    },
    {
      "commit": "a93c0e7bfa317d688a7a7cc129553b5a676397c4",
      "tree": "3f7075b5d677f5de738c18b8dedfacd36ce64ae4",
      "parents": [
        "80c1e76a540c29dc38ea33a07c28a4fac23f649b"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Mon Oct 26 14:01:26 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 14:01:26 2026 +0530"
      },
      "message": "transport: remove env vars for HTTP framer read buffer pooling (#9531)\n\nThis PR removes two environment variables. Both features they controlled\nare now always on:\n\n- `GRPC_GO_EXPERIMENTAL_HTTP_FRAMER_READ_BUFFER_POOLING`: when the\nunderlying `net.Conn` supports it, the HTTP/2 framer reads without\npinning memory, using pooled read buffers. This cuts memory use when\nsubchannels are idle.\n\nThe variables is an escape hatch for turning the feature off if problems\ncame up. It has been shipped with a default of `true` for 2 releases,\nand no issues were reported, so it is no longer needed.\n\nRELEASE NOTES:\n* transport: Remove the\n`GRPC_GO_EXPERIMENTAL_HTTP_FRAMER_READ_BUFFER_POOLING` environment\nvariable. HTTP framer read buffer pooling is now always enabled."
    },
    {
      "commit": "80c1e76a540c29dc38ea33a07c28a4fac23f649b",
      "tree": "42081106fe0ce05e62cd3628d2677a732cf11c43",
      "parents": [
        "2b246572373c79eda543700fb850b5219053a7ab"
      ],
      "author": {
        "name": "Alex Chang",
        "email": "herefindalex@gmail.com",
        "time": "Sat Oct 24 02:13:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 11:13:30 2026 -0700"
      },
      "message": "endpointsharding: ignore endpoints without addresses (#9446)\n\nUpdates #9409\n\nSkip endpoints with no addresses before creating or updating child\nbalancers. When all endpoints are empty, the existing empty-list\nhandling closes removed children, returns\n`balancer.ErrBadResolverState`, and reports `TransientFailure`.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "2b246572373c79eda543700fb850b5219053a7ab",
      "tree": "ddbac685b833b5872e9a1959d79eaa17269f9a00",
      "parents": [
        "6ce1c873d713459706a2aa887fe83a183e758be3"
      ],
      "author": {
        "name": "Iain Macdonald",
        "email": "xiainx@gmail.com",
        "time": "Fri Oct 23 00:46:15 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 13:16:15 2026 +0530"
      },
      "message": "transport: initialize control buffer before registering socket with channelz (#9541)"
    },
    {
      "commit": "6ce1c873d713459706a2aa887fe83a183e758be3",
      "tree": "6cce0e4dc013a7135d1650e3eaa745ecab8cb2aa",
      "parents": [
        "679b224109d3373eb0e4d80b6e41aafc8d295b6d"
      ],
      "author": {
        "name": "Luwei Ge",
        "email": "lwge@google.com",
        "time": "Wed Oct 21 10:28:08 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 10:28:08 2026 -0700"
      },
      "message": "credentials/alts: set the default ALTS max frame size to 64KB (#9535)\n\n#9268 has been verified and this is a follow-up to change the default to\n64KB.\n\nRELEASE NOTES:\n\n- credentials/alts: The default ALTS max frame size is changed to 64KB."
    },
    {
      "commit": "679b224109d3373eb0e4d80b6e41aafc8d295b6d",
      "tree": "a7cc2b28281f4ba01e0afdbc34d5ae0d09b6d147",
      "parents": [
        "4599e77441af5d816adb31bfbfb84605388735bf"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Mon Oct 19 11:30:12 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 11:30:12 2026 -0700"
      },
      "message": "autosharding: use lameChannel on errors from channel factory (#9529)\n\nRELEASE NOTES: none"
    },
    {
      "commit": "4599e77441af5d816adb31bfbfb84605388735bf",
      "tree": "983728410aab5a7c2986f2fc15deb13bab30dcb3",
      "parents": [
        "3d85ab3cf6bf8c3e19d1a763baadd0062be2fca7"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Mon Oct 19 11:19:00 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 11:19:00 2026 +0530"
      },
      "message": "transport: avoid allocating a closure for writeQuota.replenish on every stream (#9493)\n\n`writeQuota.init` stored the bound method value `w.realReplenish` in the\n`replenish` func field. Taking a method value that captures its receiver\nallocates a closure, so this cost one heap allocation per stream on both\nthe client and the server, i.e. 2 allocations per unary RPC. The field\nonly existed so that a test could observe replenishment; production code\ncalls it in a single place (`loopyWriter.processData`).\n\nThis PR makes `replenish` a regular method. The test now detects the\nflow-control stall from the receiving side. Before reading, each peer\npolls its own stream\u0027s inbound flow control (`inFlow.pendingData`,\nprotected by `fc.mu`) every millisecond until it holds a full window\n(`defaultWindowSize`) of received but unread data. The remote sender\ncan\u0027t send more until this side reads and sends a WINDOW_UPDATE, so a\nfull window means the sender is blocked on stream-level flow control. It\nalso means the data has actually arrived, not just that loopy has\nscheduled it. This replaces the two goroutines that spun on\n`runtime.Gosched()` and signalled each other through the\nnotify/getNotified channels. As a result, the test no longer needs a\nhook in production code or any signalling between the client and server,\nand it stops burning CPU while it waits.\n\n## Benchmarks\n\n`benchmain` with `-bufconn -networkMode\u003dLocal -compression\u003doff\n-benchtime\u003d60s`. Each round runs `master` and this PR at the same time.\n\n### Unary, 100 concurrent calls, 0-byte payloads\n\n| Round | QPS | Avg latency | p99 latency | Bytes/op | Allocs/op |\n|---|---|---|---|---|---|\n| 1 | +0.48% | -0.49% | +0.17% | 9324 → 9293 | 135.19 → 133.19 |\n| 2 | +0.34% | -0.32% | -1.35% | 9325 → 9292 | 135.19 → 133.19 |\n| 3 | +0.97% | -0.95% | -1.42% | 9325 → 9289 | 135.19 → 133.19 |\n| **Mean** | **+0.60%** | **-0.59%** | **-0.87%** | **-33 B (-0.36%)** |\n**-2.00 (-1.48%)** |\n\n### Streaming, 200 concurrent calls, 100-byte payloads\n\n| Round | QPS | Avg latency | p99 latency | Bytes/op | Allocs/op |\n|---|---|---|---|---|---|\n| 1 | -0.40% | +0.39% | +1.09% | 0.00% | 0.00% |\n| 2 | -0.20% | +0.13% | +1.62% | 0.00% | 0.00% |\n| 3 | +1.17% | -1.32% | -0.66% | 0.00% | 0.00% |\n| **Mean** | **+0.19%** | **-0.27%** | **+0.68%** | **0.00%** |\n**0.00%** |\n\nStreaming is unaffected as expected: streams are long-lived, so the\nper-stream allocation was already amortized away. A heap profile of the\nunary benchmark confirms that `writeQuota.init` now only allocates its\nnotification channel.\n\nRELEASE NOTES: None"
    },
    {
      "commit": "3d85ab3cf6bf8c3e19d1a763baadd0062be2fca7",
      "tree": "9f769d42dd24e886271f84eee85618cbb0505820",
      "parents": [
        "9f1c0d1cb67ef4c1d602bea018a34d730a759254"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Fri Oct 16 16:05:55 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 16:05:55 2026 -0700"
      },
      "message": "cds: add support for autosharding LB, as specified in A119 (#9526)\n\nThis PR implements\nhttps://github.com/easwars/proposal/blob/slicer/A119-autosharding-lb-policy.md#changes-to-cds-lb-policy.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "9f1c0d1cb67ef4c1d602bea018a34d730a759254",
      "tree": "1420239f9aa9b4f48599a448390566099395182b",
      "parents": [
        "ecbf7d6d2044558ff0630349fb12403309b794a7"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Fri Oct 16 14:42:48 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 14:42:48 2026 -0700"
      },
      "message": "autosharding: validate key_header_name during config parsing (#9527)\n\nImplements the newly added validation in\nhttps://github.com/easwars/proposal/blob/slicer/A119-autosharding-lb-policy.md#load-balancing-configuration\n\nSpecifically:\nWhen parsing the JSON LB configuration, the LB policy must ensure that\nthe key_header_name field contains a valid gRPC header name. If not, the\nconfiguration must be rejected.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "ecbf7d6d2044558ff0630349fb12403309b794a7",
      "tree": "fbc59916eef053c953a6f601f26272a7b52035b0",
      "parents": [
        "529d6e8613c335bd2ca3e6d8fabaee872334b7a7"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Fri Oct 16 11:53:18 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 00:23:18 2026 +0530"
      },
      "message": "transport: prevent nil pointer dereference in recvBuffer.put. (#9533)"
    },
    {
      "commit": "529d6e8613c335bd2ca3e6d8fabaee872334b7a7",
      "tree": "924856ec3d3afe7c5f0c0f5a880fadb6a3d30cb5",
      "parents": [
        "40e956b363bfbf97b18751e3d20d3cb2a02ee87e"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Thu Oct 15 23:25:35 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 11:55:35 2026 +0530"
      },
      "message": "client: register context cancellation callbacks for unary and streaming RPCs using context.AfterFunc (#9405)"
    },
    {
      "commit": "40e956b363bfbf97b18751e3d20d3cb2a02ee87e",
      "tree": "1d92e231dfdc9137d36eeb8ba2ac2db8fe1d51ee",
      "parents": [
        "a1830c92754e4802173a2321355bae9317b5ef27"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Thu Oct 15 13:37:07 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 13:37:07 2026 -0700"
      },
      "message": "xds: implement converter for autosharding LB (#9523)\n\nThis PR implements the xDS LB policy registry converter for the\n`Autosharding` LB policy, as described in\n\nhttps://github.com/easwars/proposal/blob/slicer/A119-autosharding-lb-policy.md#changes-to-xds-lb-policy-registry\n- The converter is guarded by\n`GRPC_XDS_EXPERIMENTAL_ENABLE_AUTOSHARDING_LB`, which also enables\nparsing of `allowed_grpc_services` in the bootstrap config.\n- Updates the `go-control-plane/envoy` dependency to pick up the\n`Autosharding` proto.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "a1830c92754e4802173a2321355bae9317b5ef27",
      "tree": "ef8f1ea17b229a85d53c1c17cb3a5fabd21f03e9",
      "parents": [
        "9be04e87610bb4db5fd0695f44fb856665d0aabf"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Thu Oct 15 12:39:17 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 12:39:17 2026 -0700"
      },
      "message": "*: regenerate protos (#9524)\n\nRELEASE NOTES: none"
    },
    {
      "commit": "9be04e87610bb4db5fd0695f44fb856665d0aabf",
      "tree": "595b5a961ad20d7bb14eb5b02dec10974d1c335e",
      "parents": [
        "4d4d42843b7154ede87a6cead454ccf8410baea8"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Wed Oct 14 21:25:32 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 21:25:32 2026 -0700"
      },
      "message": "internal/xds: support a Key() method on grpcservice.Config (#9508)\n\nThis will be used by the `cds` policy when it implements a \"Channel\nFactory\" that it will pass to the `autosharding` LB policy.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "4d4d42843b7154ede87a6cead454ccf8410baea8",
      "tree": "6c70b4f3da98a0a79343749a14f61212416495f1",
      "parents": [
        "18b5908944db6019205adbee73f42782cb571bd4"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Wed Oct 14 10:40:44 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 10:40:44 2026 -0700"
      },
      "message": "xdsclient: update xdslbregistry\u0027s API to support A119 (#9510)\n\nThis PR implements the changes mentioned in\nhttps://github.com/easwars/proposal/blob/slicer/A119-autosharding-lb-policy.md#changes-to-xds-lb-policy-registry\n\nI\u0027ve gone with a slightly modified API than the one suggested in the\ngRFC since it made more sense for the converters to return a map of\nGrpcServices than for the resource decoder to allocate the map.\n\nAlso note https://github.com/grpc/grpc-go/issues/9509.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "18b5908944db6019205adbee73f42782cb571bd4",
      "tree": "eec06973a69788a839c4dd4ad1259545a20b1848",
      "parents": [
        "215d0ea53d432718f78ee4f1a6d553f1eb8f21c0"
      ],
      "author": {
        "name": "Naveed",
        "email": "naveed@bugqore.com",
        "time": "Wed Oct 14 15:28:25 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 15:28:25 2026 +0530"
      },
      "message": "extproc: reject invalid server flow control window increments (#9388)\n\nrecvFromProcServerLoop applies a ServerWindowUpdate from the external\nprocessor by adding its window_increment value straight into the\nper-direction int64 flow control counters, which start at the 64KiB\ndefault. The increment is an int64 the processing server controls, so a\nvalue near math.MaxInt64 wraps the window negative and leaves it there\nfor good; acquireDownstreamToSidestreamWindow and its upstream sibling\nthen keep blocking and the RPC\u0027s body forwarding through the processor\nstalls.\n\nRoute both increments through applyServerWindowUpdate, which rejects an\nincrement that would wrap the int64 window in either direction, failing\nthe proc stream instead of corrupting the accounting. Negative\nincrements are allowed, per the spec, and simply shrink the window;\nsenders block until later updates bring it back above zero. The check\nsits next to the window because this recv loop is the only place a\nserver-supplied increment is applied.\n\nRELEASE NOTES:\n* xds: reject flow control window updates from an ext_proc server that\nwould overflow the window"
    },
    {
      "commit": "215d0ea53d432718f78ee4f1a6d553f1eb8f21c0",
      "tree": "d5e6b2b89ab237ebec7b648c675fd93e9e4a19e9",
      "parents": [
        "6b95ef1231bf5124069f9a006bd3bb4e42da61df"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Wed Oct 14 13:51:22 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 13:51:22 2026 +0530"
      },
      "message": "internal/serviceconfig: reject misplaced signs when parsing durations (#9454)\n\n`Duration.UnmarshalJSON` parsed both the whole and fractional parts of a\nduration string with `strconv.ParseInt`, which accepts its own leading\nsign. Because the leading `-` had already been stripped, signs in other\npositions were accepted and produced wrong values instead of an error:\n| Input      | Before   | After |\n|------------|----------|-------|\n| `\"1.+5s\"`  | 1.05s    | error |\n| `\"1.-5s\"`  | 950ms    | error |\n| `\"-1.-5s\"` | -950ms   | error |\n| `\".-5s\"`   | -50ms    | error |\n| `\"--1s\"`   | 1s       | error |\n| `\"-+1s\"`   | -1s      | error |\n\nThis change strips a single optional leading sign (`-` or `+`) and then\nparses both parts with `strconv.ParseUint`, so any further sign is\nrejected. This matches the protojson parser\n(`google.golang.org/protobuf/encoding/protojson`), which also allows\nonly one leading sign. A leading `+` (e.g. `\"+1s\"`) was already accepted\nand still is.\n\nEvery input that is now rejected used to parse to a wrong value, so\nvalid durations are not affected.\n\nRELEASE NOTES:\n* client: Reject service config duration strings with a sign anywhere\nother than the leading position (e.g. `\"1.-5s\"`, `\"--1s\"`)."
    },
    {
      "commit": "6b95ef1231bf5124069f9a006bd3bb4e42da61df",
      "tree": "0f8221ca3bd9b6d9d2147fbaffd60d5449540929",
      "parents": [
        "5ff04b66ea52b067fab16c735f330f6c2528c53a"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Tue Oct 13 23:51:56 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 23:51:56 2026 -0700"
      },
      "message": "autosharding: handle slices from sharding server with no endpoints (#9511)\n\nThis PR handles\nhttps://github.com/easwars/proposal/blob/slicer/A119-autosharding-lb-policy.md#handling-slices-with-no-endpoints.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "5ff04b66ea52b067fab16c735f330f6c2528c53a",
      "tree": "f5371e4032ab73bb4a308fd93076e0a9ebee75d9",
      "parents": [
        "28f871cd3e9c02095d1eab97d2231ae1437a6b90"
      ],
      "author": {
        "name": "Elric",
        "email": "tbnsok40@gmail.com",
        "time": "Tue Oct 13 15:45:06 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 12:15:06 2026 +0530"
      },
      "message": "xdsclient: test all client metric units (#9494)\n\nFollow-up to #9476, as requested in [review\ncomment](https://github.com/grpc/grpc-go/pull/9476#discussion_r4192034135).\n\n\nRELEASE NOTES: n/a"
    },
    {
      "commit": "28f871cd3e9c02095d1eab97d2231ae1437a6b90",
      "tree": "1d82c384185b04d9153ef7a01fd839b169f5b387",
      "parents": [
        "ca742c175d4189709be0322839f98544150ea71f"
      ],
      "author": {
        "name": "Richard Ragusski",
        "email": "richard.ragusski@gmail.com",
        "time": "Tue Oct 13 08:24:29 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 11:54:29 2026 +0530"
      },
      "message": "examples: fix division by zero in custom load balancer (#9489)\n\nSetting `chooseSecond: 0` is\n[documented](https://github.com/grpc/grpc-go/blob/39ebc82c352a3302c3d7f748b4359e26689d9187/examples/features/customloadbalancer/client/customroundrobin/customroundrobin.go#L45)\nas never selecting the second SubConn, but currently it causes a\ndivide-by-zero panic once both children are ready. Fix is to check\n`chooseSecond` before evaluating the remainder.\n\nRELEASE NOTES: n/a"
    },
    {
      "commit": "ca742c175d4189709be0322839f98544150ea71f",
      "tree": "6f89684ada622e204ae191a19750391d7471752d",
      "parents": [
        "de20bed5c0557256824b14b7ef9ac860c81a0863"
      ],
      "author": {
        "name": "Roshan Singh",
        "email": "35294369+lopster568@users.noreply.github.com",
        "time": "Tue Oct 13 11:49:37 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 11:49:37 2026 +0530"
      },
      "message": "balancer/ringhash: fix flaky TestRingHash_RequestHashKeyConnecting (#9329)\n\nFixes #9030\n\n`TestRingHash_RequestHashKeyConnecting` counts connection attempts in\nthe same loop that resumes the blocked one, so it can count an attempt\nthat its own `Resume()` caused. Resuming makes the endpoint READY,\nring_hash publishes a\npicker with `hasEndpointInConnectingState` false, and the queued RPCs\npick again and start a connection to one idle endpoint along the ring\nwalk, which is what gRFC A76 asks for (picker.go:93-115). If the loop is\nstill scanning when that\ndial reaches the blocking dialer it counts that attempt and the test\nfails. Both failures linked from the issue show the second subchannel\nbeing created after the resume, never before it.\n\nThe fix orders the phase so the assertion cannot observe something the\ntest itself caused:\n\n1. First RPC in a goroutine, wait for a hold to be entered.\n2. Count all 20 holds, want exactly 1.\n3. Second RPC on the test goroutine, short deadline,\n`WaitForReady(true)`, want `DeadlineExceeded`.\n4. Count all 20 holds again, want exactly 1.\n5. Only then resume the single started hold.\n\nBoth counts precede any `Resume()`. Only two pickers can exist before\nthat point and a pick against either cannot start a second connection\nattempt, so `at most 1` is tightened to `exactly 1` and the fixed 10ms\nsleep is removed. I proved this\nwith a throwaway instrument that forces the CI interleaving\ndeterministically (current loop fails 100 of 100, this change 0 of 100),\nand also reproduced the flake organically under core pinning (current 2\nof 300, this change 0 of 2000).\nThe CI log ordering, the picker state argument and the full numbers are\nin the first comment.\n\nRELEASE NOTES: n/a"
    },
    {
      "commit": "de20bed5c0557256824b14b7ef9ac860c81a0863",
      "tree": "83855a54c67d9430190e536793efbc5e2841add3",
      "parents": [
        "9470552765e069d8bbdac5a3de39600778f9347e"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Mon Oct 12 12:03:23 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 12:03:23 2026 -0700"
      },
      "message": "autosharding: AutoshardingClient implementation (#9484)\n\nThis PR is a follow-up from https://github.com/grpc/grpc-go/pull/9479\nand uses the scaffolding for the autosharding client defined in there.\n\nApart from the implementation of the autosharding client, this PR also\ncontains the following:\n- `*.pb.go` files for autosharding.proto\n- Changes to regenerate.sh to generate the above\n- A dependency on google.golang.org/genproto/googleapis/api since the\nautosharding proto uses the `google.api.field_behavior` annotation\n- Allow the autosharding proto to be imported twice (by adding to an\nallowlist in vet.sh), once for messages and once for services\n\nRELEASE NOTES: none"
    },
    {
      "commit": "9470552765e069d8bbdac5a3de39600778f9347e",
      "tree": "ce34b51bea2eca1f72d79238e6376aa8dd97eaec",
      "parents": [
        "cf7e941719766922d0222f65ef91841bfe0eed14"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Mon Oct 12 11:47:06 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 11:47:06 2026 -0700"
      },
      "message": "autosharding: core balancer implementation (#9479)\n\nThis PR contains most of the balancer implementation. It does not\ncontain the implementation of the autoshardingClient that will actually\ntalk to the sharding service to fetch assignments. But it makes it\npossible to test the balancer functionality by stubbing out the\nautoshardingClient.\n\nSubsequent PRs will address autoshardingClient implementation and xDS\nintegration.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "cf7e941719766922d0222f65ef91841bfe0eed14",
      "tree": "28e660264941a3cac2cbe7c7810c5d29128c98d6",
      "parents": [
        "8c59ee6356bf92d0a5819b0cdbd3118876783028"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Mon Oct 12 11:00:00 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 11:00:00 2026 -0700"
      },
      "message": "internal/xds: rename ChannelCreds to ChannelCredsConfig as per TODO (#9498)\n\nThis is prep work for some of the autosharding xDS changes that will\nfollow.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "8c59ee6356bf92d0a5819b0cdbd3118876783028",
      "tree": "2f9a7bc95d64267be408254d213b36422ffc8e9b",
      "parents": [
        "5f1ccf56ea5ec964bbf447a10b561214f86387a6"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Sat Oct 10 15:11:07 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 10 15:11:07 2026 +0530"
      },
      "message": "gcpauthn: change the directory name to match the package name (#9491)\n\nThis PR changes the directory name to match the package name since that\nis what copybara assumes and is also go\n[convention](https://go.dev/doc/effective_go#package-names)\n\nRELEASE NOTES:\n- gcpauth: the directory name has ben changed to `gcpauthn` from\n`gcp_authn` to match the package name"
    },
    {
      "commit": "5f1ccf56ea5ec964bbf447a10b561214f86387a6",
      "tree": "a3ad653297541df3c0c403c5150c180a318ca38a",
      "parents": [
        "39ebc82c352a3302c3d7f748b4359e26689d9187"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Fri Oct 09 11:51:36 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 09 11:51:36 2026 +0530"
      },
      "message": "*:update the x/net package dependency (#9492)\n\nRELEASE NOTES: None"
    },
    {
      "commit": "39ebc82c352a3302c3d7f748b4359e26689d9187",
      "tree": "6dd2f8c7812d102cba027d49e1d46530ce315a94",
      "parents": [
        "6c0c296ea81d7215176b35921fbeb90e2928ba94"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Thu Oct 08 15:33:58 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 15:33:58 2026 +0530"
      },
      "message": "transport: replace linked list with ring buffer (#9444)\n\nThis PR replaces the linked list used to store `controlbuf` items and\nqueued data frames for each stream with a deque backed by a ring buffer\n(inspired by [gammazero/deque](https://github.com/gammazero/deque)).\n\nThe ring buffer is cache-friendly and dynamically grows or shrinks to\namortize allocations and avoid pinning memory. Unary benchmarks\ndemonstrate a 10-15% improvement in QPS.\n\n## Benchmarks\nUnary 1 byte payloads\n```\nunary-networkMode_Local-bufConn_true-keepalive_false-benchTime_1m0s-trace_false-latency_0s-kbps_0-MTU_0-maxConcurrentCalls_100-reqSize_1B-respS\nize_1B-compressor_off-channelz_false-preloader_false-clientReadBufferSize_-1-clientWriteBufferSize_-1-serverReadBufferSize_-1-serverWriteBuffer\nSize_-1-sleepBetweenRPCs_0s-connections_1-recvBufferPool_simple-sharedWriteBuffer_true\n               Title       Before        After Percentage\n            TotalOps      9527821     11051923    16.00%\n             SendOps            0            0      NaN%\n             RecvOps            0            0      NaN%\n            Bytes/op      9259.21      9429.86     1.84%\n           Allocs/op       141.00       141.01     0.71%\n             ReqT/op   1270376.13   1473589.73    16.00%\n            RespT/op   1270376.13   1473589.73    16.00%\n            50th-Lat    563.834µs    493.905µs   -12.40%\n            90th-Lat    846.752µs     661.85µs   -21.84%\n            99th-Lat    1.56603ms   1.397267ms   -10.78%\n             Avg-Lat    629.086µs    541.744µs   -13.88%\n           GoVersion     go1.26.6     go1.26.6\n         GrpcVersion   1.86.0-dev   1.86.0-dev\n```\n\nUnary 1 KB\n```\nunary-networkMode_Local-bufConn_true-keepalive_false-benchTime_1m0s-trace_false-latency_0s-kbps_0-MTU_0-maxConcurrentCalls_120-reqSize_1024B-re\nspSize_1024B-compressor_off-channelz_false-preloader_false-clientReadBufferSize_-1-clientWriteBufferSize_-1-serverReadBufferSize_-1-serverWrite\nBufferSize_-1-sleepBetweenRPCs_0s-connections_1-recvBufferPool_simple-sharedWriteBuffer_true\n               Title       Before        After Percentage\n            TotalOps      6771768      7359035     8.67%\n             SendOps            0            0      NaN%\n             RecvOps            0            0      NaN%\n            Bytes/op     13180.98     13491.29     2.36%\n           Allocs/op       131.28       131.33     0.00%\n             ReqT/op 924572057.60 1004753578.67     8.67%\n            RespT/op 924572057.60 1004753578.67     8.67%\n            50th-Lat    988.646µs     911.04µs    -7.85%\n            90th-Lat   1.516118ms    1.38996ms    -8.32%\n            99th-Lat   2.375849ms   2.155515ms    -9.27%\n             Avg-Lat   1.062525ms    977.574µs    -8.00%\n           GoVersion     go1.26.6     go1.26.6\n         GrpcVersion   1.86.0-dev   1.86.0-dev\n```\n\nStreaming 1KB payloads\n```\nstreaming-networkMode_Local-bufConn_true-keepalive_false-benchTime_1m0s-trace_false-latency_0s-kbps_0-MTU_0-maxConcurrentCalls_120-reqSize_1024\nB-respSize_1024B-compressor_off-channelz_false-preloader_false-clientReadBufferSize_-1-clientWriteBufferSize_-1-serverReadBufferSize_-1-serverW\nriteBufferSize_-1-sleepBetweenRPCs_0s-connections_1-recvBufferPool_simple-sharedWriteBuffer_true\n               Title       Before        After Percentage\n            TotalOps     19635542     20592212     4.87%\n             SendOps            0            0      NaN%\n             RecvOps            0            0      NaN%\n            Bytes/op      4972.37      4987.34     0.30%\n           Allocs/op        19.40        19.38     0.00%\n             ReqT/op 2680906001.07 2811523345.07     4.87%\n            RespT/op 2680906001.07 2811523345.07     4.87%\n            50th-Lat    351.902µs    336.048µs    -4.51%\n            90th-Lat    489.036µs    472.488µs    -3.38%\n            99th-Lat   1.196465ms   1.149333ms    -3.94%\n             Avg-Lat    365.347µs    348.595µs    -4.59%\n           GoVersion     go1.26.6     go1.26.6\n         GrpcVersion   1.86.0-dev   1.86.0-dev\n```\n\nRELEASE NOTES:\n* transport: replace linked list with ring buffer for better\nperformance."
    },
    {
      "commit": "6c0c296ea81d7215176b35921fbeb90e2928ba94",
      "tree": "f89a4f46a107139349a71ccb6a112d6bc1d2c485",
      "parents": [
        "c6db9d29163564f4cc14febd3616b671378fc8a9"
      ],
      "author": {
        "name": "Elric",
        "email": "tbnsok40@gmail.com",
        "time": "Tue Oct 06 15:10:42 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 11:40:42 2026 +0530"
      },
      "message": "xds/xdsclient: use standard unit for connected metric (#9476)\n\n- Fixes #9461\n\n### problem\n- The `grpc.xds_client.connected` metric used `{connected}` instead of\nthe standard `{bool}` unit defined by gRFC A78. Updated the unit and\nadded a test to prevent recurrence.\n\n### solution\n- Change the unit of `grpc.xds_client.connected` from `{connected}` to\n`{bool}` to match gRFC A78. The metric name, values (0/1), and labels\nremain unchanged.\n\nRELEASE NOTES: \n- TODO"
    },
    {
      "commit": "c6db9d29163564f4cc14febd3616b671378fc8a9",
      "tree": "f8093f872f375528c310c4660ff073541a2dce6c",
      "parents": [
        "c1e600d02a6d4a5109fe97c5ed38717604748584"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Tue Oct 06 09:44:07 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 09:44:07 2026 +0530"
      },
      "message": "xds: import gcp_authn filter in xds (#9471)\n\nThis PR adds a blank import for the gcp_authn http filter in the xds\npackage to register and enable the use of gcp_authn filter.\n\nRELEASE NOTES: None"
    },
    {
      "commit": "c1e600d02a6d4a5109fe97c5ed38717604748584",
      "tree": "b0a167b8cd74485934a3fc097b6b9b5b9ac4f9b3",
      "parents": [
        "de4775bffabedc6674c131d88212a510c32e1ab1"
      ],
      "author": {
        "name": "Naveed",
        "email": "naveed@bugqore.com",
        "time": "Mon Oct 05 22:20:42 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 09:50:42 2026 -0700"
      },
      "message": "xds: fix uint32 overflow scaling rds route runtime_fraction (#9308)\n\nroutesProtoToSlice scales a route\u0027s runtime_fraction to\nparts-per-million by multiplying the numerator by 10000 (HUNDRED) or 100\n(TEN_THOUSAND) in uint32. The numerator comes from the control plane, so\na value like 429497 with a HUNDRED denominator computes 429497*10000 and\nwraps around to 2704. A route meant to match every request then matches\nroughly 0.27% of them, and the rest silently fall through to a different\nroute action.\n\nPer review feedback, fractional percent handling is now centralized in a\nnew xdsresource.FractionalPercent type. NewFractionalPercent converts\nthe proto, computes the parts-per-million value in uint64, caps it at\n1000000 (100%), and rejects unsupported denominators. The five places\nthat parsed the proto themselves now use it:\n- the rds runtime_fraction path stores the precomputed PPM (fixing the\noverflow above)\n- the eds drop policy parser stores a FractionalPercent in\nOverloadDropConfig\n- clusterimpl reads the PPM directly, replacing its local\ndropRequestsPerMillion\n- the fault filter\u0027s splitPct delegates to it (with a TODO to move\nvalidation to config parsing time)\n- ext_authz\u0027s parseFilterEnabled delegates to it, replacing the\npackage-local fraction type\n\nRELEASE NOTES:\n* xds: fix a uint32 overflow when scaling a route runtime_fraction that\ncould make a route match far fewer RPCs than configured, and centralize\nFractionalPercent parsing. A route runtime_fraction or an ext_authz\nfilter_enabled with an unrecognized denominator now causes the resource\nto be NACKed.\n\n---------\n\nCo-authored-by: Easwar Swaminathan \u003ceaswars@google.com\u003e"
    },
    {
      "commit": "de4775bffabedc6674c131d88212a510c32e1ab1",
      "tree": "fb9624a2cb6460ad704d1b79e51e47081a9ae506",
      "parents": [
        "29e9293548ed6e95d593e7ce4403176548c13e77"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Thu Oct 01 10:50:33 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 10:50:33 2026 -0700"
      },
      "message": "autosharding: move some types into an internal package (#9466)\n\nThe newly introduced `sharding` package will be the one that will\ncontain the implementation of the `AutoshardingClient` eventually. This\nis required to ensure that balancer tests can be in a test only package\nand the `AutoshardingClient` can then be stubbed out.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "29e9293548ed6e95d593e7ce4403176548c13e77",
      "tree": "1dceeb50ea1a238be8174c8485282102188ea364",
      "parents": [
        "fa97e73d191aa30e7df5777e66ee242b8bc3067f"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Thu Oct 01 10:50:10 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 10:50:10 2026 -0700"
      },
      "message": "autosharding: export the type that represents the LB config (#9468)\n\nA lot of existing LB policies export the type used to represent the LB\nconfig. This makes it easier to test from other packages.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "fa97e73d191aa30e7df5777e66ee242b8bc3067f",
      "tree": "dd389815b0f53d1612c8c4e0ded090a0f433dcd5",
      "parents": [
        "a7bda149b1e2d43ae00750e6e71c5f7855cf53a2"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Thu Oct 01 10:49:43 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 10:49:43 2026 -0700"
      },
      "message": "experimental: support setting locality attribute on resolver state (#9469)\n\nThe functionality to read the locality label is required by the\nautosharding LB policy as well. Moving this to the experimental package\nalso means that `weightedroundrobin` no longer has to take a dependency\non `weightedtarget`.\n\nI ended up moving this to experimental instead of to an internal package\nto have the ability for someone to use the autosharding LB policy in a\nnon-xDS deployment and still use a locality label to perform string\nsubstitution on the autosharding_target.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "a7bda149b1e2d43ae00750e6e71c5f7855cf53a2",
      "tree": "f7fa79189c2e1eed230014f70ef3db16370e7c73",
      "parents": [
        "8056f79e87e474c169e43bdca87ede5bd15e4898"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Thu Oct 01 20:51:01 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 20:51:01 2026 +0530"
      },
      "message": "*: update dependencies for all modules (#9441)\n\nThis pr updates the dependencies for all modules. \nThis PR also changes the usages of `%q` with integers to `%d` since\nusage of `%q` with int has been disallowed and flagged since go 1.26 :\nhttps://github.com/golang/tools/commit/5be823e8041a7591b59c4f200bf05de958704df7\n\nThis also changes the usages of functions and fields of `x/net/http2`\npackage deprecated in v1.59.0 :\nhttps://pkg.go.dev/golang.org/x/net@v0.59.0/http2\n\nRELEASE NOTES:\n- Minimum supported Go version is now 1.26.\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "8056f79e87e474c169e43bdca87ede5bd15e4898",
      "tree": "bb4a1f4dee7d23bf40cdf781fc900bdc68dd4ac1",
      "parents": [
        "acea4e37da079d802b77e414ce98f4a3a670a4bd"
      ],
      "author": {
        "name": "陈志谦",
        "email": "89645338+simpleqt@users.noreply.github.com",
        "time": "Thu Oct 01 14:34:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 12:04:36 2026 +0530"
      },
      "message": "ci: bump lock-threads to v6 to fix daily lock workflow failures (#9439)"
    },
    {
      "commit": "acea4e37da079d802b77e414ce98f4a3a670a4bd",
      "tree": "a632caf25ad4b3cedf556fabdd5d844de79488b5",
      "parents": [
        "abe0c506f15de689b36b9ef7c448b0edfcdd1c0d"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Wed Sep 30 23:20:54 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 11:50:54 2026 +0530"
      },
      "message": "ringhash: add failing iteration to test error message (#9449)"
    },
    {
      "commit": "abe0c506f15de689b36b9ef7c448b0edfcdd1c0d",
      "tree": "dd4bb07238d6e3dd90319852fc2f86c7c0e4d29c",
      "parents": [
        "5f28b1dddd9a7b05f3f0ed80a530f3c0064659b0"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Wed Sep 30 10:50:34 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 10:50:34 2026 -0700"
      },
      "message": "grpc: add support for Channel Factory, as per A119 (#9448)\n\nSee section titled \"Creating a gRPC Channel to the Autosharding Service\"\nin https://github.com/grpc/proposal/pull/551.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "5f28b1dddd9a7b05f3f0ed80a530f3c0064659b0",
      "tree": "4c251aa1fff4dd38fd641b3d6c0d5e9cded6ac58",
      "parents": [
        "d3d21edb881ae2cee8a4e0d6b25a2145b6a6d8b6"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Wed Sep 30 10:39:31 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 10:39:31 2026 -0700"
      },
      "message": "autosharding: implement the picker (#9428)\n\nRELEASE NOTES: none"
    },
    {
      "commit": "d3d21edb881ae2cee8a4e0d6b25a2145b6a6d8b6",
      "tree": "95677da8ece27f701b295d6579514e0d0183f559",
      "parents": [
        "bf88ff49926161e718fcbd0640aa15263934d7bd"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Tue Sep 29 11:15:25 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 11:15:25 2026 +0530"
      },
      "message": "grpc: apply the config selector only after the LB policy is updated (#9442)\n\nPer [gRFC\nA31](https://github.com/grpc/proposal/blob/master/A31-xds-timeout-support-and-config-selector.md#implementation-for-xds-routeaction-support:~:text\u003dWhen%20new%20clusters,INTERNAL%20status%20code.),\nthe channel must update its LB policy before applying a new config\nselector, and the LB policy must synchronously provide a new picker\nbefore its update method returns. This ordering guarantees that a config\nselector never routes an RPC to a cluster unknown to the current picker.\n\nThis PR updates the channel to apply the config selector only after\n`updateClientConnState` returns. Because `updateClientConnState` blocks\nuntil the LB policy finishes processing the state update—and\n`xds_cluster_manager` produces its new picker before returning—the new\npicker is guaranteed to be in place first.\n\nThe config selector is then applied while holding `cc.mu`, and the\nupdate is skipped if the channel closed or entered idle mode while the\nlock was released. This preserves two invariants:\n- The selector reset in `Close()` remains the final write.\n- A stale update cannot overwrite the selector installed by a new\nresolver after the channel exits idle mode.\n\nConsistent with existing LB policy updates, this relies on the\n(undocumented) guarantee that resolvers do not invoke `UpdateState`\nconcurrently, as overlapping calls could still apply config selectors\nout of order.\n\nRELEASE NOTES: \n* xds: Fix a race where RPCs could fail with `UNAVAILABLE: unknown\ncluster selected for RPC` right after an xDS route configuration update\nstarted sending traffic to a new cluster."
    },
    {
      "commit": "bf88ff49926161e718fcbd0640aa15263934d7bd",
      "tree": "db99f27e2f3798d98cfaee9283b89436c37b1df2",
      "parents": [
        "acccf8cd101ae1eb33385f27e12740b3edd730f0"
      ],
      "author": {
        "name": "colinaumaty",
        "email": "colinaumaty@outlook.com",
        "time": "Mon Sep 28 18:49:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 16:19:45 2026 +0530"
      },
      "message": "opentelemetry: use strings.ReplaceAll in tracing (#9435)\n\nSigned-off-by: colinaumaty \u003ccolinaumaty@outlook.com\u003e"
    },
    {
      "commit": "acccf8cd101ae1eb33385f27e12740b3edd730f0",
      "tree": "efdb486167616765d062d84a88ea90349cd525e4",
      "parents": [
        "c0ef4986f448f9e975ab0283cf6cc1172e3c3b94"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Fri Sep 25 00:36:00 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 25 13:06:00 2026 +0530"
      },
      "message": "credentials/google: add utility to fetch ID tokens directly from Metadata Server. (#9385)"
    },
    {
      "commit": "c0ef4986f448f9e975ab0283cf6cc1172e3c3b94",
      "tree": "0473115d1d53cea33f6ace9b29ee8d3890cd3172",
      "parents": [
        "1a0d3c76f9fcc99e5c7b3440cd235ea46d819831"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Thu Sep 24 16:15:46 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 16:15:46 2026 -0700"
      },
      "message": "transport: refine server controlBuf throttling items and increase limit to 10,000 (#9433)\n\nAddresses https://github.com/grpc/grpc-go/issues/9330\n\nThis PR contains the following changes:\n- Update `controlBuf` throttling on the server to only count items\nqueued in direct response to peer control or reset frames:\n  - An incoming SETTINGS frame that results in a SETTINGS ACK\n  - An incoming PING frame that results in a PING ACK\n- Rejecting incoming streams early due to a variety of error conditions\nwith a HEADERS frame (containing the status) and possibly a RST_STREAM\nframe\n- Rejecting or refusing streams for error conditions with a RST_STREAM\n(or when the client closes the stream)\n- Incoming WINDOW_UPDATE frames that could be used as part of a flood\nattack\n- Rename `cbItem.isThrottled()` back to `isTransportResponseFrame()` to\nreflect this distinction.\n- Increase the default\n`GRPC_GO_EXPERIMENTAL_CONTROL_BUFFER_THROTTLE_LIMIT` from 100 to 10,000\n(with a maximum of 100,000) so legitimate high-concurrency workloads do\nnot trigger server reader throttling while still bounding memory against\npeer initiated control frames and Rapid Reset floods.\n\nRELEASE NOTES:\n* transport: Refine server control buffer throttling to only count\npeer-induced control and reset frames, and increase the default\n`GRPC_GO_EXPERIMENTAL_CONTROL_BUFFER_THROTTLE_LIMIT` from 100 to 10,000."
    },
    {
      "commit": "1a0d3c76f9fcc99e5c7b3440cd235ea46d819831",
      "tree": "4bd2fab6da33256b3eabd7d4c7b82c7c8fc57db8",
      "parents": [
        "f3ec8bba99346896c50ad109ba7d3bd3a5a39fec"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Thu Sep 24 16:15:10 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 16:15:10 2026 -0700"
      },
      "message": "xds: handle RPC commit in the resolver\u0027s interceptorList (#9424)\n\nThis PR is part of a multi-PR change aimed to support call options like\nHeader, Trailer etc where the result can be mutated by an xDS HTTP\nfilter.\n\nThis PR specifically does the following:\n* Removes the `RPCConfig.OnCommitted` callback and the resulting xDS\nspecific code sprinkled in `stream.go`\n* Changes the xDS configSelector to add the `onCommit` callback as a\ncontext value, that is pulled out by the `interceptorList` and invoked\nwhen the commit is detected or the RPC completes\n* Implement the `ClientStream` interface in streams returned by the\n`interceptorList`. This wrapped stream contains the `onCommit` callback\nand invokes it at the appropriate time\n\nRELEASE NOTES: none"
    },
    {
      "commit": "f3ec8bba99346896c50ad109ba7d3bd3a5a39fec",
      "tree": "c139a7dc8bd754203f84892d4349dbb02b20f407",
      "parents": [
        "609c383fe92620f049092e6a00548219a14c44f2"
      ],
      "author": {
        "name": "Naveed",
        "email": "naveed@bugqore.com",
        "time": "Fri Sep 25 02:37:15 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 14:07:15 2026 -0700"
      },
      "message": "xds: match virtual host domains case-insensitively (#9399)\n\nThe xDS virtual host matcher compared a RouteConfiguration domain\nagainst the request :authority with case-sensitive equality, prefix, and\nsuffix checks. Host names are case-insensitive and the :authority is\nchosen by the peer, so a mixed-case authority like FOO.BAR.COM never\nmatched a domain configured as foo.bar.com. On the server data plane the\nrequest then fell through to a broader domain such as \"*\", which can\ncarry weaker route or RBAC policy than the specific virtual host it\nshould have selected.\n\nThe domain matching logic was also duplicated between the xDS client\n(internal/xds/xdsclient/xdsresource/matcher.go) and the server\n(internal/xds/server/routing.go). This change consolidates it into a\nsingle exported xdsresource.FindBestMatchingVirtualHostIndex, which\nreturns the index of the best matching virtual host and folds the\nauthority to lower case once at entry. The xDS dependency manager uses\nthe index to pick the virtual host from the update. The server keeps the\nupdate\u0027s virtual hosts on usableRouteConfiguration alongside the\ninterceptor-carrying copies and indexes into those with the result, so\nthe per-RPC path does no allocation. Virtual host domains are folded to\nlower case once when the RouteConfiguration is unmarshaled, covering\nboth RDS and inline route configs from LDS, so the matcher itself no\nlonger touches case.\n\nRELEASE NOTES:\n* xds: match virtual host domains against the request authority\ncase-insensitively"
    },
    {
      "commit": "609c383fe92620f049092e6a00548219a14c44f2",
      "tree": "fbfb65ddf196c7ec98e204b8838d4074c5264ec1",
      "parents": [
        "784c8f2b54e847ab1cb5b58fd26f85560cb6f40b"
      ],
      "author": {
        "name": "Naveed",
        "email": "naveed@bugqore.com",
        "time": "Fri Sep 25 02:21:17 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 13:51:17 2026 -0700"
      },
      "message": "balancer/ringhash: fix uint32 weight sum overflow in normalizeWeights (#9357)\n\n`normalizeWeights` sums endpoint weights into a `uint32`, so a total\nabove `math.MaxUint32` wraps and can land on zero. The `weight /\nweightSum` divide then yields `+Inf`, `newRing` sets `targetHashes` to\n`+Inf`, and its `for currentHashes \u003c targetHashes` loop never ends,\ngrowing the ring until the process is out of memory. Summing in `uint64`\ncannot wrap and stays non-zero, since every endpoint weight is at least\n1.\n\nRELEASE NOTES: \n- balancer/ringhash: Fix a bug where the sum of endpoint weights\nexceeding `math.MaxUint32` overflows by accumulating weights in a\nuint64."
    },
    {
      "commit": "784c8f2b54e847ab1cb5b58fd26f85560cb6f40b",
      "tree": "516aa82162dc8f92e4170364fce6a0ea55da492e",
      "parents": [
        "b6948c4b8d59be821d84b263b97f2ab05ab04aaa"
      ],
      "author": {
        "name": "Kartavya sonar",
        "email": "117206024+Kartavyasonar@users.noreply.github.com",
        "time": "Fri Sep 25 01:34:06 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 13:04:06 2026 -0700"
      },
      "message": "roundrobin: standardize and V(2)-gate log messages (#9419)\n\nBrings round_robin in line with the logging checklist from #5535 and the\nweightedroundrobin reference implementation (#8824).\n\nPart of #5535\n\nRELEASE NOTES: none\n\n---------\n\nSigned-off-by: Kartavyasonar \u003csonarkartavya@gmail.com\u003e"
    },
    {
      "commit": "b6948c4b8d59be821d84b263b97f2ab05ab04aaa",
      "tree": "dffcc50ff84d07083fdbd5509e29c22b8eb6c58d",
      "parents": [
        "1274845c21b3165ea1887675daadc0eacbda7224"
      ],
      "author": {
        "name": "Ran",
        "email": "ran-su@users.noreply.github.com",
        "time": "Thu Sep 24 13:02:27 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 13:02:27 2026 -0700"
      },
      "message": "xds: add internal accessor for the underlying gRPC server (#9422)\n\nAdd internal/xds/server.GetGRPCServer for integrations that require the\nconcrete *grpc.Server wrapped by xds.GRPCServer.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "1274845c21b3165ea1887675daadc0eacbda7224",
      "tree": "92a69c13b5fcecc1f0d676b57246a6e5f1c8af6d",
      "parents": [
        "55e0770cd84f22064680fec61b1758ef90079cd6"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Thu Sep 24 17:27:37 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 17:27:37 2026 +0530"
      },
      "message": "Change version to 1.86.0-dev (#9437)\n\nRELEASE NOTES: None"
    },
    {
      "commit": "55e0770cd84f22064680fec61b1758ef90079cd6",
      "tree": "7cdac973ce32bb14c09c735a4b3d2e000c45a9e3",
      "parents": [
        "1648161c2f6c1fbbaaa579e8320630abd4656bb3"
      ],
      "author": {
        "name": "Abhinav Kumar",
        "email": "abhinavkmr@google.com",
        "time": "Thu Sep 24 11:23:00 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 15:53:00 2026 +0530"
      },
      "message": "pemfile: Avoid redundant root certificate parsing and memory allocations when root cert file is unchanged (#9425)"
    },
    {
      "commit": "1648161c2f6c1fbbaaa579e8320630abd4656bb3",
      "tree": "12f406607ee6621229c9b136600a335a1544641b",
      "parents": [
        "1863b598b62e623f8d58305da7b068d8fee32d7b"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Wed Sep 23 23:17:01 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 23:17:01 2026 -0700"
      },
      "message": "transport: stop read throttling due to controlBuf size, on the client (#9431)\n\nAddresses: https://github.com/grpc/grpc-go/issues/9330\n\nThere is no good reason to throttle reads on the client based on the\nnumber of items in the `controlBuf`.\n\nRELEASE NOTES:\n- transport: Stop throttling reads on the client based on the number of\nqueued control frames. Previously, this lead to a deadlock because the\nserver can also throttle reads, and when this happens, neither side can\nmake progress."
    },
    {
      "commit": "1863b598b62e623f8d58305da7b068d8fee32d7b",
      "tree": "693b99a1f06cea18729e713b814256042ef63862",
      "parents": [
        "d331f110832063845e0ec79482b338e86f195661"
      ],
      "author": {
        "name": "Jason Lunn",
        "email": "jason.lunn@gmail.com",
        "time": "Wed Sep 23 08:52:17 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 18:22:17 2026 +0530"
      },
      "message": "protoc-gen-go-grpc: Update supported Edition to 2026 (#9426)"
    },
    {
      "commit": "d331f110832063845e0ec79482b338e86f195661",
      "tree": "1278fe5ba9c08717d9ffd3379631bc9e8f9b3b11",
      "parents": [
        "d41d9b3a4dccfb454279bc39f4e1110d7769106d"
      ],
      "author": {
        "name": "Stan Hu",
        "email": "stanhu@gmail.com",
        "time": "Mon Sep 21 20:19:38 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 08:49:38 2026 +0530"
      },
      "message": "server: release mutex while waiting for handlers in stop() (#9394)\n\nFixes #9393\n\n`Stop()` deadlocks when called after `GracefulStop()` while a handler is\nstill running.\n\n#### Root cause\n\nBoth `Stop()` and `GracefulStop()` call `stop()`, which acquires `s.mu`\nand holds it for the entire function, including across\n`s.handlersWG.Wait()`. If a handler ignores context cancellation,\n`GracefulStop()` blocks in that wait while still holding `s.mu`. A\nconcurrent `Stop()` (the documented way to abort a `GracefulStop()` that\nis taking too long) then blocks forever on `s.mu.Lock()` and can never\nforce the server to shut down.\n\n#### Fix\n\nRelease `s.mu` around `s.handlersWG.Wait()` and reacquire it afterwards,\nmirroring the connection-drain loop that already releases the lock via\n`s.cv.Wait()`.\n\nThis is safe because none of the state guarded by `s.mu` is accessed\nduring the wait: by that point listeners are closed, all transports are\ndrained/closed, `s.conns` is `nil`, and the worker channel is closed.\n`handlersWG.Wait()` only touches the `WaitGroup`, which has its own\nsynchronization and was never guarded by `s.mu`. A concurrent `Stop()`\ncan now acquire the lock and return promptly.\n\n#### Testing\n\nAdded `TestStopAfterGracefulStopWithRunningHandler`, which starts a\nhandler that ignores context cancellation, closes the client connection\nso the transport drains, runs `GracefulStop()` in a goroutine, and\nasserts that a subsequent `Stop()` returns promptly. Verified the test\ntimes out (deadlocks) without the fix and passes with it.\n\n\n\nRELEASE NOTES:\n* server: fix deadlock where `Stop()` blocks indefinitely when called\nconcurrently with an in-progress `GracefulStop()` waiting on a handler\nthat does not return promptly"
    },
    {
      "commit": "d41d9b3a4dccfb454279bc39f4e1110d7769106d",
      "tree": "16fa36a54e314ed50a72658a3959ee088008acc4",
      "parents": [
        "059a3022db217da742d0689ebfcbaf9c6f4ed74d"
      ],
      "author": {
        "name": "Foster Lockwood",
        "email": "Foslock@gmail.com",
        "time": "Mon Sep 21 19:55:12 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 08:25:12 2026 +0530"
      },
      "message": "server: Remove service from updates if no streams remain [leakfix] (#9411)\n\n## The bug\n\n`health/server.go` (v1.73.0, lines 107-111):\n\n```go\ndefer func() {\n    [s.mu](http://s.mu/).Lock()\n    delete(s.updates[service], stream)\n    [s.mu](http://s.mu/).Unlock()\n}()\n```\nCurrently we accept a service name and unconditionally add it as a key\nto an in memory nested map (that is maintained for the lifetime of the\nprocess). Upon receiving an unauthenticated watch request, we\nimmediately add that hitherto unvalidated service name into the map.\nUpon disconnection, we remove the stream objects from the inner map, but\nfail to remove the keys from the outer map, leaving behind those\nunvalidated strings as keys in the outer map for the lifetime of the\nprocess..\n\nPotential impact:\nUnauthenticated users can leave behind very large strings that the\nprocess will maintain references to until the process restarts. The\nstrings can be up to 4 MiB in size per request, leading to very rapid\nmemory exhaustion of the service in the event of an attack from a\nmalicious actor.\n\n## Fix\n\nDelete the inner map when it empties, in the cleanup that already holds\nthe\nlock:\n\n```go\ndefer func() {\n    [s.mu](http://s.mu/).Lock()\n    delete(s.updates[service], stream)\n    if len(s.updates[service]) \u003d\u003d 0 {\n        delete(s.updates, service)\n    }\n    [s.mu](http://s.mu/).Unlock()\n}()\n```\n\nVerified against a patched v1.73.0: the same 200 cycles end at\n`services\u003d0`\nwith ~4 MiB of growth, down from 200 and 208.4 MiB.\n\nRELEASE NOTES:\n* `health/server.go`: Address resource leak, remove service entry in map\nwhen empty."
    },
    {
      "commit": "059a3022db217da742d0689ebfcbaf9c6f4ed74d",
      "tree": "0b42fb0854aa7b98c030ef9848eaf80e4c3b8643",
      "parents": [
        "9f639818165ad2fe91a8fb9c62b4ab403ea2b05f"
      ],
      "author": {
        "name": "Madhav Bissa",
        "email": "48023579+mbissa@users.noreply.github.com",
        "time": "Mon Sep 21 11:56:57 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 11:56:57 2026 +0530"
      },
      "message": "xds/internal : Fix Connected metric test (#9181)"
    },
    {
      "commit": "9f639818165ad2fe91a8fb9c62b4ab403ea2b05f",
      "tree": "53fa9d05b55773561b2c467644da3e7324d23c7c",
      "parents": [
        "dd51b1c90aaf9b7ee0b07b1d14fa8e3a89132bef"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Sat Sep 19 08:04:47 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 19 20:34:47 2026 +0530"
      },
      "message": "transport: update maxStreamID on truncated HEADERS frame (#9414)"
    },
    {
      "commit": "dd51b1c90aaf9b7ee0b07b1d14fa8e3a89132bef",
      "tree": "5c7e88e8c0b773fe7549a90b8a5cb30c111ae158",
      "parents": [
        "4e49413dcab793ba19d466636d0535674928747a"
      ],
      "author": {
        "name": "Marcin Swierczek",
        "email": "mswierczek@google.com",
        "time": "Thu Sep 17 22:58:54 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 15:58:54 2026 -0700"
      },
      "message": "A75: Implement the new LB policy topology for the non-aggregate cluster (#9234)\n\nImplements\n[A75](https://github.com/grpc/proposal/blob/master/A75-xds-aggregate-cluster-behavior-fixes.md)\nfor the non-aggregate cluster.\n\nThis change implements the new LB policy topology for the non-aggregate\nclusters only, the aggregate cluster uses the legacy approach.\nRefactoring of the new topology for the aggregate cluster case will be\ndelivered in a follow-up PR. This change does not break non-aggregate to\naggregate (and vice versa) switch.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "4e49413dcab793ba19d466636d0535674928747a",
      "tree": "1b24cc70f82f798789b27def206c0629efe58df0",
      "parents": [
        "4335852005e0b3e3d08ae6afed30ef71307e6b6d"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Tue Sep 15 11:39:14 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 00:09:14 2026 +0530"
      },
      "message": "authz: prevent cache poisoning on file watcher reload failures (#9413)"
    },
    {
      "commit": "4335852005e0b3e3d08ae6afed30ef71307e6b6d",
      "tree": "9b32fbaa4f4655f94f5de4910ac7b0bd148ef5c0",
      "parents": [
        "cd137b27ec86a6c21a8a6df71ca0cb22786f0e4b"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Tue Sep 15 11:39:00 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 00:09:00 2026 +0530"
      },
      "message": "transport: fix data race on `bdpEstimator.sentAt`. (#9415)"
    },
    {
      "commit": "cd137b27ec86a6c21a8a6df71ca0cb22786f0e4b",
      "tree": "13a625fa0229370186aadee510b29c8b0a3295ab",
      "parents": [
        "40ef73b45d196b1fccae2c23a4f42a46635663b8"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Tue Sep 15 10:48:26 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 10:48:26 2026 -0700"
      },
      "message": "grpc: simplify invoke() by sharing code with streaming RPCs (#9417)\n\nThis PR is part of a multi-PR change aimed to support call options like\nHeader, Trailer etc where the result can be mutated by an xDS HTTP\nfilter.\n\nThis PR specifically does the following:\n- Gets rid of the `defaultStreamInterceptor` function and stops chaining\na default interceptor to all streaming RPCs\n- Instead it creates a `clientStreamWrapper` from `newClientStream` and\nthereby ensures that this functionality can be shared between unary and\nstreaming RPCs\n- Simplifies the implementation of `invoke()` in call.go\n\nNo tests are being added since no new functionality is being added and\nthis is simply a refactor.\n\nIn the following PR, I will add functionality to change the `after`\nmethod in the `CallOption` interface to work with `ClientStream` instead\nof `csAttempt`.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "40ef73b45d196b1fccae2c23a4f42a46635663b8",
      "tree": "e7937d60195ffc547885022452eb46a04b153d02",
      "parents": [
        "e4711283ae08b8ec0fb7378c0ff58a130c366bcd"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Tue Sep 15 06:51:51 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 19:21:51 2026 +0530"
      },
      "message": "binarylog: omit the \"authorization\" header from logged metadata (#9412)"
    },
    {
      "commit": "e4711283ae08b8ec0fb7378c0ff58a130c366bcd",
      "tree": "4e2b4e9170493c8ea298e2e614c024707486d466",
      "parents": [
        "3b0f7581196fcc9f1ac745040455d1e1627a652a"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Fri Sep 11 13:03:00 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 13:03:00 2026 +0530"
      },
      "message": "transport : cancel ctx after swapping the state in server\u0027s cancelStream and finishStream (#9382)\n\nFixes: https://github.com/grpc/grpc-go/issues/5344\n\nRace condition :\nIn\n[http2Server.closeStream](https://github.com/grpc/grpc-go/blob/4793ad0474669eafbd5346c8a3d098fdfa542498/internal/transport/http2_server.go#L1355),\ns.cancel() was invoked before s.swapState(streamDone) and\n[deleteStream](https://github.com/grpc/grpc-go/blob/master/internal/transport/http2_server.go#L1310).\n\n\nFix :\nReordered operations in\n[http2Server.closeStream](https://github.com/grpc/grpc-go/blob/master/internal/transport/http2_server.go#L1355)\nso that s.cancel() is called after s.swapState(streamDone) and\nt.deleteStream(s, eosReceived).\n\nRELEASE NOTES: None"
    },
    {
      "commit": "3b0f7581196fcc9f1ac745040455d1e1627a652a",
      "tree": "3b238db0110f69026dd5f9389f5c2fdc716ec8e1",
      "parents": [
        "2fbc8839f646417cb39e4e58cfe3d94dec68ac38"
      ],
      "author": {
        "name": "Marcin Swierczek",
        "email": "mswierczek@google.com",
        "time": "Thu Sep 10 21:46:04 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 14:46:04 2026 -0700"
      },
      "message": "A75: Add missing E2E test cases for xDS aggregate cluster (#9278)\n\nAdd end-to-end test cases for xDS aggregate clusters:\n\n1. **LRS Load Reporting (`TestAggregateCluster_LRS`)**: Verifies that\nwhen an aggregate cluster (`Root -\u003e [PrimaryEDS, SecondaryEDS]`) has LRS\nenabled on both leaf clusters, load is initially reported only for the\nprimary cluster, and dynamically shifts to the secondary cluster upon\nprimary failover.\n2. **Telemetry Labels (`TestTelemetryLabels_AggregateCluster`)**:\nVerifies that CSM telemetry labels from CDS cluster metadata reflect the\nactive leaf cluster receiving traffic and switch to the secondary\ncluster\u0027s labels when failing over.\n\nThis PR is part of\n[A75](https://github.com/grpc/proposal/blob/master/A75-xds-aggregate-cluster-behavior-fixes.md)\nimplementation. However, these test cases work for both the legacy and\nnew LB policy tree.\n\nRELEASE NOTES: n/a\n\n---------\n\nCo-authored-by: Easwar Swaminathan \u003ceaswars@google.com\u003e"
    },
    {
      "commit": "2fbc8839f646417cb39e4e58cfe3d94dec68ac38",
      "tree": "222ab7ebd1aac731a5f35b3f0bc7799926c8a137",
      "parents": [
        "d2c52f09240164947994c73e544b697a878cee3c"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Thu Sep 10 11:04:37 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 11:04:37 2026 -0700"
      },
      "message": "grpc: place defaultStreamInterceptor after user interceptors (#9404)\n\nThe `defaultStreamInterceptor` was introduced in #9226.\n\nThis change places the `defaultStreamInterceptor` which performs certain\ncommon logic for all non-unary RPCs to live after the user interceptors\nand before the xDS filters. This ensures that the work of the\n`defaultStreamInterceptor` stays invisible to the user interceptors.\nSpecifically, it calls `RecvMsg` twice for non server-streaming RPCs and\ncalls `CloseSend` after sending the only message for non\nclient-streaming RPCs.\n\nRELEASE NOTES: none\n\n---------\n\nCo-authored-by: eshitachandwani \u003cemchandwani@google.com\u003e"
    },
    {
      "commit": "d2c52f09240164947994c73e544b697a878cee3c",
      "tree": "c9ccf8092e15805194cf8a2a4efdc7ce3df7ce78",
      "parents": [
        "a9cbf17a2ad108cdaded0d1f37d35098733ee462"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Wed Sep 09 14:07:03 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 14:07:03 2026 +0530"
      },
      "message": "transport: fix server Recv hang on initial HEADERS with EndStream (#9391)\n\nFix server-side Recv hang when client sends HEADERS with EndStream set.\n\nWhen a client initiates a stream with a HEADERS frame that has\nEndStream\u003dtrue, the server-side stream state is set to streamReadDone,\nbut the reader was not notified. This caused server-side Recv() calls to\nhang indefinitely waiting for data.\n\nThis change writes an io.EOF error to the stream\u0027s receive buffer when\nthe stream is created with EndStream\u003dtrue, ensuring Recv() returns\nimmediately with io.EOF. A new transport test has been added to verify\nthis behavior, and existing tests have been updated.\n\nRELEASE NOTES:\n* transport: fix an issue where server-side `Recv()` hung indefinitely\nwhen a client initiated a stream with `HEADERS` having `EndStream` set."
    },
    {
      "commit": "a9cbf17a2ad108cdaded0d1f37d35098733ee462",
      "tree": "f0b6d0ffda0a9dabc98db7d31911953819e6d19b",
      "parents": [
        "c313caa31ab23e7b7604873fe5a138037a736976"
      ],
      "author": {
        "name": "Leonid Bugaev",
        "email": "leonsbox@gmail.com",
        "time": "Wed Sep 09 09:42:10 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 23:42:10 2026 -0700"
      },
      "message": "transport: return unexpected EOF for partial reads (#9204)\n\nFixes #9200\n\nTrack cumulative bytes read while filling a gRPC message header or body.\nIf EOF occurs after any partial progress, return `io.ErrUnexpectedEOF`\neven when the final read call itself returned zero bytes. Preserve plain\n`io.EOF` when EOF occurs before any data is read.\n\nRegression tests split partial headers and bodies from EOF across\nseparate receive-buffer messages. They verify that partial reads return\n`io.ErrUnexpectedEOF` while zero-progress reads retain `io.EOF`.\n\nRELEASE NOTES:\n* transport: Truncated gRPC message headers and bodies now return\n`io.ErrUnexpectedEOF` after partial data is received."
    },
    {
      "commit": "c313caa31ab23e7b7604873fe5a138037a736976",
      "tree": "5b388f994d688e8655c523cb5d85b72a9ffeba03",
      "parents": [
        "b17fe3740d95adbd2926c5857d234361ae5d8b32"
      ],
      "author": {
        "name": "Lazizbek Ergashev",
        "email": "lazerg2@gmail.com",
        "time": "Wed Sep 09 11:37:09 2026 +0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 23:37:09 2026 -0700"
      },
      "message": "advancedtls: apply client defaults before version check (#9403)\n\nFixes #9402\n\nPrior to this change, creating an Options like\n\n    tlsOpts :\u003d \u0026advancedtls.Options{\nIdentityOptions:\nadvancedtls.IdentityCertificateOptions{IdentityProvider: certProvider},\n        // Note: Only MinTLSVersion is set, not MaxTLSVersion\n        MinTLSVersion: tls.VersionTLS13,\n    }\n\nand passing it to NewClientCreds fails with:\n\n    the minimum TLS version is larger than the maximum TLS version\n\nThe Options docs say MaxTLSVersion defaults to TLS 1.3, but on the\nclient side the default was applied after the MinTLSVersion \u003e\nMaxTLSVersion check, so an unset MaxTLSVersion was still zero at that\npoint. The defaults are now applied first, the same way #8684 fixed\nserverConfig.\n\nRELEASE NOTES:\n* advancedtls: Fix `NewClientCreds` failing with \"the minimum TLS\nversion is larger than the maximum TLS version\" when `MinTLSVersion` is\nset without `MaxTLSVersion`."
    },
    {
      "commit": "b17fe3740d95adbd2926c5857d234361ae5d8b32",
      "tree": "b854f974b63ccdb225d4288508b852be9d6e5150",
      "parents": [
        "5c58ceeebbbdc29766f884a7ec1f88ba39c0e0dd"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Tue Sep 08 23:30:46 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 23:30:46 2026 -0700"
      },
      "message": "autosharding: implement the sliceMap (#9380)\n\nThis PR only contains the implementation of the `sliceMap`. My plan is\nto make a few small PRs initially with things that can be separated out,\nbefore a bigger PR that contains the rest of the implementation of the\nLB policy. The implementation of the `sliceMap` follows the spec very\nclosely, so should be reviewable even without the rest of the changes.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "5c58ceeebbbdc29766f884a7ec1f88ba39c0e0dd",
      "tree": "2275f9e2ff1a8df425c6efefc28efc6d7775fdc9",
      "parents": [
        "298389d61dd6f3071da1fa34d2fdf3f726d4aa36"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Tue Sep 08 14:22:08 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 14:22:08 2026 +0530"
      },
      "message": "grpc: remove unused callInfo field (#9397)\n\nRemove unused \"on RPC commit\" callbacks from `callInfo`. Callers of\n`OnFinish` call option type-assert and invoke the closure directly.\n\nRELEASE NOTES: N/A"
    },
    {
      "commit": "298389d61dd6f3071da1fa34d2fdf3f726d4aa36",
      "tree": "f5f25d24cbac9d76cc00eace413dd67edc7063ea",
      "parents": [
        "2cb3789fccf481c7126e3a62074ca2a4e66dbe96"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Fri Sep 04 13:48:15 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 13:48:15 2026 +0530"
      },
      "message": "Revert \"grpc: change existing dial/server options that set initial window size to not disable BDP estimation\" (#9392)\n\nThis PR reverts #9078 \nSince #9078 had a behaviour change where the behaviour of dialOption\n`grpc.WIthInitialWindowSize` and `grpc.WithInitialConnWindowSize` and\nserver option `grpc.InitialWindowSize` and `grpc.InitialConnWIndowSize`\nchanged to enable bdp by default , it is breaking the internal users of\nthese options and blocking import. We will first change the callers\ninternally in g3 and then make this change.\n\nRELEASE NOTES: None"
    },
    {
      "commit": "2cb3789fccf481c7126e3a62074ca2a4e66dbe96",
      "tree": "6f285eb64f396ce705432ea3e78c7f7ea047f60e",
      "parents": [
        "9f8027448a64b6446d0c7256a1efe907b1cb6b1b"
      ],
      "author": {
        "name": "Pranjali-2501",
        "email": "87357388+Pranjali-2501@users.noreply.github.com",
        "time": "Thu Sep 03 02:06:27 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 14:36:27 2026 +0530"
      },
      "message": "xds: add unified API for server-side HTTP filter interceptors. (#9351)"
    },
    {
      "commit": "9f8027448a64b6446d0c7256a1efe907b1cb6b1b",
      "tree": "28267abf4a82d04d574c1df4f113e77f68b1751f",
      "parents": [
        "91f43d64ba38fa25111f9198192baa93dadbb4fb"
      ],
      "author": {
        "name": "Madan kumar",
        "email": "winklemad@outlook.com",
        "time": "Tue Sep 01 12:30:07 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 00:00:07 2026 -0700"
      },
      "message": "xds: lowercase RDS route header matcher names before matching (#9353)\n\nFixes #9352\n\nxDS RDS route header matchers store the header name verbatim from the\nconfig in `routesProtoToSlice`:\n\n```go\nheader.Name \u003d h.GetName()\n```\n\nThe matcher engine looks that name up against `metadata.MD`, whose keys\nare always lowercase, so a matcher configured with a mixed-case name\nsuch as `X-Role` matches no header and the route never fires.\n\nThis is the last consumer of that matcher engine that does not normalize\nthe name. The RBAC HTTP filter started lowercasing it at parse time in\n#9332 (`normalizeHeaderMatcher`), and `authz/rbac_translator.go` does\nthe same on the non-xDS path. Envoy stores `HeaderMatcher.name` in a\n`Http::LowerCaseString`, so this is valid config that works on other\nproxies.\n\nThe fix lowercases the name where the route header matcher is built,\nmatching the sibling paths. Added a table test covering a mixed-case\nname against lowercased metadata, and asserting the parsed matcher\nstores the lowercased name; it fails on `master` and passes with the\nchange.\n\nRELEASE NOTES:\n* xds: fix RDS route header matchers with non-lowercase names never\nmatching"
    },
    {
      "commit": "91f43d64ba38fa25111f9198192baa93dadbb4fb",
      "tree": "c687b26a0a0717645a598bfc28f48a45d64ae80c",
      "parents": [
        "6d697e4b65eb0dcfaf326b5b1fcdc66913872442"
      ],
      "author": {
        "name": "Sushan Bhattarai",
        "email": "susan.bhattarai@bison.howard.edu",
        "time": "Mon Aug 31 14:48:24 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 00:18:24 2026 +0530"
      },
      "message": "xds/resolver: drop field references on Close to prevent retention across ClientConn recycle (#9301)\n\nRetention is via multiple field references off `*xdsResolver` that\nsurvive `Close`:\n\n- `r.cc` → the `ClientConn`, whose `ServiceConfig` still transitively\nreferences the resolver\n- `r.curConfigSelector` → captured by the `ClientConn`\u0027s `ServiceConfig`\nvia `UpdateState`\n- `r.dm` / `r.xdsClient` → watcher metadata held by the shared\n`xdsclient.DefaultPool` singleton, which survives every ClientConn\nlifetime\n\nIndividually each field is a benign back-reference; together they form\nmultiple independent retention chains through externally-anchored state.\nGo\u0027s tracing GC handles cycles fine, but these aren\u0027t cycles — they\u0027re\nchains rooted at package-global state (the shared xdsClient pool) and\nother ClientConns that stay alive.\n\nExplicitly dropping the field references at the end of `Close` leaves\nthe resolver struct with no outbound edges. The entire per-channel\nresolver + CDS balancer subtree (roughly 40 `CallbackSerializer`s,\nJSON-parsed service configs, `attributes.Attributes` chains, cloned\n`[]resolver.Address` slices per channel) becomes GC-collectible.\n\n\n\nRELEASE NOTES: None\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "6d697e4b65eb0dcfaf326b5b1fcdc66913872442",
      "tree": "413d884d4f86895f7614fa2d6baa9034e6f337a4",
      "parents": [
        "d3c47cc677f4128636dcdd2944cf61aa5a9332db"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Thu Aug 27 18:46:15 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 18:46:15 2026 +0530"
      },
      "message": "extproc : implement flow control for A93 (#9343)\n\nThis PR implements flow control for ext proc filter. THis PR also has\nversion change for `envoyproxy/go-control-plane/envoy` since the new\nflow control protocol changes are in master and not in ay release.\n\n#ext-proc-a93\n\nRELEASE NOTES: None"
    },
    {
      "commit": "d3c47cc677f4128636dcdd2944cf61aa5a9332db",
      "tree": "430c7dc82cd5e02113588b2e99ce5927a1adb77b",
      "parents": [
        "664e87d82d845735702de6ab41f6ab3fe7550674"
      ],
      "author": {
        "name": "Madhav Bissa",
        "email": "48023579+mbissa@users.noreply.github.com",
        "time": "Thu Aug 27 17:09:40 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 17:09:40 2026 +0530"
      },
      "message": "xds: Implement GrpcService parsing and shared side channels (gRFC A102) (#9319)\n\nImplements gRFC [A102](https://github.com/grpc/proposal/pull/510)\n`GrpcService` support, wired into ext_proc as the first consumer.\n\nRELEASE NOTES: \n* xds: Implement GrpcService parsing and shared side channels (gRFC\nA102)"
    },
    {
      "commit": "664e87d82d845735702de6ab41f6ab3fe7550674",
      "tree": "9109c488b62993d9a1d88c648be06a9e75708b5e",
      "parents": [
        "31ccdcc05efbe86f7b4ce80fedcb02adf23c83e8"
      ],
      "author": {
        "name": "Gido ten Cate",
        "email": "engida96@gmail.com",
        "time": "Thu Aug 27 06:11:48 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 09:41:48 2026 +0530"
      },
      "message": "stream: group bool fields at tail of csAttempt to reduce allocator size class 240B→224B (#9359)"
    },
    {
      "commit": "31ccdcc05efbe86f7b4ce80fedcb02adf23c83e8",
      "tree": "c16b75637b1b29949a6f2d39e6154f8272304fa4",
      "parents": [
        "eff9d6fe9f3b07d7d784f9cd401165fdeea3eb57"
      ],
      "author": {
        "name": "Gido ten Cate",
        "email": "engida96@gmail.com",
        "time": "Thu Aug 27 06:09:48 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 09:39:48 2026 +0530"
      },
      "message": "stream: group bool fields at tail of serverStream to eliminate false sharing with mu (#9361)"
    },
    {
      "commit": "eff9d6fe9f3b07d7d784f9cd401165fdeea3eb57",
      "tree": "afa31cafbf24c2689edb48ec43bf5f6f4ead2cd2",
      "parents": [
        "93e31b48545e2a8aaeb6e06b47fb249f94e6297f"
      ],
      "author": {
        "name": "Gido ten Cate",
        "email": "engida96@gmail.com",
        "time": "Thu Aug 27 00:06:12 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 15:06:12 2026 -0700"
      },
      "message": "stream: group bool fields at tail of addrConnStream to reduce allocator size class 256B→240B (#9360)\n\nReorder \\`addrConnStream\\` fields so all 4 bool fields are grouped at\nthe tail of the struct, and move \\`mu\\` to a separate cache line from\nthe tail bools.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "93e31b48545e2a8aaeb6e06b47fb249f94e6297f",
      "tree": "408892c0152b085981dd46f6d664ee47566acd05",
      "parents": [
        "9d1988d75f2167ef8dce5bd4defbc5968af568e3"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Tue Aug 25 12:55:37 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 12:55:37 2026 +0530"
      },
      "message": "transport: reject requests missing :authority and host headers (#9365)\n\nFixes : https://github.com/grpc/grpc-go/issues/9354\n\nThis PR updates the HTTP/2 transport layer to reject requests missing\nboth :authority and Host headers early. Also adds a defensive check in\nxds server to ensure authority header is present.\n\nRELEASE NOTES: \n- server: Reject requests missing both `:authority` and `Host` headers\nwith HTTP 400 and status `Internal`\n\n---------\n\nCo-authored-by: Madan Kumar \u003cwinklemad@outlook.com\u003e"
    },
    {
      "commit": "9d1988d75f2167ef8dce5bd4defbc5968af568e3",
      "tree": "501e4e2bacfec85e29dd27a1a152dc12ac7a6dd5",
      "parents": [
        "cecd55ad52bfde159478d230fad57f5c7d666f31"
      ],
      "author": {
        "name": "Gido ten Cate",
        "email": "engida96@gmail.com",
        "time": "Mon Aug 24 17:28:08 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 20:58:08 2026 +0530"
      },
      "message": "stream: group bool fields at tail of clientStream to reduce allocator size class 288B→256B (#9281)"
    },
    {
      "commit": "cecd55ad52bfde159478d230fad57f5c7d666f31",
      "tree": "a54d850d76975329c51b9ab27d7113b758b44891",
      "parents": [
        "abf0c53de82e6eb3148a98dc91ecfec278e53b23"
      ],
      "author": {
        "name": "Aryan Singh K.",
        "email": "70511529+aryansk@users.noreply.github.com",
        "time": "Mon Aug 24 20:56:43 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 20:56:43 2026 +0530"
      },
      "message": "stats: expose client authority in OutHeader (#9296)"
    },
    {
      "commit": "abf0c53de82e6eb3148a98dc91ecfec278e53b23",
      "tree": "84a6def0e3c9e59babe8743efc74fbc706e7e9df",
      "parents": [
        "4793ad0474669eafbd5346c8a3d098fdfa542498"
      ],
      "author": {
        "name": "Ran",
        "email": "ran-su@users.noreply.github.com",
        "time": "Mon Aug 24 03:43:32 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 16:13:32 2026 +0530"
      },
      "message": "xds: add internal ResourceNameFunc server option (#9288)\n\nAdds an internal `ResourceNameFunc` server option that allows override\nthe LDS listener resource name.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "4793ad0474669eafbd5346c8a3d098fdfa542498",
      "tree": "76aea2c9f409049e87efb1401c6b4c20b1775e70",
      "parents": [
        "3284af7e654993f7b9de31996ebc8fa81e375d8a"
      ],
      "author": {
        "name": "Nilesh Patil",
        "email": "128893479+nileshpatil6@users.noreply.github.com",
        "time": "Sat Aug 22 01:59:11 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 13:29:11 2026 -0700"
      },
      "message": "credentials/alts: preserve boundAccessToken in altsTC.Clone (#9345)\n\n`altsTC.Clone` does not copy `boundAccessToken`, so a cloned ALTS\ncredential silently loses the token and performs its handshake without\nit.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "3284af7e654993f7b9de31996ebc8fa81e375d8a",
      "tree": "4d17599512f0f329db6545417436db00eee455a4",
      "parents": [
        "75d9091e20fb3e255179a2177f39a09014426c6c"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Fri Aug 21 13:27:30 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 13:27:30 2026 -0700"
      },
      "message": "grpc: change existing dial/server options that set initial window size to not disable BDP estimation (#9078)\n\nFixes https://github.com/grpc/grpc-go/issues/7923\n\nSpecifically, this PR handles part two of the proposal:\nhttps://github.com/grpc/grpc-go/issues/7923#issuecomment-2549600066\n\nIt also fixes existing tests that relied on BDP estimation being turned\nOFF to use the `WithStaticXxx` and `StaticXxx` options, and adds new\ntests that verify the behavior of all options in a e2e fashion.\n\nRELEASE NOTES:\n* grpc: Deprecate `WithInitialWindowSize` and `InitialWindowSize`. These\nare replaced by `WithInitialStreamWindowSize` and\n`InitialStreamWindowSize` respectively.\n* grpc: Change behavior of existing options that set initial window size\non client and server to not disable BDP estimation."
    },
    {
      "commit": "75d9091e20fb3e255179a2177f39a09014426c6c",
      "tree": "7283b4b2fb963e20eaeb50b688471809234165af",
      "parents": [
        "ef79129ecf052af449531301ef99440f6a82a352"
      ],
      "author": {
        "name": "Ran",
        "email": "ran-su@users.noreply.github.com",
        "time": "Fri Aug 21 11:38:49 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 11:38:49 2026 -0700"
      },
      "message": "xds: allow wildcard listener port on server (#9341)\n\nThis implements https://github.com/grpc/proposal/pull/559\n\nRELEASE NOTES:\n- xds/server: Support listener resource with a wildcard port that\nenables deployments where server ports are assigned dynamically."
    },
    {
      "commit": "ef79129ecf052af449531301ef99440f6a82a352",
      "tree": "3471d04b2e8e48d0ac43dc7dc133235743a0660a",
      "parents": [
        "965a6bf33b41b55b280d38e5c757362ac36fb496"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Fri Aug 21 13:40:38 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 13:40:38 2026 +0530"
      },
      "message": "stats/opentelemetry: dynamically calculate compressed message size in tests (#9346)\n\nTests in `stats/opentelemetry` and `stats/opentelemetry/csm` asserted a\nhardcoded compressed message size of `57` bytes for a 10,000-byte zero\npayload with gzip compression.\nIn Go 1.27, standard library `compress/gzip` compression improvements\nchanged the output size of this payload from 57 bytes to 54 bytes,\ncausing metric and trace size assertions to fail when executed under\nnewer Go toolchains.\n\nAdded `GzipCompressedMessageSize` helper in to compute the expected\ncompressed byte length dynamically via `compress/gzip`. Updated metric\nand trace assertions to use the same.\n\nRELEASE NOTES: None"
    },
    {
      "commit": "965a6bf33b41b55b280d38e5c757362ac36fb496",
      "tree": "98670faa4e42e482e03a7a7240bb0f3a7d43a8b4",
      "parents": [
        "955851b776ba623de315d8c7aa0e7260f600b9f5"
      ],
      "author": {
        "name": "Doug Fawley",
        "email": "dfawley@google.com",
        "time": "Wed Aug 19 14:31:01 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 14:31:01 2026 -0700"
      },
      "message": "CONTRIBUTING.md: add generative AI policy section (#9339)"
    },
    {
      "commit": "955851b776ba623de315d8c7aa0e7260f600b9f5",
      "tree": "1f47d046cd14883e98a6874458ff599848210295",
      "parents": [
        "ce9c11298be928fdac25146f5d7ac47ff9081873"
      ],
      "author": {
        "name": "Yuyang Guo",
        "email": "mistyguo@gmail.com",
        "time": "Thu Aug 20 04:34:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 02:04:26 2026 +0530"
      },
      "message": "metadata: Add ValueFromOutgoingContext (#9282)\n\nPartially Fixes: #8860\n\n### Why\n\nThere are use cases where only a single value needs to be read from\noutgoing gRPC metadata. Today the only way to do that is\n`metadata.FromOutgoingContext`, which merges and copies every header\nalready staged into a brand-new map, even though the caller only wants\none of them. The cost of that copy grows with however many headers have\nalready accumulated in outgoing context — exactly the complaint raised\nin #8860.\n\n### What\n\nThis PR adds `metadata.ValueFromOutgoingContext(ctx, key) []string`,\nsymmetric to the existing `ValueFromIncomingContext`, for reading a\nsingle header from outgoing gRPC metadata without merging and copying\nevery other header already staged via `AppendToOutgoingContext`.\n\nThis is the API @easwars suggested in\nhttps://github.com/grpc/grpc-go/issues/8860#issuecomment-3975157332:\n\n\u003e Would adding a `ValueFromOutgoingContext` that is similar to\n`ValueFromIncomingContext` work for you? Please note that\n`ValueFromOutgoingContext` will not be as fast as\n`ValueFromIncomingContext` as the implementation would have check\nentries from the `map` **and** the `added` entries.\n\nper https://github.com/grpc/grpc-go/issues/8860#issuecomment-5121951898.\n\nThat tradeoff is exactly what this implementation does: it checks\n`rawMD.md` (case-insensitively, matching `ValueFromIncomingContext`\u0027s\nsemantics) and then walks `rawMD.added`, accumulating matches in the\nsame order `FromOutgoingContext` would, without allocating a new map or\ncopying unrelated keys/values.\n\nMatching `rawMD.added` entries case-insensitively via\n`strings.EqualFold`, rather than assuming they\u0027re already lowercased by\n`AppendToOutgoingContext`, makes no assumption about how `rawMD.added`\nwas populated — the same guarantee `FromOutgoingContext` already makes\nfor both `rawMD.md` and `rawMD.added`.\n\nThe allocation of `vals` is deferred until a match is actually found in\n`rawMD.added` (per `gemini-code-assist`\u0027s review suggestion), rather\nthan always calling `copyOf` as soon as `rawMD.md` matches. When the key\nis found in both `rawMD.md` and `rawMD.added`, this avoids paying for a\n`copyOf` allocation that would otherwise immediately be discarded by the\nfirst `append`\u0027s growth — roughly halving allocations for that case (see\n`key-found-in-md-and-added` in the benchmark below).\n\nThe `rawMD.added` loop also tries a direct `\u003d\u003d` before falling back to\n`strings.EqualFold` (a second `gemini-code-assist` suggestion), since\n`AppendToOutgoingContext` already lowercases keys in practice.\nBenchmarked with realistic-length keys (e.g. `\"grpc-timeout\"`, not\n`\"k1\"`), this is a modest win when the key is found (~2-7% faster) at\nthe cost of a small regression when it isn\u0027t (~6% slower — one extra\ncomparison with no payoff) — a reasonable trade since looking up a\nheader you expect to be present is the common case.\n\n### Benchmark\n\n`n` is the number of unrelated headers already staged (one\n`NewOutgoingContext` call plus one `AppendToOutgoingContext` call)\nbefore reading the target key:\n\n```\ngoos: darwin\ngoarch: arm64\npkg: google.golang.org/grpc/metadata\ncpu: Apple M4 Pro\nFromOutgoingContext/n\u003d1         141.7 ns/op    432 B/op    4 allocs/op\nValueFromOutgoingContext/n\u003d1     56.0 ns/op     16 B/op    1 allocs/op\nFromOutgoingContext/n\u003d10        404.9 ns/op    968 B/op   15 allocs/op\nValueFromOutgoingContext/n\u003d10   107.2 ns/op     16 B/op    1 allocs/op\nFromOutgoingContext/n\u003d50       1596.0 ns/op   3592 B/op   55 allocs/op\nValueFromOutgoingContext/n\u003d50   314.7 ns/op     16 B/op    1 allocs/op\n```\n\n(measured with `b.Loop`, per review feedback, which also removes the\nneed for the manual anti-optimization `b.Fatal` checks the previous\nnumbers were measured with)\n\nAt n\u003d50, roughly 5x faster with 55x fewer allocations. This is still\nO(n) in the number of already-staged headers in the worst case, since\n`rawMD.added` isn\u0027t indexed by key, but it avoids the wasted work of\ncopying and lowercasing every header the caller doesn\u0027t want.\n\nSeparately, `BenchmarkValueFromOutgoingContext` (now using\nrealistic-length keys like `\"grpc-timeout\"`/`\"content-type\"` instead of\n`\"k1\"`/`\"k3\"`, which understated `strings.EqualFold`\u0027s cost) shows both\n`rawMD.added` optimizations above:\n\n```\nkey-found                    59.6 ns/op    16 B/op   1 allocs/op\nkey-not-found                50.7 ns/op     0 B/op   0 allocs/op\nkey-found-in-md-and-added    38.7 ns/op    32 B/op   1 allocs/op\n```\n\n### Testing\n\n- `TestValueFromOutgoingContext` covers exact match, case-insensitive\nmatch, a value present in `rawMD.md` accumulated with two later\n`AppendToOutgoingContext` calls (must match `FromOutgoingContext`\u0027s\norder, per `TestAppendToOutgoingContext`), values split solely across\nmultiple `AppendToOutgoingContext` calls, not-found, and\nno-outgoing-metadata-at-all.\n- `TestValueFromOutgoingContext_AddedCaseInsensitive` constructs\n`rawMD.added` directly with a mixed-case key (bypassing\n`AppendToOutgoingContext`\u0027s lowercasing) to verify the match is still\nfound.\n- `TestValueFromOutgoingContext_PanicsOnOddPairs` covers the defensive\npanic on a malformed `rawMD.added` entry, mirroring the identical guard\nalready present in `FromOutgoingContext`.\n- `BenchmarkValueFromOutgoingContext` mirrors the existing\n`BenchmarkValueFromIncomingContext` shape (key-found / key-not-found),\nplus a `key-found-in-md-and-added` case covering the deferred-allocation\npath above.\n- `BenchmarkValueFromOutgoingContextVsFromOutgoingContext` produced the\ncomparison table above.\n- `ValueFromOutgoingContext` itself is at 100% statement coverage (`go\ntest -cover`).\n- `go test ./metadata/...`, `go vet ./metadata/...`, and `gofmt` are all\nclean. This branch is rebased on current `master`.\n\nThis is additive only — no existing exported behavior changes.\n\nRELEASE NOTES:\n* metadata: Add ValueFromOutgoingContext, which reads a single metadata\nvalue from outgoing context without copying the entire outgoing metadata\ninto a new map.\n\n---------\n\nCo-authored-by: Claude \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "ce9c11298be928fdac25146f5d7ac47ff9081873",
      "tree": "84d5844f404242d2a6a9d63057eb09f2f273909a",
      "parents": [
        "db9482836c298f234c896cf82ab68cafc78237f8"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Wed Aug 19 12:56:26 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 12:56:26 2026 -0700"
      },
      "message": "autosharding: add config parsing functionality (#9323)\n\nRELEASE NOTES: none"
    },
    {
      "commit": "db9482836c298f234c896cf82ab68cafc78237f8",
      "tree": "73c746b57f2af5d5abd0730927dbfbba940e8f42",
      "parents": [
        "7354d9c8debb4bcf2225bf429857078de310c176"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Tue Aug 18 23:02:08 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 23:02:08 2026 -0700"
      },
      "message": "xds/rbac: lowercase header matcher names before matching (#9332)\n\nThe RBAC filter passes the name of a header matcher to the matching\nengine unchanged. The metadata that the engine matches against always\nhas lowercase keys. A name that contains an uppercase character\ntherefore matches no header, and the rule that holds it never fires. The\npolicy parses, reports no error and looks active. A DENY policy written\nthis way fails open.\n\nThe A41 validation reads the same unnormalized name, so the rejection of\n:scheme and grpc- prefixed matchers misses the name Grpc-Status. A Host\nmatcher also keeps its name, although A41 makes host and :authority\nequivalent.\n\nLowercase the name in normalizeHeaderMatcher. That function already owns\nthe A41 rules and already rewrites the name in place, so the matching\nengine, the :scheme and grpc- rejection, and the host alias all read one\nnormalized name. Envoy holds each header matcher name in a\nLowerCaseString, grpc-java lowercases the name before it looks the\nheader up, and authz/rbac_translator.go lowercases the name on the\nnon-xDS path.\n\nThe new test in test/xds shows the effect on an end user. A DENY policy\non the header name User-Agent returns OK for every RPC before the change\nand PermissionDenied after it. The unit tests cover the name that the\nparse gives to the engine, the case of the :scheme and grpc- rejection,\nand the host alias, at the top level and inside a nested rule.\n\nRELEASE NOTES:\n\n- xds/rbac: Fix a bug where a header matcher whose name was not\nlowercase, such as `X-Role`, matched no header, which could cause DENY\nrules to fail open.\n- xds/rbac: Fix a bug where a `:scheme` or `grpc-` prefixed header\nmatcher was accepted when its name was not lowercase.\n- xds/rbac: Fix a bug where a `Host` header matcher was not replaced\nwith `:authority`.\n\nCo-authored-by: Markus Magnuson \u003c331091+alimony@users.noreply.github.com\u003e"
    },
    {
      "commit": "7354d9c8debb4bcf2225bf429857078de310c176",
      "tree": "30305800baad3d5e5eece30e61542ca0933597bc",
      "parents": [
        "c92e985770b7194d4a4f433c84d42c6c195e8ce5"
      ],
      "author": {
        "name": "Arjan Singh Bal",
        "email": "46515553+arjan-bal@users.noreply.github.com",
        "time": "Wed Aug 19 11:30:56 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 11:30:56 2026 +0530"
      },
      "message": "transport: restrict memory overhead of buffering small data frames (#9331)\n\nRELEASE NOTES:\n* transport: restrict memory overhead of buffering small data frames."
    },
    {
      "commit": "c92e985770b7194d4a4f433c84d42c6c195e8ce5",
      "tree": "6008dfb561e18665ccd109141453d3fc40c89a88",
      "parents": [
        "0ef3b0ccbe9739c69b57fe994dbf0e3adbc0f55c"
      ],
      "author": {
        "name": "Easwar Swaminathan",
        "email": "easwars@google.com",
        "time": "Tue Aug 18 12:39:31 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 12:39:31 2026 -0700"
      },
      "message": "server: remove code to suppress duplicate writing of status (#9322)\n\nFollow-up from https://github.com/grpc/grpc-go/pull/9309.\n\nThe transport currently handles duplicate status write suppression.\nThere is no need to add a further check in the gRPC layer without having\nan explicit reason for it. Maybe there is some edge case that requires\nit. So, removing it.\n\nRELEASE NOTES: none"
    },
    {
      "commit": "0ef3b0ccbe9739c69b57fe994dbf0e3adbc0f55c",
      "tree": "6bf5a883161c2a647e97461f68629bbaacbecd9b",
      "parents": [
        "b6f4ff622ced23ea5854d2db26841748a481352b"
      ],
      "author": {
        "name": "Naveed",
        "email": "naveed@bugqore.com",
        "time": "Wed Aug 19 01:08:49 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 12:38:49 2026 -0700"
      },
      "message": "client: don\u0027t reuse a pick\u0027s authority override on a later attempt (#9277)\n\n`csAttempt.newStream` writes the gRFC A81 authority override from the\npick result into `cs.callHdr`, which is allocated once per\n`clientStream` and shared by every `attempt`. Nothing clears `Authority`\nbetween attempts, so once an attempt is picked to an endpoint that\ncarries a hostname, a retry whose own pick supplies no override still\ngoes out with the earlier endpoint\u0027s authority. An xDS cluster using\n`auto_host_rewrite` whose endpoints do not all set hostname hits this on\nany retry, and `:authority` is what selects the virtual host and what\nRBAC host matchers run against on the receiving side.\n\nCopy the call header per attempt so the override, like\n`PreviousAttempts`, stays with the attempt that produced it. The value\nis derived from that attempt\u0027s pick result, so the attempt is the right\nscope for it; leaving it on the stream lets one endpoint\u0027s rewrite\noutlive the pick that asked for it.\n\nRELEASE NOTES:\n* client: Fix a bug where a retried RPC could be sent with the\n`:authority` value belonging to the endpoint chosen by an earlier\nattempt, when a load balancer supplies an authority override (e.g. xDS\n`auto_host_rewrite`)"
    },
    {
      "commit": "b6f4ff622ced23ea5854d2db26841748a481352b",
      "tree": "0afb437aeb0930f7f27765cda6521e17ff256adf",
      "parents": [
        "b6685c50ff9858588298cf9b53515febe1c41f0e"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Tue Aug 18 12:56:08 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 12:56:08 2026 +0530"
      },
      "message": "deps: update dependencies for all modules (#9327)\n\nThis PR updates dependencies for all modules as part of 1.84 branch cut.\n\nAlso,\n\nFixes: https://github.com/grpc/grpc-go/issues/9177\n\nRELEASE NOTES: None"
    },
    {
      "commit": "b6685c50ff9858588298cf9b53515febe1c41f0e",
      "tree": "9c372142c6a1baf88f69c6ccc0d71c06b3fac676",
      "parents": [
        "30ce1d594fa9d7b86ff9d3d7dd7873ef0c161acf"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Tue Aug 18 10:30:25 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 10:30:25 2026 +0530"
      },
      "message": "Change version to 1.85.0-dev (#9326)\n\nRELEASE NOTES: None"
    },
    {
      "commit": "30ce1d594fa9d7b86ff9d3d7dd7873ef0c161acf",
      "tree": "bfb45f32abcc7f88cafc0bf531b0b48f995289f7",
      "parents": [
        "54c743e4e9829208f264e092160d2b0768a01bf2"
      ],
      "author": {
        "name": "Madhav Bissa",
        "email": "48023579+mbissa@users.noreply.github.com",
        "time": "Sat Aug 15 15:07:16 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 15:07:16 2026 +0530"
      },
      "message": "xds: support injecting bootstrap and server config into HTTP filter config parsing (A102) (#9315)"
    }
  ],
  "next": "54c743e4e9829208f264e092160d2b0768a01bf2"
}
