)]}'
{
  "log": [
    {
      "commit": "42e1829b3724c0fb20910c0abe70099994856307",
      "tree": "8925c8102ae5b900c8d446cbf1a861823cd53702",
      "parents": [
        "c4256add4d58b1ac0e0bbc340874483d408f9a9c"
      ],
      "author": {
        "name": "Kannan J",
        "email": "kannanjgithub@google.com",
        "time": "Thu Jul 24 11:28:32 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 24 16:58:32 2025 +0530"
      },
      "message": "xds: Do RLS fallback policy eagar start (#12211)\n\nThe resource subscription to the fallback target was done only at the time of falling back, which can cause rpcs to fail. This change makes the fallback target to be subscribed and cached earlier, similar to C++ and go gRPC implementations."
    },
    {
      "commit": "c4256add4d58b1ac0e0bbc340874483d408f9a9c",
      "tree": "8028db1edac863db3ce6d7dcf8761ee71b48fea5",
      "parents": [
        "6ff8ecac09aa2a9e84b342d0326eb424a286fb32"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Jul 22 10:00:52 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Jul 23 06:38:33 2025 -0700"
      },
      "message": "xds: Align PriorityLB child selection with A56\n\nThe PriorityLB predates A56. tryNextPriority() now matches\nChoosePriority() from the gRFC.\n\nThe biggest change is waiting on CONNECTING children instead of failing\nafter the failOverTimer fires. The failOverTimer should be used to start\nlower priorities more eagerly, but shouldn\u0027t cause the overall\nconnectivity state to become TRANSIENT_FAILURE on its own. The prior\nbehavior of creating the \"Connection timeout for priority\" failing\npicker was particularly strange, because it didn\u0027t update child\u0027s\nconnectivity state. This previous behavior was creating errors because\nof the failOverTimer with no way to diagnose what was going wrong.\n\nb/428517222\n"
    },
    {
      "commit": "6ff8ecac09aa2a9e84b342d0326eb424a286fb32",
      "tree": "34922b68594383e6eb7f6b86b7dc53a254f0679a",
      "parents": [
        "80217275db3bd3d565a0167812560119d15d0a83"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jul 10 11:02:48 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Jul 22 06:56:02 2025 -0700"
      },
      "message": "core: Don\u0027t pre-compute DEADLINE_EXCEEDED message for delayed calls\n\nThe main reason I made a change here was to fix the tense from the\ndeadline \"will be exceeded in\" to \"was exceeded after\". But we really\ndon\u0027t want to be doing the string formatting unless the deadline is\nactually exceeded. There were a few more changes to make some variables\neffectively final.\n"
    },
    {
      "commit": "80217275db3bd3d565a0167812560119d15d0a83",
      "tree": "4b849817a6e8a5dcd25ed35f5ef5e79aaf4ad022",
      "parents": [
        "2e96fbf1e851242f8028af2cbc16dbc96e1037ff"
      ],
      "author": {
        "name": "Patrick Strawderman",
        "email": "patrick@kilink.net",
        "time": "Mon Jul 21 20:44:08 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 22 09:14:08 2025 +0530"
      },
      "message": "api: Size Sets and Maps correctly in handling of Metadata values to be exchanged during a call (#12229)\n\nFix HashSet / HashMap initializations to have sufficient capacity allocated based on the number of keys to be inserted, without which it would always lead to a rehash / resize operation."
    },
    {
      "commit": "2e96fbf1e851242f8028af2cbc16dbc96e1037ff",
      "tree": "c2f3df41e35cfc632da3ec4a6a3f5934d90120cc",
      "parents": [
        "a37d3eb349e048b953633027ed011cda8b68c603"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Jul 15 15:00:24 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jul 17 21:55:53 2025 +0000"
      },
      "message": "netty: Associate netty stream eagerly to avoid client hang\n\nIn #12185, RPCs were randomly hanging. In #12207 this was tracked down\nto the headers promise completing successfully, but the netty stream\nwas null. This was because the headers write hadn\u0027t completed but\nstream.close() had been called by goingAway().\n"
    },
    {
      "commit": "a37d3eb349e048b953633027ed011cda8b68c603",
      "tree": "53f24ed143d8ea85b0a2d213c7c49d1c86dc19c6",
      "parents": [
        "1fc4ab0bb203a7934753d4d29d8d4689a1012390"
      ],
      "author": {
        "name": "George Gensure",
        "email": "werkt0@gmail.com",
        "time": "Thu Jul 10 09:49:54 2025 -0400"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jul 17 21:55:16 2025 +0000"
      },
      "message": "Guarantee missing stream promise delivery\n\nIn observed cases, whether RST_STREAM or another failure from netty or\nthe server, listeners can fail to be notified when a connection yields a\nnull stream for the selected streamId. This causes hangs in clients,\ndespite deadlines, with no obvious resolution.\n\nTests which relied upon this promise succeeding must now change.\n"
    },
    {
      "commit": "1fc4ab0bb203a7934753d4d29d8d4689a1012390",
      "tree": "7f5cc20bb6a31997df919a7c961295cf71899c8a",
      "parents": [
        "6935d3a115be45f7ed240fd80087a0a829d966f4"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Jul 16 14:58:15 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jul 17 12:56:33 2025 +0000"
      },
      "message": "LBs should avoid calling LBs after lb.shutdown()\n\nLoadBalancers shouldn\u0027t be called after shutdown(), but RingHashLb could\nhave enqueued work to the SynchronizationContext that executed after\nshutdown(). This commit fixes problems discovered when auditing all LBs\nusage of the syncContext for that type of problem.\n\nSimilarly, PickFirstLb could have requested a new connection after\nshutdown(). We want to avoid that sort of thing too.\n\nRingHashLb\u0027s test changed from CONNECTING to TRANSIENT_FAILURE to get\nthe latest picker. Because two subchannels have failed it will be in\nTRANSIENT_FAILURE. Previously the test was using an older picker with\nout-of-date subchannelView, and the verifyConnection() was too imprecise\nto notice it was creating the wrong subchannel.\n\nAs discovered in b/430347751, where ClusterImplLb was seeing a new\nsubchannel being called after the child LB was shutdown (the shutdown\nitself had been caused by RingHashConfig not implementing equals() and\nwas fixed by a8de9f07ab, which caused ClusterResolverLb to replace its\nstate):\n\n```\njava.lang.NullPointerException\n\tat io.grpc.xds.ClusterImplLoadBalancer$ClusterImplLbHelper.createClusterLocalityFromAttributes(ClusterImplLoadBalancer.java:322)\n\tat io.grpc.xds.ClusterImplLoadBalancer$ClusterImplLbHelper.createSubchannel(ClusterImplLoadBalancer.java:236)\n\tat io.grpc.util.ForwardingLoadBalancerHelper.createSubchannel(ForwardingLoadBalancerHelper.java:47)\n\tat io.grpc.util.ForwardingLoadBalancerHelper.createSubchannel(ForwardingLoadBalancerHelper.java:47)\n\tat io.grpc.internal.PickFirstLeafLoadBalancer.createNewSubchannel(PickFirstLeafLoadBalancer.java:527)\n\tat io.grpc.internal.PickFirstLeafLoadBalancer.requestConnection(PickFirstLeafLoadBalancer.java:459)\n\tat io.grpc.internal.PickFirstLeafLoadBalancer.acceptResolvedAddresses(PickFirstLeafLoadBalancer.java:174)\n\tat io.grpc.xds.LazyLoadBalancer$LazyDelegate.activate(LazyLoadBalancer.java:64)\n\tat io.grpc.xds.LazyLoadBalancer$LazyDelegate.requestConnection(LazyLoadBalancer.java:97)\n\tat io.grpc.util.ForwardingLoadBalancer.requestConnection(ForwardingLoadBalancer.java:61)\n\tat io.grpc.xds.RingHashLoadBalancer$RingHashPicker.lambda$pickSubchannel$0(RingHashLoadBalancer.java:440)\n\tat io.grpc.SynchronizationContext.drain(SynchronizationContext.java:96)\n\tat io.grpc.SynchronizationContext.execute(SynchronizationContext.java:128)\n\tat io.grpc.xds.client.XdsClientImpl$ResourceSubscriber.onData(XdsClientImpl.java:817)\n```\n"
    },
    {
      "commit": "6935d3a115be45f7ed240fd80087a0a829d966f4",
      "tree": "b31f46fe080f89a40b7e13e1187e00ab65ea5a29",
      "parents": [
        "d7d70c6905666876d58c3c23cdf110cabdc11b37"
      ],
      "author": {
        "name": "MV Shiva",
        "email": "speakupshiva@gmail.com",
        "time": "Thu Jul 17 11:35:34 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 17 11:35:34 2025 +0530"
      },
      "message": "Revert \"xds: add \"resource_timer_is_transient_failure\" server feature (#12063)\" (#12228)\n\n"
    },
    {
      "commit": "d7d70c6905666876d58c3c23cdf110cabdc11b37",
      "tree": "67c58aa41324134ca15998eeea4ec09f289a2ab1",
      "parents": [
        "d352540a02cc3f438caf7527acfa7bec8c03ecf8"
      ],
      "author": {
        "name": "MV Shiva",
        "email": "speakupshiva@gmail.com",
        "time": "Thu Jul 17 10:26:12 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 17 10:26:12 2025 +0530"
      },
      "message": "xds: cncf/xds proto sync to 2025-05-02 (#12225)\n\n"
    },
    {
      "commit": "d352540a02cc3f438caf7527acfa7bec8c03ecf8",
      "tree": "cafea360c489c372af210d9ec0a0f64311153f0b",
      "parents": [
        "5a8326f1c794d273663f4cf442e50424210f15bc"
      ],
      "author": {
        "name": "Kannan J",
        "email": "kannanjgithub@google.com",
        "time": "Wed Jul 16 09:09:43 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 16 14:39:43 2025 +0530"
      },
      "message": "api: Add more Javadoc for NameResolver.Listener2 interface (#12220)\n\n"
    },
    {
      "commit": "5a8326f1c794d273663f4cf442e50424210f15bc",
      "tree": "33424bac78ea0912855b7cd630db9506208e77c4",
      "parents": [
        "a8de9f07ab831686da026ec067370a6e0c5489f1"
      ],
      "author": {
        "name": "MV Shiva",
        "email": "speakupshiva@gmail.com",
        "time": "Tue Jul 15 15:33:02 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 15 15:33:02 2025 +0530"
      },
      "message": "xds: add \"resource_timer_is_transient_failure\" server feature (#12063)\n\n"
    },
    {
      "commit": "a8de9f07ab831686da026ec067370a6e0c5489f1",
      "tree": "937ee90c457e2025d56dfdd3b68fd1ccf87c77e0",
      "parents": [
        "9d191b31b57a0076a806073871be034f6ae4bea3"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Jul 11 16:49:06 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Jul 14 14:06:15 2025 +0000"
      },
      "message": "xds: Implement equals in RingHashConfig\n\nLack of equals causes cluster_resolver to consider every update a\ndifferent configuration and restart itself.\n\nb/430347751\n"
    },
    {
      "commit": "9d191b31b57a0076a806073871be034f6ae4bea3",
      "tree": "b05d913c76cc19bcbf4787d36cefe18b715bed7a",
      "parents": [
        "01bd63d88fbe07f06a7c28854d6db090a554ee94"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Jul 11 16:28:47 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Jul 14 14:05:35 2025 +0000"
      },
      "message": "xds: Check isHttp11ProxyAvailable in equals()\n\nThis fixes an equals/hashCode bug introduced in 12197065fe.\n\nDiscovered when investigating b/430347751\n"
    },
    {
      "commit": "01bd63d88fbe07f06a7c28854d6db090a554ee94",
      "tree": "b2b94ba95584d4a4dd97f06d1f645d13a25b1282",
      "parents": [
        "94532a6b56076c56fb9278e9195bba1190a9260d"
      ],
      "author": {
        "name": "Richard Belleville",
        "email": "gnossen@gmail.com",
        "time": "Fri Jul 11 15:07:00 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 11 15:07:00 2025 -0700"
      },
      "message": "Remove inactive maintainers (#12187)\n\n"
    },
    {
      "commit": "94532a6b56076c56fb9278e9195bba1190a9260d",
      "tree": "fee4b5a7ba400629e9d1c6212e5957f8fb12f830",
      "parents": [
        "6dfa03c51c0f67bde1db56a7c71cbd538aef6e82"
      ],
      "author": {
        "name": "John Cormie",
        "email": "jdcormie@google.com",
        "time": "Thu Jul 10 14:14:36 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 10 14:14:36 2025 -0700"
      },
      "message": "binder: Introduce server pre-authorization (#12127)\n\ngrpc-binder clients authorize servers by checking the UID of the sender of the SETUP_TRANSPORT Binder transaction against some SecurityPolicy. But merely binding to an unauthorized server to learn its UID can enable \"keep-alive\" and \"background activity launch\" abuse, even if security policy ultimately decides the connection is unauthorized. Pre-authorization mitigates this kind of abuse by looking up and authorizing a candidate server Application\u0027s UID before binding to it. Pre-auth is especially important when the server\u0027s address is not fixed in advance but discovered by PackageManager lookup."
    },
    {
      "commit": "6dfa03c51c0f67bde1db56a7c71cbd538aef6e82",
      "tree": "3583e1f11177650313260968b9344d0c5003e02c",
      "parents": [
        "919370172d65a819bb1e7ccb47f2285b0ccfd17e"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jul 03 06:14:04 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 03 11:44:04 2025 +0530"
      },
      "message": "core: grpc-timeout should always be positive (#12201)\n\nPROTOCOL-HTTP2.md specifies \"TimeoutValue → {positive integer as ASCII\nstring of at most 8 digits}\". Zero is not positive, so it should be\navoided. So make sure timeouts are at least 1 nanosecond instead of 0\nnanoseconds.\n\ngrpc-go recently began disallowing zero timeouts in\nhttps://github.com/grpc/grpc-go/pull/8290 which caused a regression as\ngrpc-java can generate such timeouts. Apparently no gRPC implementation\nhad previously been checking for zero timeouts.\n\nInstead of changing the max(0) to max(1) everywhere, just move the max\nhandling into TimeoutMarshaller, since every caller of TIMEOUT_KEY was\ndoing the same max() handling.\n\nBefore fd8fd517d (in 2016!), grpc-java actually behaved correctly, as it\nfailed RPCs with timeouts \"\u003c\u003d 0\". The commit changed the handling to the\nmax(0) handling we see now.\n\nb/427338711"
    },
    {
      "commit": "919370172d65a819bb1e7ccb47f2285b0ccfd17e",
      "tree": "0f609027c7641220c310d2c818607c3c3cdd740d",
      "parents": [
        "ca99a8c478eff08b34c6ddd3035ef37aca9754ee"
      ],
      "author": {
        "name": "Abhishek Agrawal",
        "email": "81427947+AgraVator@users.noreply.github.com",
        "time": "Tue Jul 01 15:14:28 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 01 20:44:28 2025 +0530"
      },
      "message": "census: APIs for stats and tracing (#12050)\n\n"
    },
    {
      "commit": "ca99a8c478eff08b34c6ddd3035ef37aca9754ee",
      "tree": "a92eb0a11a8d3476f94ee5f6d5704b835a91a622",
      "parents": [
        "2ee4f9b488e42587adbc92ea428062004715d3c6"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Sun Jun 29 20:05:03 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Jun 30 14:23:32 2025 +0000"
      },
      "message": "Fix RLS regressions from XdsDepMan conversion\n\n297ab05ef converted CDS to XdsDependencyManager. This caused three\nregressions:\n\n * CdsLB2 as a RLS child would always fail with \"Unable to find\n   non-dynamic root cluster\" because is_dynamic\u003dtrue was missing in\n   its service config\n * XdsNameResolver only propagated resolution updates when the clusters\n   changed, so a CdsUpdate change would be ignored. This caused a hang\n   for RLS even with is_dynamic\u003dtrue. For non-RLS the lack config update\n   broke the circuit breaking psm interop test. This would have been\n   more severe if ClusterResolverLb had been converted to\n   XdsDependenceManager, as it would have ignored EDS updates\n * RLS did not propagate resolution updates, so CdsLB2 even with\n   is_dynamic\u003dtrue the CdsUpdate for the new cluster would never arrive,\n   causing a hang\n\nb/428120265\nb/427912384\n"
    },
    {
      "commit": "2ee4f9b488e42587adbc92ea428062004715d3c6",
      "tree": "7cc4d158311e810b90cc2a6ecc45014d17da4374",
      "parents": [
        "74aee11389b6d4b6561dce29001f024c5a96e28e"
      ],
      "author": {
        "name": "John Cormie",
        "email": "jdcormie@google.com",
        "time": "Thu Jun 26 22:28:48 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 27 10:58:48 2025 +0530"
      },
      "message": "AndroidComponentAddress constructor can be private. (#12188)\n\n"
    },
    {
      "commit": "74aee11389b6d4b6561dce29001f024c5a96e28e",
      "tree": "310dddfc3c7c0ecf49d23dda07ff19e2569b9f26",
      "parents": [
        "64322c324394fe5837fd324aae7cde36d229283b"
      ],
      "author": {
        "name": "John Cormie",
        "email": "jdcormie@google.com",
        "time": "Thu Jun 26 17:43:13 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 26 17:43:13 2025 -0700"
      },
      "message": "Clarify requirements for creating a cross-user Channel. (#12181)\n\nThe @SystemApi runtime visibility requirement isn\u0027t really new. It has always been implicit in the required INTERACT_ACROSS_USERS permission, which (in production) can only be held by system apps.\n\nThe SDK_INT \u003e\u003d 30 requirement was also always present, via @RequiresApi() on  BinderChannelBuilder#bindAsUser. This change just updates its replacement APIs (AndroidComponentAddress and TARGET_ANDROID_USER) to require it too."
    },
    {
      "commit": "64322c324394fe5837fd324aae7cde36d229283b",
      "tree": "cc2cac79f30df01987d18b8d71710fb0981d7d6b",
      "parents": [
        "af7efeb9f5db1026822a65f919fcab0bc2cd268c"
      ],
      "author": {
        "name": "vimanikag",
        "email": "viswakarma18rc@gmail.com",
        "time": "Wed Jun 25 10:55:00 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 25 10:55:00 2025 +0530"
      },
      "message": "11243: RLS cleanups (#12085)\n\n"
    },
    {
      "commit": "af7efeb9f5db1026822a65f919fcab0bc2cd268c",
      "tree": "436138b7dde89de66975bcfca6da205b55297949",
      "parents": [
        "ebc6d3e932cadf0c5b5cfb56e9bcdfe0ce48102d"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Jun 24 13:38:41 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Jun 25 04:52:46 2025 +0000"
      },
      "message": "core: Rely on ping-pong for flow control testing\n\nThe previous code did a ping-pong to make sure the transport had enough\ntime to process, but then proceeded to sleep 5 seconds. That sleep would\nhave been needed without the ping-pong, but with the ping-pong we are\nconfident all events have been drained from the transport. Deleting the\nunnecessary sleeps saves 10 seconds, for each of the 9 instances of this\ntest.\n"
    },
    {
      "commit": "ebc6d3e932cadf0c5b5cfb56e9bcdfe0ce48102d",
      "tree": "f0c021b437fb15d2072ddbbd0cb669c720e6386c",
      "parents": [
        "d374b26b6891255556ab4476f4ce22871219ae76"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Jun 24 13:18:58 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Jun 25 04:52:17 2025 +0000"
      },
      "message": "Start 1.75.0 development cycle\n"
    },
    {
      "commit": "d374b26b6891255556ab4476f4ce22871219ae76",
      "tree": "362dba7ad9f7d0707683d4c885e47216a4e36f6b",
      "parents": [
        "f99b2aaef884da0fbe4ade56df98c8a037e974a3"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Jun 23 13:19:55 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Jun 24 14:56:16 2025 +0000"
      },
      "message": "xds: Disable LOGICAL_DNS in XdsDepMan until used\n\nClusterResolverLb is still doing DNS itself, so disable it in XdsDepMan\nuntil that migration has finished. EDS is fine in XdsDepman, because\nXdsClient will share the result with ClusterResolverLb.\n"
    },
    {
      "commit": "f99b2aaef884da0fbe4ade56df98c8a037e974a3",
      "tree": "e0576d46af4f2340d1be6747f0d21045d7e27df3",
      "parents": [
        "30d40a6179c514ab88e8892d9aec4ced0763f60b"
      ],
      "author": {
        "name": "MV Shiva",
        "email": "speakupshiva@gmail.com",
        "time": "Tue Jun 24 10:12:35 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 24 10:12:35 2025 +0530"
      },
      "message": "release: Migrate artifacts publishing from legacy OSSRH to Central Portal (#12156)\n\n"
    },
    {
      "commit": "30d40a6179c514ab88e8892d9aec4ced0763f60b",
      "tree": "bbc8b49745da58188db03513c5661dc2b0cce6e4",
      "parents": [
        "9a6bdc70af8ef015e24a2b963b57c9d9e6f9bf00"
      ],
      "author": {
        "name": "John Cormie",
        "email": "jdcormie@google.com",
        "time": "Mon Jun 23 12:51:40 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 23 12:51:40 2025 -0700"
      },
      "message": "binder: Cancel checkAuthorization() request if still pending upon termination (#12167)\n\n"
    },
    {
      "commit": "9a6bdc70af8ef015e24a2b963b57c9d9e6f9bf00",
      "tree": "dc535a7d6a61462dadaed04d1cfaa6a761ee4ef4",
      "parents": [
        "e6e7bcadafccf908e7bb6f847d86759cfa74fbdb"
      ],
      "author": {
        "name": "John Cormie",
        "email": "jdcormie@google.com",
        "time": "Mon Jun 23 12:00:25 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 23 12:00:25 2025 -0700"
      },
      "message": "download maven using archive/permalink url (#12169)\n\n"
    },
    {
      "commit": "e6e7bcadafccf908e7bb6f847d86759cfa74fbdb",
      "tree": "e7bf5735040c93ccf8c655a9c4c5eb872987026c",
      "parents": [
        "922dc8a999531c91b0fa77386e0609745fae939f"
      ],
      "author": {
        "name": "Kun Zhang",
        "email": "zhangkun83@users.noreply.github.com",
        "time": "Wed Jun 18 14:47:24 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 18 14:47:24 2025 -0700"
      },
      "message": "binder: stops emulating for 21/22 Lollipop in tests\n\nSee cl/769936336 internally"
    },
    {
      "commit": "922dc8a999531c91b0fa77386e0609745fae939f",
      "tree": "6f3062041ab78e6f599cd86805b34bc2850d1257",
      "parents": [
        "d2d8ed8efaa6e10b393188f0b3bd4a0edcb37763"
      ],
      "author": {
        "name": "John Cormie",
        "email": "jdcormie@google.com",
        "time": "Tue Jun 17 22:29:21 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 18 10:59:21 2025 +0530"
      },
      "message": "Mark a few test helper methods as @CanIgnoreReturnValue (#12162)\n\n"
    },
    {
      "commit": "d2d8ed8efaa6e10b393188f0b3bd4a0edcb37763",
      "tree": "d9d87f64b9354aa82198e071733c7eea627eb07b",
      "parents": [
        "f07eb47cac4713feef6711078b827c6082971533"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jun 12 15:45:26 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Jun 17 22:14:20 2025 +0000"
      },
      "message": "xds: Add logical dns cluster support to XdsDepManager\n\nClusterResolverLb gets the NameResolverRegistry from\nLoadBalancer.Helper, so a new API was added in NameResover.Args to\npropagate the same object to the name resolver tree.\n\nRetryingNameResolver was exposed to xds. This is expected to be\ntemporary, as the retrying is being removed from ManagedChannelImpl and\nmoved into the resolvers. At that point, DnsNameResolverProvider would\nwrap DnsNameResolver with a similar API to RetryingNameResolver and xds\nwould no longer be responsible.\n"
    },
    {
      "commit": "f07eb47cac4713feef6711078b827c6082971533",
      "tree": "d7127fea235cce764fed093b03b35de490e75ca6",
      "parents": [
        "2604ce8a551244849f5d22dcefe99a7b2b474117"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Jun 17 14:14:32 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 17 07:14:32 2025 -0700"
      },
      "message": "util: Deliver addresses in a random order in MultiChildLb\n\nThis should often not matter much, but in b/412468630 it was cleary\nvisible that child creation order can skew load for the first batch of\nRPCs. This doesn\u0027t solve all the cases, as further-away backends will\nstill be less likely chosen initially and it is ignorant of the LB\npolicy. But this doesn\u0027t impact correctness, is easy, and is one fewer\ncases to worry about."
    },
    {
      "commit": "2604ce8a551244849f5d22dcefe99a7b2b474117",
      "tree": "9ff0c661115eb8b3b2ceb33ec274f173a9e64934",
      "parents": [
        "1c430989902856e609ddbff203be1dc4c412ff43"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Jun 13 13:26:51 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Jun 17 13:36:24 2025 +0000"
      },
      "message": "xds: XdsNR should be subscribing to clusters with XdsDepManager\n\nThis is missing behavior defined in gRFC A74:\n\n\u003e As per gRFC A31, the ConfigSelector gives each RPC a ref to the\n\u003e cluster that was selected for it to ensure that the cluster is not\n\u003e removed from the xds_cluster_manager LB policy config before the RPC\n\u003e is done with its LB picks. These cluster refs will also hold a\n\u003e subscription for the cluster from the XdsDependencyManager, so that\n\u003e the XdsDependencyManager will not stop watching the cluster resource\n\u003e until the cluster is removed from the xds_cluster_manager LB policy\n\u003e config.\n\nWithout the logic, RPCs can race and see the error:\n\n\u003e INTERNAL: CdsLb for cluster0: Unable to find non-dynamic root cluster\n\nFixes #12152. This fixes the regression introduced in 297ab05e\n"
    },
    {
      "commit": "1c430989902856e609ddbff203be1dc4c412ff43",
      "tree": "a67e672b206ead75f8061ead6a347cef41794629",
      "parents": [
        "d5b4fb51c2e5ed0fa4dc3fdc979e9bc99c82b86a"
      ],
      "author": {
        "name": "vimanikag",
        "email": "viswakarma18rc@gmail.com",
        "time": "Mon Jun 16 14:47:36 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 16 07:47:36 2025 -0700"
      },
      "message": "util: OutlierDetection should use Ticker, not TimeProvider (#12110)\n\nTimeProvider provides wall time. That can move forward and backward as time is adjusted. OutlierDetection is measuring durations, so it should use a monotonic clock.\n\nFixes #11622"
    },
    {
      "commit": "d5b4fb51c2e5ed0fa4dc3fdc979e9bc99c82b86a",
      "tree": "f737b0df4e6cae37c770c723d31ed36617bc31cb",
      "parents": [
        "8974a306af0bb5334cbe2bf4278cd898e5110668"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jun 12 09:47:22 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Jun 16 14:32:27 2025 +0000"
      },
      "message": "xds: Support tracking non-xds resources in XdsDepManager\n\nThis will be used for logical dns clusters as part of gRFC A74. Swapping\nto EnumMap wasn\u0027t really necessary, but was easy given the new type\nsystem.\n\nI can\u0027t say I\u0027m particularly happy with the name of the new\nTrackedWatcher type, but XdsConfigWatcher prevented using \"Watcher\"\nbecause it won\u0027t implement the new interface, and ResourceWatcher\nalready exists in XdsClient. So we have TrackedWatcher, WatcherTracer,\nTypeWatchers, and TrackedWatcherType.\n"
    },
    {
      "commit": "8974a306af0bb5334cbe2bf4278cd898e5110668",
      "tree": "d263406de2938aad3b20f659162ad786a48c742f",
      "parents": [
        "d88ef97a87a6c930f65ab85bca00a9c7c95acf76"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Jun 13 17:52:00 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 13 10:52:00 2025 -0700"
      },
      "message": "util: Mark OutlierDetectionLb classes final\n\nNone of these classes were intended to be extended. Even non-public\nclasses need final to prevent mocks from doing horrible things."
    },
    {
      "commit": "d88ef97a87a6c930f65ab85bca00a9c7c95acf76",
      "tree": "a31b2190585a904802bc31d05487744095caf279",
      "parents": [
        "240f731e00f659b6dd271bfb9941e4ba587e154f"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jun 12 11:47:05 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Jun 13 15:20:10 2025 +0000"
      },
      "message": "core: Remove RetryingNR.RESOLUTION_RESULT_LISTENER_KEY\n\nIt was introduced in fcb5c54e4 because at the time we didn\u0027t change the\nAPI to communicate the status. When onResult2() was introduced in\n90d0fabb1 this hack stopped being necessary.\n"
    },
    {
      "commit": "240f731e00f659b6dd271bfb9941e4ba587e154f",
      "tree": "2fa5f3e31ab01aed9c26a41c9e7aa9e93c571a77",
      "parents": [
        "26bd0eee4705e4ddac0e351fded5a8bd4e49f863"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Sat May 31 07:44:55 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Jun 13 15:18:14 2025 +0000"
      },
      "message": "xds: Avoid changing cache when watching children in XdsDepManager\n\nThe watchers can be completely regular, so the base class can do the\ncache management while the subclasses are only concerned with\nsubscribing to children.\n"
    },
    {
      "commit": "26bd0eee4705e4ddac0e351fded5a8bd4e49f863",
      "tree": "6b350f0cb9cf1920a98d0f6f80639be3326aff64",
      "parents": [
        "6f69363d90a9ae7471c40044a711be007029c59b"
      ],
      "author": {
        "name": "MV Shiva",
        "email": "speakupshiva@gmail.com",
        "time": "Fri Jun 13 12:30:13 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 13 12:30:13 2025 +0530"
      },
      "message": "core: Use lazy message formatting in checkState (#12144)\n\n"
    },
    {
      "commit": "6f69363d90a9ae7471c40044a711be007029c59b",
      "tree": "fde7a871245219fdc168acc32a411dfb4e4090ab",
      "parents": [
        "6cc2ff1cedc8a64c4494e62f2ea5f25bb129c7fe"
      ],
      "author": {
        "name": "David Sanderson",
        "email": "32687193+dws@users.noreply.github.com",
        "time": "Thu Jun 12 11:43:23 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 12 08:43:23 2025 -0700"
      },
      "message": "bazel: Migrate java_grpc_library to use DefaultInfo (#12148)\n\nWe here address the following obstacles in grpc-java to using Bazel\u0027s\n--incompatible_disable_target_default_provider_fields flag:\n\n```\nERROR: /private/var/tmp/_bazel_dws/7fd3cd5077fbf76d9e2ae421c39ef7ed/external/googleapis+/google/devtools/build/v1/BUILD.bazel:81:18: in _java_grpc_library rule @@googleapis+//google/devtools/build/v1:build_java_grpc:\nTraceback (most recent call last):\n        File \"/private/var/tmp/_bazel_dws/7fd3cd5077fbf76d9e2ae421c39ef7ed/external/grpc-java+/java_grpc_library.bzl\", line 94, column 30, in _java_rpc_library_impl\n                args.add(toolchain.plugin.files_to_run.executable, format \u003d \"--plugin\u003dprotoc-gen-rpc-plugin\u003d%s\")\nError: Accessing the default provider in this manner is deprecated and will be removed soon. It may be temporarily re-enabled by setting --incompatible_disable_target_default_provider_fields\u003dfalse. See https://github.com/bazelbuild/bazel/issues/20183 for details.\nERROR: /private/var/tmp/_bazel_dws/7fd3cd5077fbf76d9e2ae421c39ef7ed/external/googleapis+/google/devtools/build/v1/BUILD.bazel:81:18: Analysis of target \u0027@@googleapis+//google/devtools/build/v1:build_java_grpc\u0027 failed\nERROR: Analysis of target \u0027//src:bazel\u0027 failed; build aborted: Analysis failed\n```"
    },
    {
      "commit": "6cc2ff1cedc8a64c4494e62f2ea5f25bb129c7fe",
      "tree": "fa3de53914b6e3b76af1eac94ce40cf652e81859",
      "parents": [
        "13fe0080448e1fcb7e1dae925bce12c5c1c9071b"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Jun 10 14:32:26 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jun 12 04:02:40 2025 +0000"
      },
      "message": "util: In OutlierDetectionLb, don\u0027t box longs if they can\u0027t be null\n\nChanged the builder pattern to pass the builder to the constructor,\nsince I was changing almost all the arguments of the constructor anyway.\n"
    },
    {
      "commit": "13fe0080448e1fcb7e1dae925bce12c5c1c9071b",
      "tree": "788c929f28ed9c47604f905161c3e20e56dc13a0",
      "parents": [
        "30f6a4db77227a75220d82111e85497d339a3ba4"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jun 12 04:01:19 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 12 09:31:19 2025 +0530"
      },
      "message": "rls: Refactor estimatedSizeBytes updates (#12145)\n\nJust use a regular method instead of reusing the EvictionListener API.\nFix a few comments as well. Both of these changes were based on review\ncomments to pre-existing code in #11203.\n\nContributes to #11243"
    },
    {
      "commit": "30f6a4db77227a75220d82111e85497d339a3ba4",
      "tree": "ae3f5d91690232ab0580c63996266c4b0971a382",
      "parents": [
        "297ab05efeb0565c195518a819dfa851d1c0d62b"
      ],
      "author": {
        "name": "John Cormie",
        "email": "jdcormie@google.com",
        "time": "Wed Jun 11 12:19:19 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 11 12:19:19 2025 -0700"
      },
      "message": "google-java-format a line that was too long (#12147)\n\n"
    },
    {
      "commit": "297ab05efeb0565c195518a819dfa851d1c0d62b",
      "tree": "3838aaea2063d57ff5c88bc80936e2c4ec464f1c",
      "parents": [
        "a16d6559194d1598197d210a8aa9593e336128b1"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Jun 11 18:56:13 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 11 11:56:13 2025 -0700"
      },
      "message": "xds: Convert CdsLb to XdsDepManager\n\nI noticed we deviated from gRFC A37 in some ways. It turned out those\nwere added to the gRFC later in https://github.com/grpc/proposal/pull/344:\n- NACKing empty aggregate clusters\n- Failing aggregate cluster when children could not be loaded\n- Recusion limit of 16. We had this behavior already, but it was\n  ascribed to matching C++\n\nThere\u0027s disagreement on whether we should actually fail the aggregate\ncluster for bad children, so I\u0027m preserving the pre-existing behavior\nfor now.\n\nThe code is now doing a depth-first leaf traversal, not breadth-first.\nThis was odd to see, but the code was also pretty old, so the reasoning\nseems lost to history. Since we haven\u0027t seen more than a single level of\naggregate clusters in practice, this wouldn\u0027t have been noticed by\nusers.\n\nXdsDependencyManager.start() was created to guarantee that the callback\ncould not be called before returning from the constructor. Otherwise\nXDS_CLUSTER_SUBSCRIPT_REGISTRY could potentially be null."
    },
    {
      "commit": "a16d6559194d1598197d210a8aa9593e336128b1",
      "tree": "637acb49114ea60726fd419d8727a800b5a333ff",
      "parents": [
        "6afacf589e873e12c53ec7ecb43dfc65ec5ade0e"
      ],
      "author": {
        "name": "MV Shiva",
        "email": "speakupshiva@gmail.com",
        "time": "Tue Jun 10 10:31:03 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 10 10:31:03 2025 +0530"
      },
      "message": "compiler: generate blocking v2 unary calls that throw StatusException (#12126)\n\n"
    },
    {
      "commit": "6afacf589e873e12c53ec7ecb43dfc65ec5ade0e",
      "tree": "d0939d5190c5ce3c14f26d8701cdd7672be1c859",
      "parents": [
        "4ee662fbcf5cb9b1d3da6b046536890db69e4bc5"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Sat May 31 07:27:15 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Jun 09 14:13:59 2025 +0000"
      },
      "message": "xds: Don\u0027t cache rdsName in XdsDepManager\n\nWe can easily compute the rdsName and avoiding the state means we don\u0027t\nneed to override onResourceDoesNotExist() to keep the cache in-sync with\nthe config.\n"
    },
    {
      "commit": "4ee662fbcf5cb9b1d3da6b046536890db69e4bc5",
      "tree": "46f943d1fc9bf31d726169db0a6cba4c740af29e",
      "parents": [
        "1fd29bc804d0820a8f72c061bd671811adf85546"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Sat Jun 07 07:23:09 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Jun 09 14:13:41 2025 +0000"
      },
      "message": "xds: cancelled\u003dtrue on watch close in XdsDepManager\n\n1fd29bc80 replaced cancelWatcher() with watcher.close(). But setting\ncancelled was missing. Because the config update checks for shutdown,\nthe cancelled flag no longer avoids exceptions. But it seems best to\ncontinue avoiding any processing after close to avoid surprises.\n"
    },
    {
      "commit": "1fd29bc804d0820a8f72c061bd671811adf85546",
      "tree": "3da2276629e38072571510f03e538c06bed59b82",
      "parents": [
        "dc192f5c5e3b087fc78eb17ffdc053e203e5e3e4"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu May 29 17:08:33 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Jun 06 08:43:35 2025 -0700"
      },
      "message": "xds: Use tracing GC in XdsDepManager\n\nReference counting doesn\u0027t release cycles, so swap to a tracing garbage\ncollector. This greatly simplifies the code as well, as diffing is no\nlonger necessary. (If vanilla reference counting was used, diffing\nwouldn\u0027t have been necessary either as you just increment all the new\nobjects and decrement the old ones. But that doesn\u0027t work when use a set\ninstead of an integer.)\n"
    },
    {
      "commit": "dc192f5c5e3b087fc78eb17ffdc053e203e5e3e4",
      "tree": "39bdb910b29d75676d745b2d823966116326fa99",
      "parents": [
        "c20642874957778a9ca622a364f70250e65863f0"
      ],
      "author": {
        "name": "eshitachandwani",
        "email": "59800922+eshitachandwani@users.noreply.github.com",
        "time": "Fri Jun 06 19:24:27 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 06 19:24:27 2025 +0530"
      },
      "message": "Create SPIFFE tests config (#12133)\n\n"
    },
    {
      "commit": "c20642874957778a9ca622a364f70250e65863f0",
      "tree": "d26608d7088929c737436aaa1131649f29f718ac",
      "parents": [
        "4cd78810865fa8703b8a69753cf8d85291e34c6b"
      ],
      "author": {
        "name": "John Cormie",
        "email": "jdcormie@google.com",
        "time": "Thu Jun 05 19:07:59 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 05 19:07:59 2025 -0700"
      },
      "message": "binder: Rationalize @ThreadSafe-ty of BinderTransport. (#12130)\n\n- Use @BinderThread to document restrictions on methods and certain fields.\n- Make TransactionHandler non-public since only Android should call it.\n- Replace an unnecessary AtomicLong with a plain old long."
    },
    {
      "commit": "4cd78810865fa8703b8a69753cf8d85291e34c6b",
      "tree": "97978f7a981ea72d921029fefe73716fec7c19bf",
      "parents": [
        "4c7399910246b4111940faf9c3a277b87e559b8a"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu May 29 13:12:48 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jun 05 08:43:02 2025 -0700"
      },
      "message": "xds: Fix XdsDepManager aggregate cluster child ordering and loop detection\n\nThe children of aggregate clusters have a priority order, so we can\u0027t\never throw them in an ordinary set for later iteration.\n\nThis now detects recusion limits only after subscribing, but that\nmatches our existing behavior in CdsLoadBalancer2. We don\u0027t get much\nvalue detecting the limit before subscribing and doing so makes watcher\ntypes more different.\n\nLoops are still a bit broken as they won\u0027t be unwatched when orphaned,\nas they will form a reference loop. In CdsLoadBalancer2, duplicate\nclusters had duplicate watchers so there was single-ownership and\nreference cycles couldn\u0027t form. Fixing that is a bigger change.\n\nIntermediate aggregate clusters are now included in XdsConfig, just for\nsimplicity. It doesn\u0027t hurt anything whether they are present or\nmissing. but it required updates to some tests.\n"
    },
    {
      "commit": "4c7399910246b4111940faf9c3a277b87e559b8a",
      "tree": "82d8c2d70adf2bf43ed352d27909d02c330b8312",
      "parents": [
        "482dc5c1c3c7ff94f96d1d2d7edc1fe3b166630e"
      ],
      "author": {
        "name": "John Cormie",
        "email": "jdcormie@google.com",
        "time": "Thu Jun 05 03:09:51 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 05 15:39:51 2025 +0530"
      },
      "message": "Move all test helper classes out of AbstractTransportTest so they can be used elsewhere (#12125)\n\n"
    },
    {
      "commit": "482dc5c1c3c7ff94f96d1d2d7edc1fe3b166630e",
      "tree": "8fde5ac004704ac95d193985d5422059fdbbad4c",
      "parents": [
        "efe9ccc22caf88dfa1746e8edb840748e00cbaa4"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jun 05 03:07:49 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 05 15:37:49 2025 +0530"
      },
      "message": "xds: Don\u0027t allow hostnames in address field (#12123)\n\n* xds: Don\u0027t allow hostnames in address field\n\ngRFC A27 specifies they must be IPv4 or IPv6 addresses. Certainly doing\na DNS lookup hidden inside the config object is asking for trouble.\n\nThe tests were accidentally doing a lot of failing DNS requests greatly\nslowing them down. On my desktop, which made the problem most obvious\nwith five search paths in /etc/resolv.conf, :grpc-xds:test decreased\nfrom 66s to 29s. The majority of that is XdsDependencyManagerTest which\nwent from 33s to .1s, as it generated a UUID for the in-process\ntransport each test and then used it as a hostname, which defeated\nJava\u0027s DNS (negative) cache. The slowness was noticed because\nXdsDependencyManagerTest should have run quickly as a single thread\nwithout I/O, but was particularly slow on my desktop.\n\nThe cleanup caused me to audit serverName and the weird places it went.\nI think some of them were tricks for XdsClientFallbackTest to squirrel\naway something distinguishing, although reusing the serverName is asking\nfor confusion as is including the tricks in \"shared\" utilities.\nXdsClientFallbackTest does have some non-trivial changes, but this seems\nto fix some pre-existing bugs in the tests.\n\n* Add failing hostname unit test"
    },
    {
      "commit": "efe9ccc22caf88dfa1746e8edb840748e00cbaa4",
      "tree": "940534f029f95c38769a56e0dc29bc216b2868bb",
      "parents": [
        "48d08e643eb872647990f6881abe8e5d00b0a307"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Jun 02 23:32:02 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 03 12:02:02 2025 +0530"
      },
      "message": "xds: Non-SOTW resources need onError() callbacks, too (#12122)\n\nSOTW is unique in that it can become absent after being found. But if we\nNACK when initially loading the resource, we don\u0027t want to delay, depend\non the resource timeout, and then give a poor error.\n\nThis was noticed while adding the EDS restriction that address is not a\nhostname and some tests started hanging instead of failing quickly."
    },
    {
      "commit": "48d08e643eb872647990f6881abe8e5d00b0a307",
      "tree": "e3afe89af19aa466d5c2d540f7c05bf82cece41b",
      "parents": [
        "6bad6005924d0e665adcd959109f8b7ad45c3a7c"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Jun 02 23:22:38 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 03 11:52:38 2025 +0530"
      },
      "message": "xds: Remove EDS maybePublishConfig() avoidance in XdsDepManager (#12121)\n\nThe optimization makes the code more complicated. Yes, we know that\nmaybePublishConfig() will do no work because of an outstanding watch,\nbut we don\u0027t do this for other new watchers created and doing so would\njust make the code more bug-prone. This removes a difference in how\ndifferent watcher types are handled."
    },
    {
      "commit": "6bad6005924d0e665adcd959109f8b7ad45c3a7c",
      "tree": "e475c9c5885537a990e0fafa5663b3be08e71b71",
      "parents": [
        "379fbaa380422c24ba0ce6e2f012fe90b33027d8"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Jun 02 06:42:31 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 02 06:42:31 2025 -0700"
      },
      "message": "xds: Use getWatchers more often in XdsDepManager\n\nThis provides better type and missing-map handling. Note that\ngetWatchers() now implicitly creates the map if it doesn\u0027t exist,\ninstead of just returning an empty map. That makes it a bit easier to\nuse and more importantly avoids accidents where a bug tries to modify\nthe immutable map."
    },
    {
      "commit": "379fbaa380422c24ba0ce6e2f012fe90b33027d8",
      "tree": "633a555d1ceefb2291609e51aedfa38946ba0c49",
      "parents": [
        "8044a56ad2d6b3256ca72c21c10261ad77544ffb"
      ],
      "author": {
        "name": "MV Shiva",
        "email": "speakupshiva@gmail.com",
        "time": "Mon Jun 02 15:37:11 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 02 15:37:11 2025 +0530"
      },
      "message": "Update README etc to reference 1.73.0 (#12108)\n\n"
    },
    {
      "commit": "8044a56ad2d6b3256ca72c21c10261ad77544ffb",
      "tree": "e9cfc545664f3ba891560e7a862ec880a3f5c377",
      "parents": [
        "142e378cea0aa90aae36fec55f90c30ede95f965"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Sun Jun 01 23:55:27 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 02 12:25:27 2025 +0530"
      },
      "message": "xds: Remove timeouts from XdsDepManagerTest (#12114)\n\nThe tests are using FakeClock and inprocess transport with direct executor, so all operations should run in the test thread."
    },
    {
      "commit": "142e378cea0aa90aae36fec55f90c30ede95f965",
      "tree": "659518f9da9631c5c4a0a759ef3ebf00d49456c7",
      "parents": [
        "22cf7cf2ac454843b20993fd0b58918563a51a83"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri May 30 09:00:27 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 30 09:00:27 2025 -0700"
      },
      "message": "xds: Improve shutdown handling of XdsDepManager\n\nThe most important change here is to handle subscribeToCluster() calls\nafter shutdown(), and preventing the internal state from being heavily\nconfused as the assumption is there are no watchers after shutdown().\n\nClusterSubscription.closed isn\u0027t strictly necessary, but I don\u0027t want\nthe code to depend on double-deregistration being safe.\nmaybePublishConfig() isn\u0027t being called after shutdown(), but adding the\nprotection avoids a class of bugs that would cause channel panic."
    },
    {
      "commit": "22cf7cf2ac454843b20993fd0b58918563a51a83",
      "tree": "61dcdb7c88d1ab8930400147917fde8fc874775a",
      "parents": [
        "83538cdae3142be122496fbaa80440f39d715a47"
      ],
      "author": {
        "name": "Alex Panchenko",
        "email": "440271+panchenko@users.noreply.github.com",
        "time": "Fri May 30 07:25:37 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 30 10:55:37 2025 +0530"
      },
      "message": "tests: Replace usages of deprecated junit ExpectedException with assertThrows (#12103)\n\n"
    },
    {
      "commit": "83538cdae3142be122496fbaa80440f39d715a47",
      "tree": "a798872608fadb1a4c4557d64196bb67bca2c888",
      "parents": [
        "d124007ff4e4229d0a8d3096d13c7e82aa524d84"
      ],
      "author": {
        "name": "Sangamesh",
        "email": "ghulesangu@gmail.com",
        "time": "Tue May 27 17:52:47 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 27 10:52:47 2025 -0700"
      },
      "message": "cronet: Delete TODO for User-Agent on CronetEngine\n\ngRPC doesn\u0027t create the CronetEngine, so even though streaming is\nobserving the CronetEngine\u0027s User-Agent, we don\u0027t have control of that.\nIn addition, CronetEngines are commonly shared between gRPC and normal\nHTTP traffic, so we don\u0027t actually expect users to set gRPC in engine\u0027s\nuser agent. The existing behavior seems to be working as well as\nfeasible.\n\nFixes #11582"
    },
    {
      "commit": "d124007ff4e4229d0a8d3096d13c7e82aa524d84",
      "tree": "354cb6e2d73b61b1921c949a9c35c3846ec3af99",
      "parents": [
        "46485c8b62778f1b581019ef19e67dd8de937ca3"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Sun May 25 20:12:58 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 26 08:42:58 2025 +0530"
      },
      "message": "kokoro: Don\u0027t run grpc codegen in android-interop (#12098)\n\nandroid-interop has been failing to build since 46485c8 because it\ndidn\u0027t have cmake installed and defined LDFLAGS/CXXFLAGS with pkg-config\nbefore make_dependencies.sh had been run.\n\nAndroid-interop didn\u0027t verify the codegen is up-to-date. Building the\ncodegen was just a relic from when android was its own separate gradle\nbuild. Avoiding codegen means we don\u0027t have to compile absl/protobuf and\nhave a C++ toolchain."
    },
    {
      "commit": "46485c8b62778f1b581019ef19e67dd8de937ca3",
      "tree": "b08b54b90e0072fbc43555a35533cd86bd026e6f",
      "parents": [
        "9406d3b2a05dbfb95519cd3a2e43238b48010c05"
      ],
      "author": {
        "name": "Kannan J",
        "email": "kannanjgithub@google.com",
        "time": "Fri May 23 06:54:14 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 23 12:24:14 2025 +0530"
      },
      "message": "Upgrade Protobuf C++ to 22.5 (#11961)\n\n"
    },
    {
      "commit": "9406d3b2a05dbfb95519cd3a2e43238b48010c05",
      "tree": "abfeec993c88c94afca63e2947cd73209effacac",
      "parents": [
        "9d439d4a447e16fb6240abbd223d232f2bc875cf"
      ],
      "author": {
        "name": "Michael Lumish",
        "email": "mlumish@google.com",
        "time": "Thu May 22 14:49:12 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu May 22 15:43:25 2025 -0700"
      },
      "message": "Rename PSM interop fallback test suite to light\n"
    },
    {
      "commit": "9d439d4a447e16fb6240abbd223d232f2bc875cf",
      "tree": "c2bab7f944ae9a7af54080f3ed56af197c90b379",
      "parents": [
        "f8700a13ad1b7624cc370081164bb161a6d89112"
      ],
      "author": {
        "name": "MV Shiva",
        "email": "speakupshiva@gmail.com",
        "time": "Thu May 22 16:22:41 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 22 16:22:41 2025 +0530"
      },
      "message": "xds: Add GcpAuthenticationFilter to FilterRegistry (#12075)\n\n"
    },
    {
      "commit": "f8700a13ad1b7624cc370081164bb161a6d89112",
      "tree": "9c53618faecd93b5a6d23167c065be1f34b89ec3",
      "parents": [
        "2fb09578a8a8ca4b0000f6f8be8c3a22460d9019"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed May 21 10:19:30 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 21 22:49:30 2025 +0530"
      },
      "message": "compiler: Default to @generated\u003domit (#12080)\n\nAfter many years of issue 9179 being open, there\u0027s been nothing to show\nthat we need the javax.annotations.Generated annotation. Most tools use\nfile paths and a few check for annotations with \"Generated\" in the name.\nErrorProne has a few that check for javax.annotations.Generated, but\nonly UnnecessarilyFullyQualified looks like it\u0027d be a problem and it is\ndisabled by default. We\u0027re not getting any more information, no users\nhave reported issues with `@generated\u003domit`, and the existing dependency\nis annoying users, so just drop it.\n\nGiven we will still retain the GrpcGenerated annotation, it seems highly\nlikely things are already okay. Even if there are problems they would\nprobably be addressed by adding a io.grpc.stub.annotations.Generated\nannotation or small tweaks. In the short-term, (non-Bazel) users can use\n`@generated\u003djavax`, but long-term we could consider removing the option\nassuming we\u0027ve resolved any outstanding issues.\n\nWe will want to update the examples and the README to remove the\norg.apache.tomcat:annotations-api dependency after the next release.\n\nFixes #9179"
    },
    {
      "commit": "2fb09578a8a8ca4b0000f6f8be8c3a22460d9019",
      "tree": "7898ecd613d80add6c9468d40b094f77e0ccf066",
      "parents": [
        "480640dc2ff7851ec6c9a4c7d929e3e383d16563"
      ],
      "author": {
        "name": "Luwei Ge",
        "email": "lwge@google.com",
        "time": "Mon May 19 12:50:25 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 19 12:50:25 2025 -0700"
      },
      "message": "xds: enableSpiffe also checks the new env var per gRFC-A87\n\n"
    },
    {
      "commit": "480640dc2ff7851ec6c9a4c7d929e3e383d16563",
      "tree": "cb122a07e13c861f4d75624a3ca0d5baaa0ac262",
      "parents": [
        "b88536a17d320065a972858e17e44e1e5c656a0f"
      ],
      "author": {
        "name": "Gregory Cooke",
        "email": "gtcooke94@gmail.com",
        "time": "Mon May 19 11:30:10 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 19 08:30:10 2025 -0700"
      },
      "message": "alts: add experimental keepalive (#12076)\n\n"
    },
    {
      "commit": "b88536a17d320065a972858e17e44e1e5c656a0f",
      "tree": "bdecbae5a14b09c70297d34a0e42c8bba629a061",
      "parents": [
        "b08976148634102719c620766d8cc858c6836730"
      ],
      "author": {
        "name": "Abhishek Agrawal",
        "email": "81427947+AgraVator@users.noreply.github.com",
        "time": "Thu May 15 05:29:52 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 15 10:59:52 2025 +0530"
      },
      "message": "kokoro: add cloud run tests config (#12065)\n\nkokoro: add cloud run tests config"
    },
    {
      "commit": "b08976148634102719c620766d8cc858c6836730",
      "tree": "6c7e2cfd603834c9f1e3b2203fd9684d041e7476",
      "parents": [
        "59adeb9d472953f1be9a25dfad91652cdc688624"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed May 14 00:53:37 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 14 13:23:37 2025 +0530"
      },
      "message": "xds: Enable least request by default (#12054)\n\nEnable least request by default.\n\nIt has seen good testing by users and behaved as expected.\n\nFixes #11996"
    },
    {
      "commit": "59adeb9d472953f1be9a25dfad91652cdc688624",
      "tree": "2e93f4d63821ff672598b91634919ce08fd87552",
      "parents": [
        "6baac45bd238f6a4cdc4275840808c52a9162679"
      ],
      "author": {
        "name": "MV Shiva",
        "email": "speakupshiva@gmail.com",
        "time": "Tue May 13 17:15:36 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 13 17:15:36 2025 +0530"
      },
      "message": "Start 1.74.0 development cycle (#12061)\n\n"
    },
    {
      "commit": "6baac45bd238f6a4cdc4275840808c52a9162679",
      "tree": "6c85ef87dc991afece5ae71160a704ec6265402b",
      "parents": [
        "454f1c5c6acc46e3d93ddf434a4e77943f5f52ec"
      ],
      "author": {
        "name": "vinodhabib",
        "email": "47808007+vinodhabib@users.noreply.github.com",
        "time": "Mon May 12 07:14:14 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 12 12:44:14 2025 +0530"
      },
      "message": "xds: Fix pretty-print of Cluster with WrrLocality and LB policies (#12037)\n\n"
    },
    {
      "commit": "454f1c5c6acc46e3d93ddf434a4e77943f5f52ec",
      "tree": "bba87934228d90f4accb4671feab9267386ed403",
      "parents": [
        "64fe061ccd0b8e57fdb54b983d58f235d568c55a"
      ],
      "author": {
        "name": "John Cormie",
        "email": "jdcormie@google.com",
        "time": "Fri May 09 14:57:59 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 09 14:57:59 2025 -0700"
      },
      "message": "binder: Create a Robolectric version of BinderTransportTest (#12057)\n\nThis version runs way faster than BinderTransportTest and doesn\u0027t require an actual Android device/emulator. It\u0027ll allow future tests to simulate things that are difficult/impossible on real Android, at the price of some realism."
    },
    {
      "commit": "64fe061ccd0b8e57fdb54b983d58f235d568c55a",
      "tree": "1f9908af9c6d455ada750dfb0981cc880ec4a7bb",
      "parents": [
        "80cc988b3c2ed8961d0df9df0af13e297c522084"
      ],
      "author": {
        "name": "John Cormie",
        "email": "jdcormie@google.com",
        "time": "Fri May 09 14:52:12 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 09 14:52:12 2025 -0700"
      },
      "message": "Simplify RobolectricBinderSecurityTest (#12058)\n\n- Use INSTRUMENTATION_TEST @LooperMode to avoid custom Executors and idleLoopers() toil.\n- No android.app.Service is actually needed with Robolectric."
    },
    {
      "commit": "80cc988b3c2ed8961d0df9df0af13e297c522084",
      "tree": "8f28b823e6602c8920096c4401f832b1e9464377",
      "parents": [
        "3f5fdf12663dac0d221e6b9fb4b0dfed7486a6a9"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed May 07 23:04:16 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 08 11:34:16 2025 +0530"
      },
      "message": "xds: Use acceptResolvedAddresses() for WeightedTarget children (#12053)\n\nConvert the tests to use acceptResolvedAddresses() as well."
    },
    {
      "commit": "3f5fdf12663dac0d221e6b9fb4b0dfed7486a6a9",
      "tree": "1418c6acdd57bfec01da9f8fbb6292aaa89e81a3",
      "parents": [
        "be0247f501f5f96ad83b4ab6013ab1e69aba591d"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue May 06 21:44:48 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 07 10:14:48 2025 +0530"
      },
      "message": "core: Remove unnecessary SuppressWarnings(\"deprecation\") (#12052)\n\n"
    },
    {
      "commit": "be0247f501f5f96ad83b4ab6013ab1e69aba591d",
      "tree": "04c69c72c48e116208a69f4b0d4d4b760c81edac",
      "parents": [
        "12aaf88d86390b79e95cba3f4768f5a950807bda"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon May 05 13:16:28 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue May 06 06:20:33 2025 -0700"
      },
      "message": "Bump com.google.protobuf gradle plugin to 0.9.5\n\nThe plugin now outputs to \"generated/sources\". The IDE configuration\nexplicitly adding the folders to the source sets hasn\u0027t been needed for\nsome years.\n"
    },
    {
      "commit": "12aaf88d86390b79e95cba3f4768f5a950807bda",
      "tree": "18f7984a28ec04df29de738e6474625fe7fb34b2",
      "parents": [
        "25199e9df9b7f3f0db664883abb103a6abbfe120"
      ],
      "author": {
        "name": "Kim Jin Young",
        "email": "tian__mi__mi@naver.com",
        "time": "Tue May 06 02:02:31 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 05 22:32:31 2025 +0530"
      },
      "message": "Fix comment\u0027s typo (#12045)\n\n"
    },
    {
      "commit": "25199e9df9b7f3f0db664883abb103a6abbfe120",
      "tree": "b8c8b1318abeeaa696732984cba11e2e64c8455a",
      "parents": [
        "7952afdd561e6a3f1b9130e753512261476b60f1"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Apr 23 09:18:08 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 23 09:18:08 2025 -0700"
      },
      "message": "xds: XdsDepManager should ignore updates after shutdown\n\nThis prevents a NPE and subsequent channel panic when trying to build a\nconfig (because there are no watchers, so waitingOnResource\u003d\u003dfalse)\nwithout any listener and route.\n```\njava.lang.NullPointerException: Cannot invoke \"io.grpc.xds.XdsDependencyManager$RdsUpdateSupplier.getRdsUpdate()\" because \"routeSource\" is null\n    at io.grpc.xds.XdsDependencyManager.buildUpdate(XdsDependencyManager.java:295)\n    at io.grpc.xds.XdsDependencyManager.maybePublishConfig(XdsDependencyManager.java:266)\n    at io.grpc.xds.XdsDependencyManager$EdsWatcher.onChanged(XdsDependencyManager.java:899)\n    at io.grpc.xds.XdsDependencyManager$EdsWatcher.onChanged(XdsDependencyManager.java:888)\n    at io.grpc.xds.client.XdsClientImpl$ResourceSubscriber.notifyWatcher(XdsClientImpl.java:929)\n    at io.grpc.xds.client.XdsClientImpl$ResourceSubscriber.lambda$onData$0(XdsClientImpl.java:837)\n    at io.grpc.SynchronizationContext.drain(SynchronizationContext.java:96)\n```\n\nI think this fully-fixes the problem today, but not tomorrow.\nsubscribeToCluster() is racy as well, but not yet used.\n\nThis was noticed when idleTimeout was firing, with some other code\ncalling getState(true) to wake the channel back up. That may have made\nthis panic more visible than it would be otherwise, but that has not\nbeen investigated.\n\nb/412474567"
    },
    {
      "commit": "7952afdd561e6a3f1b9130e753512261476b60f1",
      "tree": "183fae5466776f8816cbe983b642932d2b4870e2",
      "parents": [
        "6cd007d0d0603187224231079107ee79e2b0a539"
      ],
      "author": {
        "name": "Kannan J",
        "email": "kannanjgithub@google.com",
        "time": "Wed Apr 23 13:12:24 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 23 18:42:24 2025 +0530"
      },
      "message": "Add some documentation to StatusOr.equals regarding how underlying statuses are compared, to avoid any confusion, as suggested in issue #11949. (#12036)\n\nAdd some documentation to StatusOr.equals regarding how underlying statuses are compared, to avoid any confusion, as suggested in issue #11949."
    },
    {
      "commit": "6cd007d0d0603187224231079107ee79e2b0a539",
      "tree": "79436281c3feb4d017e08b1d8155a42001b3711b",
      "parents": [
        "9619453799e98f3fb4bbbf999b1d8d09c374d687"
      ],
      "author": {
        "name": "Abhishek Agrawal",
        "email": "81427947+AgraVator@users.noreply.github.com",
        "time": "Tue Apr 22 09:04:51 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 22 14:34:51 2025 +0530"
      },
      "message": "xds: add the missing xds.authority metric (#12018)\n\nThis completes the [XDS client metrics](https://github.com/grpc/proposal/blob/master/A78-grpc-metrics-wrr-pf-xds.md#xdsclient) by adding the remaining grpc.xds.authority metric."
    },
    {
      "commit": "9619453799e98f3fb4bbbf999b1d8d09c374d687",
      "tree": "d9aac5ff7e9d06eb30dfe15e6dc965a04ed998e6",
      "parents": [
        "53de8a72ca989ca547c7df67d71ddc3b43f49a8e"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Apr 21 06:17:43 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 21 06:17:43 2025 -0700"
      },
      "message": "Implement grpc.lb.backend_service optional label\n\nThis completes gRFC A89. 7162d2d66 and fc86084df had already implemented\nthe LB plumbing for the optional label on RPC metrics. This observes the\nvalue in OpenTelemetry and adds it to WRR metrics as well.\n\nhttps://github.com/grpc/proposal/blob/master/A89-backend-service-metric-label.md"
    },
    {
      "commit": "53de8a72ca989ca547c7df67d71ddc3b43f49a8e",
      "tree": "31b72199d49b627aa31bfee18ad7fb205a720d16",
      "parents": [
        "7a08fdb7f94a43951da6245e100c3535d0ce7879"
      ],
      "author": {
        "name": "Abhishek Agrawal",
        "email": "81427947+AgraVator@users.noreply.github.com",
        "time": "Thu Apr 17 12:07:08 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 17 17:37:08 2025 +0530"
      },
      "message": "Update README etc to reference 1.72.0 (#12025)\n\n"
    },
    {
      "commit": "7a08fdb7f94a43951da6245e100c3535d0ce7879",
      "tree": "c703e0a8a3b4dbad01b2f31a846199aa3aed7d6e",
      "parents": [
        "84bd01454b38815ad4b67ea2ca83708088d498f1"
      ],
      "author": {
        "name": "MV Shiva",
        "email": "speakupshiva@gmail.com",
        "time": "Thu Apr 17 07:26:40 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 17 07:26:40 2025 +0530"
      },
      "message": "xds: float LRU cache across interceptors (#11992)\n\n"
    },
    {
      "commit": "84bd01454b38815ad4b67ea2ca83708088d498f1",
      "tree": "07beeaea7f5c8313c58793e8812e7eb7a87fb1fc",
      "parents": [
        "65d0bb8a4d9ee111f1eeb02c43321bbb99143151"
      ],
      "author": {
        "name": "Kurt Alfred Kluever",
        "email": "kak@google.com",
        "time": "Tue Apr 15 11:10:10 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Apr 15 13:00:35 2025 -0700"
      },
      "message": "context: Remove mention of \"epoch\" from Ticker.nanoTime() javadocs, plus other minor touchups\n\nIn Java, when people hear \"epoch\", they think \"unix epoch\".\n\ncl/747082451\n"
    },
    {
      "commit": "65d0bb8a4d9ee111f1eeb02c43321bbb99143151",
      "tree": "e1f7ff0d36a87037c855d799e8d64c7ec0efa2c1",
      "parents": [
        "f79ab2f16f7e037da0e8c9985e917eca552c22cb"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Apr 11 08:25:21 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 11 08:25:21 2025 -0700"
      },
      "message": "xds: Enable deprecation warnings\n\nThe security code referenced fields removed from gRFC A29 before it was\nfinalized.\n\nNote that this fixes a bug in CommonTlsContextUtil where\nCombinedValidationContext was not checked. I believe this was the only\nlocation with such a bug as I audited all non-test usages of\nhas/getValidationContext() and confirmed they have have a corresponding\nhas/getCombinedValidationContext()."
    },
    {
      "commit": "f79ab2f16f7e037da0e8c9985e917eca552c22cb",
      "tree": "8f5a732526aea9d1a9d675aa7b20bf9b0caa9b2a",
      "parents": [
        "a6aec2769e0ab4a41f6aa6b0771d0614a834dac2"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Apr 09 09:14:44 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Apr 09 12:51:33 2025 -0700"
      },
      "message": "api: Remove deprecated SubchannelPicker.requestConnection()\n\nIt has been deprecated since cec9ee368, six years ago. It was replaced\nwith LoadBalancer.requestConnection().\n"
    },
    {
      "commit": "a6aec2769e0ab4a41f6aa6b0771d0614a834dac2",
      "tree": "cb61d0cab735242e9a70a6a60119369bcd023eeb",
      "parents": [
        "2db4852e231f58e8c2faccdf7feea08077a62a87"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Apr 08 09:20:12 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Apr 08 11:03:45 2025 -0700"
      },
      "message": "auth: Use pre-existing private key in test\n\nGenerating a KeyPair is very expensive when running with TSAN, because\nTSAN keeps the JVM in interpreted mode. This speeds up the test running\non my desktop from .368s to .151s; faster, but nobody cares. With TSAN,\nthe speedup is from 150-500s to 4-6s. Within Google the test was timing\nout because it was taking so long. While we can increase the timeout,\nit seems better to speed up the test in this easy way.\n"
    },
    {
      "commit": "2db4852e231f58e8c2faccdf7feea08077a62a87",
      "tree": "63ff9c363faa69f74edebf2bbe2964a294ac3a5a",
      "parents": [
        "54d37839a39defddf59665962e05d863a490cfc9"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Apr 07 14:26:14 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Apr 07 21:33:55 2025 -0700"
      },
      "message": "core: Loop over interceptors when computing effective interceptors\n\nA post-merge review of 8516cfef9 suggested this change and the comment\nhad been lost in my inbox.\n"
    },
    {
      "commit": "54d37839a39defddf59665962e05d863a490cfc9",
      "tree": "ee84eba56ae0700763df89edc2f87faa48267ac3",
      "parents": [
        "aae52de3b8fee34dfc548d36d802cbb07af0c2b6"
      ],
      "author": {
        "name": "jiangyuan",
        "email": "joe469391363@gmail.com",
        "time": "Tue Apr 08 05:34:57 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 07 14:34:57 2025 -0700"
      },
      "message": "stub: trailersFromThrowable() metadata should be copied (#11979)\n\nIf the same exception is passed to multiple RPCs, then the results will\nrace.\n\nFixes #11973"
    },
    {
      "commit": "aae52de3b8fee34dfc548d36d802cbb07af0c2b6",
      "tree": "7e822cf31c99883a3cb17578e4b267e17b3b97d4",
      "parents": [
        "a13fca2bf2cddd58d917865bc0bb24036c5eb873"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Apr 04 10:58:52 2025 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Apr 04 12:28:37 2025 -0700"
      },
      "message": "stub: Add RunWith(JUnit4) to support varied environments\n\nSome JUnit environments require the RunWith annotation. Notably\nBlaze/Bazel needs it.\n"
    },
    {
      "commit": "a13fca2bf2cddd58d917865bc0bb24036c5eb873",
      "tree": "0a85e57f81ccccf148a4eda6fd41da9728af70d3",
      "parents": [
        "edc2bf7346ea88d8db773535bf62a59dbea4fb20"
      ],
      "author": {
        "name": "Kannan J",
        "email": "kannanjgithub@google.com",
        "time": "Fri Apr 04 16:38:29 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 04 22:08:29 2025 +0530"
      },
      "message": "xds: ClusterResolverLoadBalancer handle update for both resolved addresses and errors via ResolutionResult (#11997)\n\n"
    },
    {
      "commit": "edc2bf7346ea88d8db773535bf62a59dbea4fb20",
      "tree": "842ac9ba1b0ecccd367df9a73b80a71e55b66a31",
      "parents": [
        "5ca4d852ae5a50ea8d52497996af4a6b278ccd84"
      ],
      "author": {
        "name": "Alex Panchenko",
        "email": "440271+panchenko@users.noreply.github.com",
        "time": "Fri Apr 04 16:09:35 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 04 19:39:35 2025 +0530"
      },
      "message": "stub: Utility method StreamObservers.nextAndComplete() that does both onNext and onComplete (#11778)\n\n"
    },
    {
      "commit": "5ca4d852ae5a50ea8d52497996af4a6b278ccd84",
      "tree": "a5eb1d6ffb8f1e210c4a631c1be72215869a7006",
      "parents": [
        "d4c46a7f1fe67bad762139a679b3597dd8c1849d"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Apr 04 05:16:37 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 04 17:46:37 2025 +0530"
      },
      "message": "core: Avoid Set.removeAll() when passing a possibly-large List (#11994)\n\nSee #11958"
    },
    {
      "commit": "d4c46a7f1fe67bad762139a679b3597dd8c1849d",
      "tree": "dc03fc96471e41fdd9a0db52eac871d515d50e39",
      "parents": [
        "c8d1e6e39c26da2eb54386eac6eaf9e1aa8f9b9c"
      ],
      "author": {
        "name": "Abhishek Agrawal",
        "email": "81427947+AgraVator@users.noreply.github.com",
        "time": "Fri Apr 04 05:53:08 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 04 11:23:08 2025 +0530"
      },
      "message": "refactor: prevents global stats config freeze in ConfiguratorRegistry.getConfigurators() (#11991)\n\n"
    },
    {
      "commit": "c8d1e6e39c26da2eb54386eac6eaf9e1aa8f9b9c",
      "tree": "3281b7354fac33ceac1fe8837c43078100d4748b",
      "parents": [
        "84c7713b2f40a4638a8e5461a4008810615bd11a"
      ],
      "author": {
        "name": "MV Shiva",
        "email": "speakupshiva@gmail.com",
        "time": "Thu Apr 03 11:22:26 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 03 11:22:26 2025 +0530"
      },
      "message": "xds: listener type validation (#11933)\n\n"
    },
    {
      "commit": "84c7713b2f40a4638a8e5461a4008810615bd11a",
      "tree": "96ac8a7f14ebe4829dd791a37a4a9e1daf91b6c0",
      "parents": [
        "908f9f19cdd06bad2214e0b89b5eeb7ce341117f"
      ],
      "author": {
        "name": "MV Shiva",
        "email": "speakupshiva@gmail.com",
        "time": "Wed Apr 02 16:29:55 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 02 16:29:55 2025 +0530"
      },
      "message": "xds: propagate audience from cluster resource in gcp auth filter (#11972)\n\n"
    },
    {
      "commit": "908f9f19cdd06bad2214e0b89b5eeb7ce341117f",
      "tree": "aa2921acf53affdb0c848e428ceb938bfffb03b3",
      "parents": [
        "8ca7c4ef1f961e0540d9d0eccb4e9bf25403f6a4"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Apr 02 03:54:32 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 02 16:24:32 2025 +0530"
      },
      "message": "core: Delete the long-deprecated GRPC_PROXY_EXP (#11988)\n\n\"EXP\" stood for experimental and all documentation that referenced it made it clear it was experimental. It\u0027s been some years since we started logging a message when it was used to say it will be deleted. There\u0027s no time like the present to delete it."
    },
    {
      "commit": "8ca7c4ef1f961e0540d9d0eccb4e9bf25403f6a4",
      "tree": "d71b3a82a4f79606841c43356f25c3ccfdf2ad8f",
      "parents": [
        "c28a7e3e0677255c1d389053747654e678300e71"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Apr 02 03:52:00 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 02 16:22:00 2025 +0530"
      },
      "message": "core: Delete stale SuppressWarnings(\"deprecated\") for ATTR_LOAD_BALANCING_CONFIG (#11982)\n\nATTR_LOAD_BALANCING_CONFIG was deleted in bf7a42dbd."
    },
    {
      "commit": "c28a7e3e0677255c1d389053747654e678300e71",
      "tree": "0da812b7c30766bbe2442a74086f4f88b28ea725",
      "parents": [
        "8f6a16f846d7ffe28609c773dd1630b44cf5b2db"
      ],
      "author": {
        "name": "Kannan J",
        "email": "kannanjgithub@google.com",
        "time": "Wed Apr 02 04:40:41 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 02 10:10:41 2025 +0530"
      },
      "message": "okhttp: Per-rpc call option authority verification (#11754)\n\n"
    },
    {
      "commit": "8f6a16f846d7ffe28609c773dd1630b44cf5b2db",
      "tree": "ebe9eaf83aec4b7a0b3663af08a9dea6bc5ad74b",
      "parents": [
        "2448c8b6b9dd019a782c7e3824030e8b650ff700"
      ],
      "author": {
        "name": "Abhishek Agrawal",
        "email": "81427947+AgraVator@users.noreply.github.com",
        "time": "Tue Apr 01 10:57:39 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 01 16:27:39 2025 +0530"
      },
      "message": "Start 1.73.0 development cycle (#11987)\n\n"
    }
  ],
  "next": "2448c8b6b9dd019a782c7e3824030e8b650ff700"
}
