)]}'
{
  "commit": "b2565aa23a348d5e721e6a2de3cd2f4d962bb9c2",
  "tree": "e314d250327d25d03359f41021362c737bfd6ad5",
  "parents": [
    "1bd4692f927a4c6156bc25d18d36d9cba76405df"
  ],
  "author": {
    "name": "songzhendong",
    "email": "xiaodong12315@qq.com",
    "time": "Mon Aug 31 22:34:48 2026 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Aug 31 22:34:48 2026 +0800"
  },
  "message": "feat: native gRPC multi-backend failover via pick_first (#415)",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "37fce061087866b7b8d2ae5947428ec37870923a",
      "old_mode": 33188,
      "old_path": ".github/workflows/CI.yaml",
      "new_id": "2f2e95699190a93b327724b28ff19cb9bcec7092",
      "new_mode": 33188,
      "new_path": ".github/workflows/CI.yaml"
    },
    {
      "type": "modify",
      "old_id": "bfefb89062c933d2b1bd8510d6e3e764c64038e5",
      "old_mode": 33188,
      "old_path": "docs/en/setup/Configuration.md",
      "new_id": "7d521e4a2e97ea332b465295299c28e4a044fc78",
      "new_mode": 33188,
      "new_path": "docs/en/setup/Configuration.md"
    },
    {
      "type": "modify",
      "old_id": "089579e77ab13d89b3f2da86de6141c46e4d1427",
      "old_mode": 33188,
      "old_path": "docs/en/setup/Intrusive.md",
      "new_id": "d00688999f1174a1fd498df82f3fc8992fed8a43",
      "new_mode": 33188,
      "new_path": "docs/en/setup/Intrusive.md"
    },
    {
      "type": "modify",
      "old_id": "4e208eb35f9b95f49a97199a1f56f5ee598628f8",
      "old_mode": 33188,
      "old_path": "skywalking/agent/__init__.py",
      "new_id": "7a1d5a47dda5ff3eeb79e5a03d5e3f9d550a9f4e",
      "new_mode": 33188,
      "new_path": "skywalking/agent/__init__.py"
    },
    {
      "type": "modify",
      "old_id": "556c9d6f3c29e440b060ae6f7f8b061ee0cbdd90",
      "old_mode": 33188,
      "old_path": "skywalking/agent/protocol/__init__.py",
      "new_id": "2744c07f95d2d6e5315ad2adb428aaa2c8a1d567",
      "new_mode": 33188,
      "new_path": "skywalking/agent/protocol/__init__.py"
    },
    {
      "type": "modify",
      "old_id": "bd669d7a5de8390d81b77be46fc8467b56bd2794",
      "old_mode": 33188,
      "old_path": "skywalking/agent/protocol/grpc.py",
      "new_id": "0e7b7d45769d96d3fdb44893568db94efa43c868",
      "new_mode": 33188,
      "new_path": "skywalking/agent/protocol/grpc.py"
    },
    {
      "type": "modify",
      "old_id": "54198c4cc0958f87b954b52e7d9d084f6690448d",
      "old_mode": 33188,
      "old_path": "skywalking/agent/protocol/grpc_aio.py",
      "new_id": "f50106f794f92b6662da14d0b02b81738c87a738",
      "new_mode": 33188,
      "new_path": "skywalking/agent/protocol/grpc_aio.py"
    },
    {
      "type": "modify",
      "old_id": "fb77171a21e3a64b4ab4928fbb06eb632b145ccb",
      "old_mode": 33188,
      "old_path": "skywalking/bootstrap/hooks/uwsgi_hook.py",
      "new_id": "133137266c582c8caa95d0489203d2057ca59048",
      "new_mode": 33188,
      "new_path": "skywalking/bootstrap/hooks/uwsgi_hook.py"
    },
    {
      "type": "modify",
      "old_id": "7be0d0a4feedf129fc31cdb0ee3000eca89d1404",
      "old_mode": 33188,
      "old_path": "skywalking/client/grpc.py",
      "new_id": "6ceb23b356af7a39ce6d69365c32c648fbd38260",
      "new_mode": 33188,
      "new_path": "skywalking/client/grpc.py"
    },
    {
      "type": "modify",
      "old_id": "038e5c58f218cdd76881d39e06c055f6424dd625",
      "old_mode": 33188,
      "old_path": "skywalking/client/grpc_aio.py",
      "new_id": "a3b8bd563c4070defd683778b4309f299f8e7cd7",
      "new_mode": 33188,
      "new_path": "skywalking/client/grpc_aio.py"
    },
    {
      "type": "modify",
      "old_id": "461ccd5c4a347e1fc1b28ab058db05d20215ab9e",
      "old_mode": 33188,
      "old_path": "skywalking/config.py",
      "new_id": "9756e3024947fd7fe5c87a32d161f3d361d37722",
      "new_mode": 33188,
      "new_path": "skywalking/config.py"
    },
    {
      "type": "modify",
      "old_id": "d2d671d29d83ea2f57f21a713c8844cb7360bbfc",
      "old_mode": 33188,
      "old_path": "skywalking/plugins/sw_grpc.py",
      "new_id": "32a4bd758ee6518ed6b902d901a44b7896f94f72",
      "new_mode": 33188,
      "new_path": "skywalking/plugins/sw_grpc.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6d68a9d3f061a8e8f41ec4c04db91a5ed05cd773",
      "new_mode": 33188,
      "new_path": "skywalking/utils/grpc_channel.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "37f5b46bdb9bd242c7afe6dd04b7178eb39c6174",
      "new_mode": 33188,
      "new_path": "skywalking/utils/reporter_log.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "073f34825877fa5356c63b005e203ab9925c569f",
      "new_mode": 33188,
      "new_path": "tests/e2e/case/expected/service-sorted.yml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b99acf0d067cee0f507d694847bbd467e7962411",
      "new_mode": 33188,
      "new_path": "tests/e2e/case/grpc/failover/docker-compose.grpc.failover.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f26667adce4ff8ce0d358d379f28746cefa54ce9",
      "new_mode": 33188,
      "new_path": "tests/e2e/case/grpc/failover/e2e.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f5ba18c358ff7f8332b8f343312b8666780078a7",
      "new_mode": 33261,
      "new_path": "tests/e2e/case/grpc/failover/lib.sh"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9e25149aff53c6535742535c80549b4681c59f8f",
      "new_mode": 33261,
      "new_path": "tests/e2e/case/grpc/failover/verify-active.sh"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1a578edd79f6ad32e6147db76b9ab3df9ad6df4b",
      "new_mode": 33261,
      "new_path": "tests/e2e/case/grpc/failover/verify-standby.sh"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5378004e6b7f84cd78ee4226f4e96c29fc26d072",
      "new_mode": 33188,
      "new_path": "tests/unit/test_fork_support_env.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bd73fc5c3c3abee1fc0aff41f0fecdcc3c05759d",
      "new_mode": 33188,
      "new_path": "tests/unit/test_grpc_channel.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "795574cc2b9425c253bef857aef724f0b181ffab",
      "new_mode": 33188,
      "new_path": "tests/unit/test_grpc_ready_gate.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5258fe99a013e964e73be9ad4c67c39f0005e155",
      "new_mode": 33188,
      "new_path": "tests/unit/test_shutdown_queue.py"
    }
  ]
}
