{
  "repo": "tidbcloud/tidb-management-service",
  "binary": "nextgen-global-service",
  "binary_path": "nextgen-global-service/cmd/nextgen-global-service/main.go",
  "surface_kind": "mixed_service",
  "type": "mixed_service",
  "services": [
    {
      "name": "NextgenGlobalLifecycle",
      "package": "main",
      "methods": [
        {
          "name": "Startup",
          "name_key": "NextgenGlobalLifecycle.Startup",
          "input": "config + cobra command flags",
          "output": "running gRPC server + optional dynamic config/workers",
          "type": "local"
        },
        {
          "name": "SetupGRPCServer",
          "name_key": "NextgenGlobalLifecycle.SetupGRPCServer",
          "input": "tiinf + DI graph",
          "output": "grpc.Server",
          "type": "local"
        },
        {
          "name": "StartDynamicConfig",
          "name_key": "NextgenGlobalLifecycle.StartDynamicConfig",
          "input": "dynamic config source",
          "output": "running dynamic config watcher",
          "type": "local"
        },
        {
          "name": "RunDBMigrate",
          "name_key": "NextgenGlobalLifecycle.RunDBMigrate",
          "input": "configured mysql",
          "output": "migrated schema",
          "type": "local"
        },
        {
          "name": "StartEventbus",
          "name_key": "NextgenGlobalLifecycle.StartEventbus",
          "input": "eventbus proxy address + WAL watcher",
          "output": "running eventbus + watcher",
          "type": "local"
        },
        {
          "name": "StartWorker",
          "name_key": "NextgenGlobalLifecycle.StartWorker",
          "input": "worker set",
          "output": "background workers started",
          "type": "local"
        },
        {
          "name": "RunWorkflow",
          "name_key": "NextgenGlobalLifecycle.RunWorkflow",
          "input": "workflow engine",
          "output": "leader-aware workflow runtime",
          "type": "local"
        }
      ]
    },
    {
      "name": "ClusterService",
      "package": "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1",
      "methods": [
        {
          "name": "CreateCluster",
          "name_key": "ClusterService.CreateCluster",
          "input": "CreateClusterRequest",
          "output": "Cluster"
        },
        {
          "name": "UpdateCluster",
          "name_key": "ClusterService.UpdateCluster",
          "input": "UpdateClusterRequest",
          "output": "Cluster"
        },
        {
          "name": "ListClusters",
          "name_key": "ClusterService.ListClusters",
          "input": "ListClustersRequest",
          "output": "ListClustersResponse"
        },
        {
          "name": "GetCluster",
          "name_key": "ClusterService.GetCluster",
          "input": "GetClusterRequest",
          "output": "Cluster"
        },
        {
          "name": "DeleteCluster",
          "name_key": "ClusterService.DeleteCluster",
          "input": "DeleteClusterRequest",
          "output": "Cluster"
        },
        {
          "name": "ChangeClusterPasswd",
          "name_key": "ClusterService.ChangeClusterPasswd",
          "input": "ChangeClusterPasswdRequest",
          "output": "ChangeClusterPasswdResponse"
        },
        {
          "name": "DeleteClusterBackup",
          "name_key": "ClusterService.DeleteClusterBackup",
          "input": "DeleteClusterBackupRequest",
          "output": "google.protobuf.Empty"
        },
        {
          "name": "ListClusterBackups",
          "name_key": "ClusterService.ListClusterBackups",
          "input": "ListClusterBackupsRequest",
          "output": "ListClusterBackupsResponse"
        },
        {
          "name": "RestoreCluster",
          "name_key": "ClusterService.RestoreCluster",
          "input": "RestoreClusterRequest",
          "output": "google.protobuf.Empty"
        },
        {
          "name": "TestClassicBackupAccess",
          "name_key": "ClusterService.TestClassicBackupAccess",
          "input": "TestClassicBackupAccessRequest",
          "output": "TestClassicBackupAccessResponse"
        },
        {
          "name": "RestoreStatus",
          "name_key": "ClusterService.RestoreStatus",
          "input": "RestoreStatusRequest",
          "output": "RestoreStatusResponse"
        },
        {
          "name": "StopRestoreCluster",
          "name_key": "ClusterService.StopRestoreCluster",
          "input": "StopRestoreClusterRequest",
          "output": "google.protobuf.Empty"
        },
        {
          "name": "GetBackupSetting",
          "name_key": "ClusterService.GetBackupSetting",
          "input": "GetBackupSettingRequest",
          "output": "BackupSetting"
        },
        {
          "name": "UpdateBackupSetting",
          "name_key": "ClusterService.UpdateBackupSetting",
          "input": "UpdateBackupSettingRequest",
          "output": "BackupSetting"
        },
        {
          "name": "GetProviderRole",
          "name_key": "ClusterService.GetProviderRole",
          "input": "GetProviderRoleRequest",
          "output": "ProviderRole"
        },
        {
          "name": "GetCaCertificateDownloadUrl",
          "name_key": "ClusterService.GetCaCertificateDownloadUrl",
          "input": "GetCaCertificateDownloadUrlRequest",
          "output": "CaCertificateDownloadUrl"
        },
        {
          "name": "UpdateClusterProject",
          "name_key": "ClusterService.UpdateClusterProject",
          "input": "UpdateClusterProjectRequest",
          "output": "UpdateClusterProjectResponse"
        },
        {
          "name": "UpdateClusterDualLayerEncryption",
          "name_key": "ClusterService.UpdateClusterDualLayerEncryption",
          "input": "UpdateClusterDualLayerEncryptionRequest",
          "output": "UpdateClusterDualLayerEncryptionResponse"
        },
        {
          "name": "GetClusterEncryptionStatus",
          "name_key": "ClusterService.GetClusterEncryptionStatus",
          "input": "GetClusterEncryptionStatusRequest",
          "output": "ClusterEncryptionStatus"
        }
      ]
    },
    {
      "name": "BackupService",
      "package": "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1",
      "methods": [
        {
          "name": "ListBackups",
          "name_key": "BackupService.ListBackups",
          "input": "ListBackupsRequest",
          "output": "ListBackupsResponse"
        },
        {
          "name": "DeleteBackup",
          "name_key": "BackupService.DeleteBackup",
          "input": "DeleteBackupRequest",
          "output": "google.protobuf.Empty"
        },
        {
          "name": "ListNotCleanupBackupSettings",
          "name_key": "BackupService.ListNotCleanupBackupSettings",
          "input": "ListNotCleanupBackupSettingsRequest",
          "output": "ListNotCleanupBackupSettingsResponse"
        },
        {
          "name": "BatchUpdateBackupSettingNames",
          "name_key": "BackupService.BatchUpdateBackupSettingNames",
          "input": "BatchUpdateBackupSettingNamesRequest",
          "output": "google.protobuf.Empty"
        },
        {
          "name": "ListBackupPolicies",
          "name_key": "BackupService.ListBackupPolicies",
          "input": "ListBackupPoliciesRequest",
          "output": "ListBackupPoliciesResponse"
        },
        {
          "name": "CreateManualBackup",
          "name_key": "BackupService.CreateManualBackup",
          "input": "CreateManualBackupRequest",
          "output": "CreateManualBackupResponse"
        }
      ]
    },
    {
      "name": "CustomerManagedEncryptionKeyService",
      "package": "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1",
      "methods": [
        {
          "name": "GetCmekAccessIamPrincipal",
          "name_key": "CustomerManagedEncryptionKeyService.GetCmekAccessIamPrincipal",
          "input": "GetCmekAccessIamPrincipalRequest",
          "output": "CmekAccessIamPrincipal"
        },
        {
          "name": "VerifyCmekAccessIamPrincipal",
          "name_key": "CustomerManagedEncryptionKeyService.VerifyCmekAccessIamPrincipal",
          "input": "VerifyCmekAccessIamPrincipalRequest",
          "output": "VerifyCmekAccessIamPrincipalResponse"
        },
        {
          "name": "GetCustomerManagedEncryptionKey",
          "name_key": "CustomerManagedEncryptionKeyService.GetCustomerManagedEncryptionKey",
          "input": "GetCustomerManagedEncryptionKeyRequest",
          "output": "CustomerManagedEncryptionKey"
        },
        {
          "name": "GetCustomerManagedEncryptionKeyByClusterId",
          "name_key": "CustomerManagedEncryptionKeyService.GetCustomerManagedEncryptionKeyByClusterId",
          "input": "GetCustomerManagedEncryptionKeyByClusterIdRequest",
          "output": "CustomerManagedEncryptionKey"
        },
        {
          "name": "ListCustomerManagedEncryptionKeys",
          "name_key": "CustomerManagedEncryptionKeyService.ListCustomerManagedEncryptionKeys",
          "input": "ListCustomerManagedEncryptionKeysRequest",
          "output": "ListCustomerManagedEncryptionKeysResponse"
        }
      ]
    },
    {
      "name": "ExportService",
      "package": "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1",
      "methods": [
        {
          "name": "ListExports",
          "name_key": "ExportService.ListExports",
          "input": "ListExportsRequest",
          "output": "ListExportsResponse"
        },
        {
          "name": "GetExport",
          "name_key": "ExportService.GetExport",
          "input": "GetExportRequest",
          "output": "Export"
        },
        {
          "name": "CreateExport",
          "name_key": "ExportService.CreateExport",
          "input": "CreateExportRequest",
          "output": "Export"
        },
        {
          "name": "DeleteExport",
          "name_key": "ExportService.DeleteExport",
          "input": "DeleteExportRequest",
          "output": "Export"
        },
        {
          "name": "CancelExport",
          "name_key": "ExportService.CancelExport",
          "input": "CancelExportRequest",
          "output": "Export"
        }
      ]
    },
    {
      "name": "DatabaseAuditLogService",
      "package": "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1",
      "methods": [
        {
          "name": "GetAuditLogSetting",
          "name_key": "DatabaseAuditLogService.GetAuditLogSetting",
          "input": "GetAuditLogSettingRequest",
          "output": "AuditLogSetting"
        },
        {
          "name": "UpdateAuditLogSetting",
          "name_key": "DatabaseAuditLogService.UpdateAuditLogSetting",
          "input": "UpdateAuditLogSettingRequest",
          "output": "AuditLogSetting"
        },
        {
          "name": "ListAuditLogFilterRules",
          "name_key": "DatabaseAuditLogService.ListAuditLogFilterRules",
          "input": "ListAuditLogFilterRulesRequest",
          "output": "ListAuditLogFilterRulesResponse"
        },
        {
          "name": "CreateAuditLogFilterRule",
          "name_key": "DatabaseAuditLogService.CreateAuditLogFilterRule",
          "input": "CreateAuditLogFilterRuleRequest",
          "output": "AuditLogFilterRule"
        },
        {
          "name": "DeleteAuditLogFilterRule",
          "name_key": "DatabaseAuditLogService.DeleteAuditLogFilterRule",
          "input": "DeleteAuditLogFilterRuleRequest",
          "output": "google.protobuf.Empty"
        },
        {
          "name": "UpdateAuditLogFilterRule",
          "name_key": "DatabaseAuditLogService.UpdateAuditLogFilterRule",
          "input": "UpdateAuditLogFilterRuleRequest",
          "output": "AuditLogFilterRule"
        }
      ]
    },
    {
      "name": "LogRedactionPolicyService",
      "package": "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1",
      "methods": [
        {
          "name": "GetLogRedactionPolicy",
          "name_key": "LogRedactionPolicyService.GetLogRedactionPolicy",
          "input": "GetLogRedactionPolicyRequest",
          "output": "LogRedactionPolicy"
        },
        {
          "name": "UpdateLogRedactionPolicy",
          "name_key": "LogRedactionPolicyService.UpdateLogRedactionPolicy",
          "input": "UpdateLogRedactionPolicyRequest",
          "output": "LogRedactionPolicy"
        }
      ]
    },
    {
      "name": "PrivateLinkConnectionService",
      "package": "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1",
      "methods": [
        {
          "name": "ListPrivateLinkServices",
          "name_key": "PrivateLinkConnectionService.ListPrivateLinkServices",
          "input": "ListPrivateLinkServicesRequest",
          "output": "ListPrivateLinkServicesResponse"
        },
        {
          "name": "CreatePrivateLinkConnection",
          "name_key": "PrivateLinkConnectionService.CreatePrivateLinkConnection",
          "input": "CreatePrivateLinkConnectionRequest",
          "output": "PrivateLinkConnection"
        },
        {
          "name": "DeletePrivateLinkConnection",
          "name_key": "PrivateLinkConnectionService.DeletePrivateLinkConnection",
          "input": "DeletePrivateLinkConnectionRequest",
          "output": "PrivateLinkConnection"
        },
        {
          "name": "GetPrivateLinkConnection",
          "name_key": "PrivateLinkConnectionService.GetPrivateLinkConnection",
          "input": "GetPrivateLinkConnectionRequest",
          "output": "PrivateLinkConnection"
        },
        {
          "name": "ListPrivateLinkConnections",
          "name_key": "PrivateLinkConnectionService.ListPrivateLinkConnections",
          "input": "ListPrivateLinkConnectionsRequest",
          "output": "ListPrivateLinkConnectionsResponse"
        }
      ]
    },
    {
      "name": "PublicConnectionSettingService",
      "package": "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1",
      "methods": [
        {
          "name": "GetPublicConnectionSetting",
          "name_key": "PublicConnectionSettingService.GetPublicConnectionSetting",
          "input": "GetPublicConnectionSettingRequest",
          "output": "PublicConnectionSetting"
        },
        {
          "name": "UpdatePublicConnectionSetting",
          "name_key": "PublicConnectionSettingService.UpdatePublicConnectionSetting",
          "input": "UpdatePublicConnectionSettingRequest",
          "output": "PublicConnectionSetting"
        }
      ]
    },
    {
      "name": "RcuQuotaService",
      "package": "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1",
      "methods": [
        {
          "name": "GetRcuQuota",
          "name_key": "RcuQuotaService.GetRcuQuota",
          "input": "GetRcuQuotaRequest",
          "output": "RcuQuota"
        },
        {
          "name": "ListOrgRcuQuotas",
          "name_key": "RcuQuotaService.ListOrgRcuQuotas",
          "input": "ListOrgRcuQuotasRequest",
          "output": "ListOrgRcuQuotasResponse"
        },
        {
          "name": "UpdateRcuQuota",
          "name_key": "RcuQuotaService.UpdateRcuQuota",
          "input": "UpdateRcuQuotaRequest",
          "output": "RcuQuota"
        }
      ]
    },
    {
      "name": "RegionService",
      "package": "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1",
      "methods": [
        {
          "name": "GetRegionByLogicalName",
          "name_key": "RegionService.GetRegionByLogicalName",
          "input": "GetRegionByLogicalNameRequest",
          "output": "global.common.v1.Region"
        },
        {
          "name": "ListRegions",
          "name_key": "RegionService.ListRegions",
          "input": "ListRegionsRequest",
          "output": "ListRegionsResponse"
        },
        {
          "name": "ListCloudProviders",
          "name_key": "RegionService.ListCloudProviders",
          "input": "ListCloudProvidersRequest",
          "output": "ListCloudProvidersResponse"
        },
        {
          "name": "RegisterCloudProvider",
          "name_key": "RegionService.RegisterCloudProvider",
          "input": "RegisterCloudProviderRequest",
          "output": "global.common.v1.CloudProvider"
        },
        {
          "name": "RegisterRegion",
          "name_key": "RegionService.RegisterRegion",
          "input": "RegisterRegionRequest",
          "output": "global.common.v1.Region"
        },
        {
          "name": "UpdateRegion",
          "name_key": "RegionService.UpdateRegion",
          "input": "UpdateRegionRequest",
          "output": "global.common.v1.Region"
        },
        {
          "name": "DeleteRegion",
          "name_key": "RegionService.DeleteRegion",
          "input": "DeleteRegionRequest",
          "output": "google.protobuf.Empty"
        },
        {
          "name": "GetRegionByClusterId",
          "name_key": "RegionService.GetRegionByClusterId",
          "input": "GetRegionByClusterIdRequest",
          "output": "global.common.v1.Region"
        },
        {
          "name": "SelectRegionByOrgId",
          "name_key": "RegionService.SelectRegionByOrgId",
          "input": "SelectRegionByOrgIdRequest",
          "output": "global.common.v1.Region"
        },
        {
          "name": "UpdateRegionOpsAuditLogSetting",
          "name_key": "RegionService.UpdateRegionOpsAuditLogSetting",
          "input": "UpdateRegionOpsAuditLogSettingRequest",
          "output": "UpdateRegionOpsAuditLogSettingResponse"
        },
        {
          "name": "RegisterRegionProviderIdentity",
          "name_key": "RegionService.RegisterRegionProviderIdentity",
          "input": "RegisterRegionProviderIdentityRequest",
          "output": "RegionProviderIdentity"
        },
        {
          "name": "ListRegionProviderIdentities",
          "name_key": "RegionService.ListRegionProviderIdentities",
          "input": "ListRegionProviderIdentitiesRequest",
          "output": "ListRegionProviderIdentitiesResponse"
        },
        {
          "name": "ListRegionCapacities",
          "name_key": "RegionService.ListRegionCapacities",
          "input": "ListRegionCapacitiesRequest",
          "output": "ListRegionCapacitiesResponse"
        }
      ]
    },
    {
      "name": "ResourcePoolService",
      "package": "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1",
      "methods": [
        {
          "name": "CreateResourcePool",
          "name_key": "ResourcePoolService.CreateResourcePool",
          "input": "CreateResourcePoolRequest",
          "output": "ResourcePoolProfile"
        },
        {
          "name": "ListResourcePools",
          "name_key": "ResourcePoolService.ListResourcePools",
          "input": "ListResourcePoolsRequest",
          "output": "ListResourcePoolsResponse"
        },
        {
          "name": "GetResourcePool",
          "name_key": "ResourcePoolService.GetResourcePool",
          "input": "GetResourcePoolRequest",
          "output": "ResourcePoolProfile"
        },
        {
          "name": "UpdateResourcePoolName",
          "name_key": "ResourcePoolService.UpdateResourcePoolName",
          "input": "UpdateResourcePoolNameRequest",
          "output": "ResourcePool"
        },
        {
          "name": "UpdateResourcePoolInstanceLimit",
          "name_key": "ResourcePoolService.UpdateResourcePoolInstanceLimit",
          "input": "UpdateResourcePoolInstanceLimitRequest",
          "output": "ResourcePool"
        },
        {
          "name": "DeleteResourcePool",
          "name_key": "ResourcePoolService.DeleteResourcePool",
          "input": "DeleteResourcePoolRequest",
          "output": "ResourcePool"
        },
        {
          "name": "ListOwnerResourcePools",
          "name_key": "ResourcePoolService.ListOwnerResourcePools",
          "input": "ListOwnerResourcePoolsRequest",
          "output": "ListOwnerResourcePoolsResponse"
        },
        {
          "name": "UpdateOrgDefaultResourcePool",
          "name_key": "ResourcePoolService.UpdateOrgDefaultResourcePool",
          "input": "UpdateOrgDefaultResourcePoolRequest",
          "output": "ResourcePoolStrategy"
        }
      ]
    }
  ],
  "extensions": {
    "notes": [
      "DynamicConfig.Enable adds a separate startup path before the binary enters grpc-server-only gating.",
      "DB migration, eventbus, audit log setup, worker startup, and workflow startup are all skipped when --grpc-server-only is set."
    ]
  }
}
