)]}'
{
  "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.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bb44071a484968476d02fe784d3c17f0d8044c46",
      "old_mode": 33188,
      "old_path": "xds/src/main/java/io/grpc/xds/CdsLoadBalancer2.java",
      "new_id": "c50f844d388469e1cdc4160d5567f54073ee85bb",
      "new_mode": 33188,
      "new_path": "xds/src/main/java/io/grpc/xds/CdsLoadBalancer2.java"
    },
    {
      "type": "modify",
      "old_id": "01bd2ab27f682fcd3a677f45f25fea9e2046850e",
      "old_mode": 33188,
      "old_path": "xds/src/main/java/io/grpc/xds/CdsLoadBalancerProvider.java",
      "new_id": "9b242822f6c4d77fd01cffe024501e5c6fe9b3b7",
      "new_mode": 33188,
      "new_path": "xds/src/main/java/io/grpc/xds/CdsLoadBalancerProvider.java"
    },
    {
      "type": "modify",
      "old_id": "035ff76c585e9dc6ad9f1c6b2f5689fb8193e3da",
      "old_mode": 33188,
      "old_path": "xds/src/main/java/io/grpc/xds/RingHashLoadBalancerProvider.java",
      "new_id": "bb4f8de5a5f2400d595d486b6855803e73a7abcb",
      "new_mode": 33188,
      "new_path": "xds/src/main/java/io/grpc/xds/RingHashLoadBalancerProvider.java"
    },
    {
      "type": "modify",
      "old_id": "3f2b2d8fd7e703d670a1a82dd38fb55329b4c1e9",
      "old_mode": 33188,
      "old_path": "xds/src/main/java/io/grpc/xds/XdsClusterResource.java",
      "new_id": "a5220515b6c3d4aeeb0f93361c7c733c2291375a",
      "new_mode": 33188,
      "new_path": "xds/src/main/java/io/grpc/xds/XdsClusterResource.java"
    },
    {
      "type": "modify",
      "old_id": "1f464aa13215f708011775636a7280a616d4f421",
      "old_mode": 33188,
      "old_path": "xds/src/main/java/io/grpc/xds/XdsConfig.java",
      "new_id": "d184f08de55a8bef6fe2f31db6a83cec00728533",
      "new_mode": 33188,
      "new_path": "xds/src/main/java/io/grpc/xds/XdsConfig.java"
    },
    {
      "type": "modify",
      "old_id": "45ae7074d16e59c6e583231c249fd3287a237aa0",
      "old_mode": 33188,
      "old_path": "xds/src/main/java/io/grpc/xds/XdsDependencyManager.java",
      "new_id": "0428852648d3dff18cb0fb95997d26269ec18bd4",
      "new_mode": 33188,
      "new_path": "xds/src/main/java/io/grpc/xds/XdsDependencyManager.java"
    },
    {
      "type": "modify",
      "old_id": "a14abf95f415da911fe12a1f06fd57339257ed28",
      "old_mode": 33188,
      "old_path": "xds/src/main/java/io/grpc/xds/XdsNameResolver.java",
      "new_id": "37a8e19ef3f826c47f6458dab9d9a9fdc407067c",
      "new_mode": 33188,
      "new_path": "xds/src/main/java/io/grpc/xds/XdsNameResolver.java"
    },
    {
      "type": "modify",
      "old_id": "479bde76ce56dbb5ccd7bc3f87b474a1fef387e8",
      "old_mode": 33188,
      "old_path": "xds/src/test/java/io/grpc/xds/CdsLoadBalancer2Test.java",
      "new_id": "f9a09f704a7e325abd2f2107d15798795d91940a",
      "new_mode": 33188,
      "new_path": "xds/src/test/java/io/grpc/xds/CdsLoadBalancer2Test.java"
    },
    {
      "type": "modify",
      "old_id": "006440be6c1583aece6b232beb5f5facf6b068cf",
      "old_mode": 33188,
      "old_path": "xds/src/test/java/io/grpc/xds/GrpcXdsClientImplTestBase.java",
      "new_id": "32361684a6dca549d7553ba30d7bc8c20bea0a85",
      "new_mode": 33188,
      "new_path": "xds/src/test/java/io/grpc/xds/GrpcXdsClientImplTestBase.java"
    },
    {
      "type": "modify",
      "old_id": "3036db5b09f465c66a44a0feeeb8243dfd083dad",
      "old_mode": 33188,
      "old_path": "xds/src/test/java/io/grpc/xds/RingHashLoadBalancerProviderTest.java",
      "new_id": "66c9c5c537ec3f79e910b289bd2a3d51a0adf7f8",
      "new_mode": 33188,
      "new_path": "xds/src/test/java/io/grpc/xds/RingHashLoadBalancerProviderTest.java"
    },
    {
      "type": "modify",
      "old_id": "aea1ad66d725d33e4e15bddef59245ea4cbff3dc",
      "old_mode": 33188,
      "old_path": "xds/src/test/java/io/grpc/xds/XdsDependencyManagerTest.java",
      "new_id": "8ac0f8c9d8c42e7c721dff2768b2c5808f32f7d3",
      "new_mode": 33188,
      "new_path": "xds/src/test/java/io/grpc/xds/XdsDependencyManagerTest.java"
    },
    {
      "type": "modify",
      "old_id": "ec1ccd7c6d058296d281d688d7481fcd5fa2c402",
      "old_mode": 33188,
      "old_path": "xds/src/test/java/io/grpc/xds/XdsTestUtils.java",
      "new_id": "e85058f0f3f22c35d72f64db10bd78046b7f4292",
      "new_mode": 33188,
      "new_path": "xds/src/test/java/io/grpc/xds/XdsTestUtils.java"
    }
  ]
}
