{
  "repo": "tidbcloud/tidb-operator-cse",
  "binary": "scheduler",
  "binary_path": "cmd/scheduler/main.go",
  "dependencies": {
    "SchedulerLifecycle.BootstrapClients": {
      "infrastructure": {},
      "services": []
    },
    "SchedulerLifecycle.ServeExtenderAPI": {
      "infrastructure": {},
      "services": []
    },
    "SchedulerService.FilterNodes": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "GET/LIST Pod, Node, PersistentVolumeClaim",
            "target": "core/v1 scheduling inputs",
            "conditions": [
              "Always"
            ],
            "implementation": "pkg/scheduler/predicates/ha.go:80"
          },
          {
            "operation": "UPDATE PersistentVolumeClaim",
            "target": "PVC scheduling lock annotation",
            "conditions": [
              "When HA predicate acquires scheduling lock"
            ],
            "implementation": "pkg/scheduler/predicates/ha.go:280"
          },
          {
            "operation": "CREATE Event",
            "target": "scheduler warning events",
            "conditions": [
              "When a predicate returns an error"
            ],
            "implementation": "pkg/scheduler/scheduler.go:124"
          }
        ],
        "operator_api": [
          {
            "operation": "GET TidbCluster",
            "target": "pingcap.com/v1alpha1 TidbCluster",
            "conditions": [
              "When predicate logic needs replica counts, topology annotations, or stable-scheduling history"
            ],
            "implementation": "pkg/scheduler/predicates/ha.go:121"
          }
        ]
      },
      "services": []
    },
    "SchedulerService.PreemptNodes": {
      "infrastructure": {
        "kubernetes_api": [
          {
            "operation": "GET Node",
            "target": "candidate nodes supplied by kube-scheduler",
            "conditions": [
              "Always"
            ],
            "implementation": "pkg/scheduler/scheduler.go:202"
          }
        ],
        "operator_api": [
          {
            "operation": "GET TidbCluster",
            "target": "pingcap.com/v1alpha1 TidbCluster",
            "conditions": [
              "When predicate logic needs cluster topology or stable scheduling history"
            ],
            "implementation": "pkg/scheduler/predicates/ha.go:121"
          }
        ]
      },
      "services": []
    },
    "SchedulerService.PrioritizeNodes": {
      "infrastructure": {},
      "services": []
    },
    "DebugService.PprofIndex": {
      "infrastructure": {},
      "services": []
    },
    "DebugService.PprofCmdline": {
      "infrastructure": {},
      "services": []
    },
    "DebugService.PprofProfile": {
      "infrastructure": {},
      "services": []
    },
    "DebugService.PprofSymbol": {
      "infrastructure": {},
      "services": []
    },
    "DebugService.PprofTrace": {
      "infrastructure": {},
      "services": []
    }
  },
  "notes": [
    "FilterNodes is backed by HAScheduling and optional StableScheduling predicates, so the method genuinely reads cluster state and mutates PVC annotations rather than acting as a pure stateless filter.",
    "PreemptNodes re-runs the same predicate filtering over NodeNameToVictims after fetching concrete Node objects from the apiserver.",
    "PrioritizeNodes intentionally returns zero scores for all nodes in this implementation."
  ]
}
