)]}'
{
  "commit": "17dd143344dc27c8d3258366048450859bf50f98",
  "tree": "b810ce5c59b713a1d2f056ad60e8a786194aa934",
  "parents": [
    "f7a8afa86f78c362f08f5aaea3c345b44ebf7f6a"
  ],
  "author": {
    "name": "catpineapple",
    "email": "hudechao@selectdb.com",
    "time": "Wed Mar 25 11:35:40 2026 +0800"
  },
  "committer": {
    "name": "catpineapple",
    "email": "hudechao@selectdb.com",
    "time": "Wed Mar 25 11:35:40 2026 +0800"
  },
  "message": "feat(ddc): split CG service into internal headless and external service\n\nFor DDC ComputeGroups, separate the single service into two:\n- Internal headless service (original name) for cluster communication\n  and StatefulSet DNS-based pod discovery\n- External service (with -external suffix) for load-balanced access\n\nThis enables smooth operator upgrades: users pre-create the external\nservice, switch upstream traffic, then upgrade the operator. The\nreconcile logic handles the ClusterIP-to-headless migration by\ndetecting and recreating the service when needed.\n\nCo-Authored-By: catpineapple \u003ccatpineapple@users.noreply.github.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "06d49d9fef4692924abb012a7ba61505fd299e48",
      "old_mode": 33188,
      "old_path": "api/disaggregated/v1/unique_id.go",
      "new_id": "d6e537329de08acc96f2ec05b0a9da3369ff9037",
      "new_mode": 33188,
      "new_path": "api/disaggregated/v1/unique_id.go"
    },
    {
      "type": "modify",
      "old_id": "a2222c4c2663f1c01e133c2874f9cb8ce8ac4550",
      "old_mode": 33188,
      "old_path": "pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go",
      "new_id": "e59538cb4f791b6c08a698aef08f95baf0b4a351",
      "new_mode": 33188,
      "new_path": "pkg/controller/sub_controller/disaggregated_cluster/computegroups/controller.go"
    },
    {
      "type": "modify",
      "old_id": "984eb0b72d30875541529bb7b985ff431cdb53aa",
      "old_mode": 33188,
      "old_path": "pkg/controller/sub_controller/disaggregated_cluster/computegroups/service.go",
      "new_id": "dfe9964ef4fc1ecb13998e62445e2f7dd4b3a05b",
      "new_mode": 33188,
      "new_path": "pkg/controller/sub_controller/disaggregated_cluster/computegroups/service.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3205bf5a75458d21daa7ebeb3fdd65df54a7c01b",
      "new_mode": 33188,
      "new_path": "pkg/controller/sub_controller/disaggregated_cluster/computegroups/service_test.go"
    }
  ]
}
