{
  "repo": "tidbcloud/cluster-service-ng",
  "binary": "cluster_ng_server",
  "binary_path": "cmd/cluster_ng_server/main.go",
  "dependencies": {
    "SharedPoolService.CreateSharedPool": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "INSERT", "UPDATE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT", "DELETE"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit DAG workflow"]
        },
        {
          "name": "dataplane-manager",
          "target_interface": "DataPlaneService.ListNodePoolConfigs",
          "operation_type": "grpc_unary",
          "conditions": ["When dataplane not exists"],
          "operations": ["get node specs"]
        },
        {
          "name": "dataplane-manager",
          "target_interface": "DataPlaneService.ListNodePools",
          "operation_type": "grpc_unary",
          "conditions": ["When dataplane exists"],
          "operations": ["get node specs"]
        },
        {
          "name": "cluster-config-center",
          "target_interface": "ConfigService.GetDefaultVersion",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["get default template version"]
        }
      ]
    },
    "SharedPoolService.ListSharedPools": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "SharedPoolService.GetSharedPool": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "SharedPoolService.DeleteSharedPool": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE", "DELETE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT", "DELETE"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit delete DAG workflow"]
        }
      ]
    },
    "SharedPoolService.ScaleSharedPool": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit scale DAG workflow"]
        },
        {
          "name": "dataplane-manager",
          "target_interface": "DataPlaneService.GetNodePool",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["check node pool status"]
        }
      ]
    },
    "SharedPoolService.SetSharedPoolComponentQuota": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "SharedPoolService.SetSharedPoolComponentLabels": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "SharedPoolService.SetSharedPoolComponentNodeVersion": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "SharedPoolService.SetSharedPoolComponentConfigVersion": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit config update DAG workflow"]
        }
      ]
    },
    "SharedPoolService.CreateTiKVGroup": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "SharedPoolService.ApplySharedPool": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit apply DAG workflow"]
        }
      ]
    },
    "SharedPoolService.ListLightweightBackups": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        },
        "s3": {
          "conditions": ["Always"],
          "operations": ["LIST objects"]
        }
      },
      "services": [
        {
          "name": "dataplane-manager",
          "target_interface": "BucketService.GetBucket",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["get bucket info"]
        }
      ]
    },
    "SharedPoolService.CreateLightweightRestore": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "INSERT"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit restore DAG workflow"]
        }
      ]
    },
    "SharedPoolService.GetLightweightRestore": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "SharedPoolService.GetLightweightRestorePostActions": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "SharedPoolService.DeleteLightweightRestore": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "DELETE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit delete restore DAG workflow"]
        }
      ]
    },
    "SharedPoolService.CreateClassicRestore": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "INSERT"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit classic restore DAG workflow"]
        }
      ]
    },
    "SharedPoolService.GetClassicRestore": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "SharedPoolService.DeleteClassicRestore": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "DELETE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit delete DAG workflow"]
        }
      ]
    },
    "SharedPoolService.UpdateBackupGcSetting": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "SharedPoolService.GetBackupGcSetting": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "SharedPoolService.CheckPods": {
      "infrastructure": {
        "k8s": {
          "conditions": ["Always"],
          "operations": ["LIST pods"]
        }
      },
      "services": []
    },
    "SharedPoolService.CreateDMCluster": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "INSERT"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit DM cluster create DAG workflow"]
        }
      ]
    },
    "SharedPoolService.ListDMClusters": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "SharedPoolService.GetDMCluster": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "SharedPoolService.ScaleDMCluster": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit scale DAG workflow"]
        }
      ]
    },
    "SharedPoolService.DeleteDMCluster": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "DELETE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit delete DAG workflow"]
        }
      ]
    },
    "SharedPoolService.SetHPASpec": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "SharedPoolService.GetHPASpec": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "SharedPoolService.SetScaleOutConfig": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "SharedPoolService.SetHPAScaleBehavior": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "NodeInstanceGroupService.CreateNodeInstanceGroup": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "INSERT"]
        }
      },
      "services": []
    },
    "NodeInstanceGroupService.ListNodeInstanceGroups": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "NodeInstanceGroupService.DeprecateNodeInstanceGroup": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "NodeInstanceGroupService.SetNodeInstanceGroupStatus": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "NodeInstanceGroupService.ListDataplaneNodeInstanceGroups": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "NodeInstanceGroupService.SetDataplaneNodeInstanceGroupStatus": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "NodeInstanceGroupService.SetNodeInstanceGroupInstanceTypeStatus": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "NodeInstanceGroupService.DeleteNodeInstanceGroup": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "DELETE"]
        }
      },
      "services": []
    },
    "NodeInstanceGroupService.UpdateNodeInstanceGroup": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "TiDBClusterService.CreateTiDBCluster": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "INSERT"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit create TiDB cluster DAG workflow"]
        }
      ]
    },
    "TiDBClusterService.ListTiDBClusters": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "TiDBClusterService.GetTiDBCluster": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "TiDBClusterService.UpdateTiDBCluster": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit update DAG workflow"]
        }
      ]
    },
    "TiDBClusterService.DeleteTiDBCluster": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "DELETE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit delete DAG workflow"]
        }
      ]
    },
    "TiDBClusterService.GetTiDBClusterTiProxyNodeQuota": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "TiDBClusterService.SetAuditLogSetting": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit audit log update DAG workflow"]
        }
      ]
    },
    "TiDBClusterService.GetProviderRole": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "TiDBClusterService.CreateTiDBGroup": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "INSERT"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit create TiDB group DAG workflow"]
        }
      ]
    },
    "TiDBClusterService.ListTiDBGroups": {
      "infrastructure": {
        "mysql": {
          "conditions": [
            "cluster_id must be non-empty"
          ],
          "operations": [
            {
              "operation": "SELECT",
              "trigger": "Load the TiDB cluster row before listing the TiDB groups under it",
              "conditions": [
                "cluster_id is non-empty"
              ],
              "implementation": "server.ListTiDBGroups -> tidbClusterRepo.Load(ctx, clusterId, false)"
            },
            {
              "operation": "SELECT",
              "trigger": "List all TiDB group rows bound to the target cluster, including endpoint preload",
              "conditions": [
                "cluster load succeeded"
              ],
              "implementation": "server.ListTiDBGroups -> tidbGroupRepo.List(ctx, nil, nil, []string{clusterId}, nil, false)"
            }
          ]
        },
        "workflow_state": {
          "conditions": [
            "After TiDB groups are loaded"
          ],
          "operations": [
            {
              "operation": "QUERY",
              "trigger": "Overlay in-flight create/update/delete/component DAG state onto returned TiDB groups",
              "conditions": [
                "After TiDB groups are loaded"
              ],
              "implementation": "server.ListTiDBGroups -> getRunningDagIns(PlanCreateTiDBGroup/PlanUpdateTiDBGroup/PlanDeleteTiDBGroup/PlanUpdateComponent/PlanApplyComponent/PlanCreateComponent)"
            }
          ]
        }
      },
      "services": []
    },
    "TiDBClusterService.GetTiDBGroup": {
      "infrastructure": {
        "mysql": {
          "conditions": [
            "cluster_id and tidb_group_id must both be non-empty"
          ],
          "operations": [
            {
              "operation": "SELECT",
              "trigger": "Load the owning TiDB cluster before validating group ownership",
              "conditions": [
                "cluster_id and tidb_group_id are both non-empty"
              ],
              "implementation": "server.GetTiDBGroup -> tidbClusterRepo.Load(ctx, clusterId, false)"
            },
            {
              "operation": "SELECT",
              "trigger": "Load the TiDB group row and its endpoint payload",
              "conditions": [
                "Cluster load succeeded"
              ],
              "implementation": "server.GetTiDBGroup -> tidbGroupRepo.Load(ctx, tidbGroupId, false)"
            }
          ]
        },
        "workflow_state": {
          "conditions": [
            "After the TiDB group row is loaded"
          ],
          "operations": [
            {
              "operation": "QUERY",
              "trigger": "Merge in-flight update/apply/create/delete DAG state into the returned TiDB group shape",
              "conditions": [
                "After the TiDB group row is loaded"
              ],
              "implementation": "server.GetTiDBGroup -> getRunningDagIns(PlanUpdateTiDBGroup/PlanUpdateComponent/PlanApplyComponent/PlanCreateComponent/PlanDeleteTiDBGroup)"
            }
          ]
        }
      },
      "services": []
    },
    "TiDBClusterService.DeleteTiDBGroup": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "DELETE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit delete DAG workflow"]
        }
      ]
    },
    "TiDBClusterService.UpdateTiDBGroup": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit update DAG workflow"]
        }
      ]
    },
    "TiDBClusterService.ScaleTiDBGroup": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit scale DAG workflow"]
        }
      ]
    },
    "TiDBClusterService.ApplyTiDBGroup": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit apply DAG workflow"]
        }
      ]
    },
    "TiDBClusterService.CreatePrivateLinkService": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "INSERT"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "dataplane-manager",
          "target_interface": "PrivateLinkConnectionService.CreatePrivateLinkService",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["create private link service"]
        }
      ]
    },
    "TiDBClusterService.GetPrivateLinkService": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "TiDBClusterService.UpdatePrivateLinkService": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "TiDBClusterService.DeletePrivateLinkService": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "DELETE"]
        }
      },
      "services": [
        {
          "name": "dataplane-manager",
          "target_interface": "PrivateLinkConnectionService.DeletePrivateLinkService",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["delete private link service"]
        }
      ]
    },
    "TiDBClusterService.UpdateAutoBackupMetering": {
      "infrastructure": {
        "metering": {
          "conditions": ["Always"],
          "operations": ["WRITE metering data"]
        }
      },
      "services": []
    },
    "TiDBClusterService.CreateManualBackup": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "INSERT"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit manual backup DAG workflow"]
        }
      ]
    },
    "TiDBClusterService.GetManualBackup": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "TiDBClusterService.DeleteManualBackup": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "DELETE"]
        }
      },
      "services": []
    },
    "TiDBClusterService.CreateManualBackupRestore": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "INSERT"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit manual backup restore DAG workflow"]
        }
      ]
    },
    "TiDBClusterService.GetManualBackupRestore": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "TiDBClusterService.GetManualBackupRestorePostActions": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "TiDBClusterService.DeleteManualBackupRestore": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "DELETE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit delete restore DAG workflow"]
        }
      ]
    },
    "RuConfigService.GetRuConfig": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "RuConfigService.SetRuConfig": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "INSERT", "UPDATE"]
        }
      },
      "services": []
    },
    "RestoreService.TestClassicBackupAccess": {
      "infrastructure": {
        "s3": {
          "conditions": ["Always"],
          "operations": ["LIST objects", "GET object"]
        }
      },
      "services": []
    },
    "ExportService.ListExports": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "ExportService.GetExport": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "ExportService.CreateExport": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "INSERT"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Submit",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["submit export DAG workflow"]
        }
      ]
    },
    "ExportService.CancelExport": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        },
        "k8s_etcd": {
          "conditions": ["Always"],
          "operations": ["GET", "PUT"]
        }
      },
      "services": [
        {
          "name": "executor",
          "target_interface": "ExecutorService.Abort",
          "operation_type": "grpc_unary",
          "conditions": ["Always"],
          "operations": ["abort export task"]
        }
      ]
    },
    "TemplateService.GetComponentTemplate": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "TemplateService.ListComponentTemplateVersions": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "TemplateService.SetComponentTemplateVersionStatus": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "TemplateService.ListComponentTemplates": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "TemplateService.GetTemplate": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "TemplateService.ListTemplateVersions": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    },
    "TemplateService.SetTemplateVersionStatus": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT", "UPDATE"]
        }
      },
      "services": []
    },
    "TemplateService.ListTemplates": {
      "infrastructure": {
        "mysql": {
          "conditions": ["Always"],
          "operations": ["SELECT"]
        }
      },
      "services": []
    }
  }
}
