[
    {
        "key": "client-urls",
        "type": "string"
    },
    {
        "key": "peer-urls",
        "type": "string"
    },
    {
        "key": "advertise-client-urls",
        "type": "string"
    },
    {
        "key": "advertise-peer-urls",
        "type": "string"
    },
    {
        "key": "name",
        "type": "string"
    },
    {
        "key": "data-dir",
        "type": "string"
    },
    {
        "key": "initial-cluster",
        "type": "string"
    },
    {
        "key": "initial-cluster-state",
        "type": "string"
    },
    {
        "key": "initial-cluster-token",
        "type": "string"
    },
    {
        "key": "join",
        "type": "string",
        "comment": "Join to an existing pd cluster, a string of endpoints."
    },
    {
        "key": "lease",
        "type": "int",
        "comment": "LeaderLease time, if leader doesn't update its TTL\nin etcd after lease time, etcd will expire the leader key\nand other servers can campaign the leader again.\nEtcd only supports seconds TTL, so here is second too."
    },
    {
        "key": "log.level",
        "type": "string"
    },
    {
        "key": "log.format",
        "type": "string"
    },
    {
        "key": "log.disable-timestamp",
        "type": "bool"
    },
    {
        "key": "log.file.filename",
        "type": "string"
    },
    {
        "key": "log.file.max-size",
        "type": "int"
    },
    {
        "key": "log.file.max-days",
        "type": "int"
    },
    {
        "key": "log.file.max-backups",
        "type": "int"
    },
    {
        "key": "log.development",
        "type": "bool"
    },
    {
        "key": "log.disable-caller",
        "type": "bool"
    },
    {
        "key": "log.disable-stacktrace",
        "type": "bool"
    },
    {
        "key": "log.disable-error-verbose",
        "type": "bool"
    },
    {
        "key": "log.error-output-path",
        "type": "string"
    },
    {
        "key": "log-file",
        "type": "string",
        "comment": "Backward compatibility."
    },
    {
        "key": "log-level",
        "type": "string"
    },
    {
        "key": "max-concurrent-tso-proxy-streamings",
        "type": "int",
        "comment": "MaxConcurrentTSOProxyStreamings is the maximum number of concurrent TSO proxy streaming process routines allowed.\nExceeding this limit will result in an error being returned to the client when a new client starts a TSO streaming.\nSet this to 0 will disable TSO Proxy.\nSet this to the negative value to disable the limit."
    },
    {
        "key": "tso-proxy-recv-from-client-timeout",
        "type": "string",
        "comment": "TSOProxyRecvFromClientTimeout is the timeout for the TSO proxy to receive a tso request from a client via grpc TSO stream.\nAfter the timeout, the TSO proxy will close the grpc TSO stream."
    },
    {
        "key": "tso-save-interval",
        "type": "string",
        "comment": "TSOSaveInterval is the interval to save timestamp."
    },
    {
        "key": "tso-update-physical-interval",
        "type": "string",
        "comment": "The interval to update physical part of timestamp. Usually, this config should not be set.\nAt most 1\u003c\u003c18 (262144) TSOs can be generated in the interval. The smaller the value, the\nmore TSOs provided, and at the same time consuming more CPU time.\nThis config is only valid in 1ms to 10s. If it's configured too long or too short, it will\nbe automatically clamped to the range."
    },
    {
        "key": "enable-local-tso",
        "type": "bool",
        "comment": "EnableLocalTSO is used to enable the Local TSO Allocator feature,\nwhich allows the PD server to generate Local TSO for certain DC-level transactions.\nTo make this feature meaningful, user has to set the \"zone\" label for the PD server\nto indicate which DC this PD belongs to."
    },
    {
        "key": "metric.job",
        "type": "string"
    },
    {
        "key": "metric.address",
        "type": "string"
    },
    {
        "key": "metric.interval",
        "type": "string"
    },
    {
        "key": "schedule.max-snapshot-count",
        "type": "int"
    },
    {
        "key": "schedule.max-pending-peer-count",
        "type": "int"
    },
    {
        "key": "schedule.max-merge-region-size",
        "type": "int"
    },
    {
        "key": "schedule.max-merge-region-keys",
        "type": "int"
    },
    {
        "key": "schedule.split-merge-interval",
        "type": "string"
    },
    {
        "key": "schedule.switch-witness-interval",
        "type": "string"
    },
    {
        "key": "schedule.enable-one-way-merge",
        "type": "bool"
    },
    {
        "key": "schedule.enable-cross-table-merge",
        "type": "bool"
    },
    {
        "key": "schedule.patrol-region-interval",
        "type": "string"
    },
    {
        "key": "schedule.max-store-down-time",
        "type": "string"
    },
    {
        "key": "schedule.max-store-preparing-time",
        "type": "string"
    },
    {
        "key": "schedule.leader-schedule-limit",
        "type": "int"
    },
    {
        "key": "schedule.leader-schedule-policy",
        "type": "string"
    },
    {
        "key": "schedule.region-schedule-limit",
        "type": "int"
    },
    {
        "key": "schedule.witness-schedule-limit",
        "type": "int"
    },
    {
        "key": "schedule.replica-schedule-limit",
        "type": "int"
    },
    {
        "key": "schedule.merge-schedule-limit",
        "type": "int"
    },
    {
        "key": "schedule.hot-region-schedule-limit",
        "type": "int"
    },
    {
        "key": "schedule.affinity-schedule-limit",
        "type": "int"
    },
    {
        "key": "schedule.hot-region-cache-hits-threshold",
        "type": "int"
    },
    {
        "key": "schedule.store-balance-rate",
        "type": "float"
    },
    {
        "key": "schedule.store-limit",
        "type": "json"
    },
    {
        "key": "schedule.tolerant-size-ratio",
        "type": "float"
    },
    {
        "key": "schedule.low-space-ratio",
        "type": "float"
    },
    {
        "key": "schedule.high-space-ratio",
        "type": "float"
    },
    {
        "key": "schedule.region-score-formula-version",
        "type": "string"
    },
    {
        "key": "schedule.scheduler-max-waiting-operator",
        "type": "int"
    },
    {
        "key": "schedule.disable-raft-learner",
        "type": "bool"
    },
    {
        "key": "schedule.disable-remove-down-replica",
        "type": "bool"
    },
    {
        "key": "schedule.disable-replace-offline-replica",
        "type": "bool"
    },
    {
        "key": "schedule.disable-make-up-replica",
        "type": "bool"
    },
    {
        "key": "schedule.disable-remove-extra-replica",
        "type": "bool"
    },
    {
        "key": "schedule.disable-location-replacement",
        "type": "bool"
    },
    {
        "key": "schedule.enable-remove-down-replica",
        "type": "bool"
    },
    {
        "key": "schedule.enable-replace-offline-replica",
        "type": "bool"
    },
    {
        "key": "schedule.enable-make-up-replica",
        "type": "bool"
    },
    {
        "key": "schedule.enable-remove-extra-replica",
        "type": "bool"
    },
    {
        "key": "schedule.enable-location-replacement",
        "type": "bool"
    },
    {
        "key": "schedule.enable-debug-metrics",
        "type": "bool"
    },
    {
        "key": "schedule.enable-joint-consensus",
        "type": "bool"
    },
    {
        "key": "schedule.enable-tikv-split-region",
        "type": "bool"
    },
    {
        "key": "schedule.enable-heartbeat-breakdown-metrics",
        "type": "bool"
    },
    {
        "key": "schedule.enable-heartbeat-concurrent-runner",
        "type": "bool"
    },
    {
        "key": "schedule.schedulers",
        "type": "json"
    },
    {
        "key": "schedule.hot-regions-write-interval",
        "type": "string"
    },
    {
        "key": "schedule.hot-regions-reserved-days",
        "type": "int"
    },
    {
        "key": "schedule.max-movable-hot-peer-size",
        "type": "int"
    },
    {
        "key": "schedule.enable-diagnostic",
        "type": "bool"
    },
    {
        "key": "schedule.enable-witness",
        "type": "bool"
    },
    {
        "key": "schedule.slow-store-evicting-affected-store-ratio-threshold",
        "type": "float"
    },
    {
        "key": "schedule.store-limit-version",
        "type": "string"
    },
    {
        "key": "schedule.halt-scheduling",
        "type": "bool"
    },
    {
        "key": "schedule.patrol-region-worker-count",
        "type": "int"
    },
    {
        "key": "schedule.max-affinity-merge-region-size",
        "type": "int"
    },
    {
        "key": "replication.max-replicas",
        "type": "int"
    },
    {
        "key": "replication.location-labels",
        "type": "json"
    },
    {
        "key": "replication.strictly-match-label",
        "type": "bool"
    },
    {
        "key": "replication.enable-placement-rules",
        "type": "bool"
    },
    {
        "key": "replication.enable-placement-rules-cache",
        "type": "bool"
    },
    {
        "key": "replication.isolation-level",
        "type": "string"
    },
    {
        "key": "pd-server.use-region-storage",
        "type": "bool",
        "comment": "UseRegionStorage enables the independent region storage."
    },
    {
        "key": "pd-server.max-gap-reset-ts",
        "type": "string",
        "comment": "MaxResetTSGap is the max gap to reset the TSO."
    },
    {
        "key": "pd-server.key-type",
        "type": "string",
        "comment": "KeyType is option to specify the type of keys.\nThere are some types supported: [\"table\", \"raw\", \"txn\"], default: \"table\""
    },
    {
        "key": "pd-server.runtime-services",
        "type": "json",
        "comment": "RuntimeServices is the running extension services."
    },
    {
        "key": "pd-server.metric-storage",
        "type": "string",
        "comment": "MetricStorage is the cluster metric storage.\nCurrently, we use prometheus as metric storage, we may use PD/TiKV as metric storage later."
    },
    {
        "key": "pd-server.dashboard-address",
        "type": "string",
        "comment": "There are some values supported: \"auto\", \"none\", or a specific address, default: \"auto\""
    },
    {
        "key": "pd-server.flow-round-by-digit",
        "type": "int",
        "comment": "FlowRoundByDigit used to discretization processing flow information."
    },
    {
        "key": "pd-server.min-resolved-ts-persistence-interval",
        "type": "string",
        "comment": "MinResolvedTSPersistenceInterval is the interval to save the min resolved ts."
    },
    {
        "key": "pd-server.server-memory-limit",
        "type": "float",
        "comment": "ServerMemoryLimit indicates the memory limit of current process."
    },
    {
        "key": "pd-server.server-memory-limit-gc-trigger",
        "type": "float",
        "comment": "ServerMemoryLimitGCTrigger indicates the gc percentage of the ServerMemoryLimit."
    },
    {
        "key": "pd-server.enable-gogc-tuner",
        "type": "bool",
        "comment": "EnableGOGCTuner is to enable GOGC tuner. it can tuner GOGC."
    },
    {
        "key": "pd-server.gc-tuner-threshold",
        "type": "float",
        "comment": "GCTunerThreshold is the threshold of GC tuner."
    },
    {
        "key": "pd-server.block-safe-point-v1",
        "type": "bool",
        "comment": "BlockSafePointV1 is used to control gc safe point v1 and service safe point v1 can not be updated."
    },
    {
        "key": "labels",
        "type": "json",
        "comment": "Labels indicates the labels set for **this** PD server. The labels describe some specific properties\nlike `zone`/`rack`/`host`. Currently, labels won't affect the PD server except for some special\nlabel keys. Now we have following special keys:\n1. 'zone' is a special key that indicates the DC location of this PD server. If it is set, the value for this\nwill be used to determine which DC's Local TSO service this PD will provide with if EnableLocalTSO is true."
    },
    {
        "key": "quota-backend-bytes",
        "type": "string",
        "comment": "QuotaBackendBytes Raise alarms when backend size exceeds the given quota. 0 means use the default quota.\nthe default size is 2GB, the maximum is 8GB."
    },
    {
        "key": "auto-compaction-mode",
        "type": "string",
        "comment": "AutoCompactionMode is either 'periodic' or 'revision'. The default value is 'periodic'."
    },
    {
        "key": "auto-compaction-retention",
        "type": "string",
        "comment": "AutoCompactionRetention is either duration string with time unit\n(e.g. '5m' for 5-minute), or revision unit (e.g. '5000').\nIf no time unit is provided and compaction mode is 'periodic',\nthe unit defaults to hour. For example, '5' translates into 5-hour.\nThe default retention is 1 hour.\nBefore etcd v3.3.x, the type of retention is int. We add 'v2' suffix to make it backward compatible."
    },
    {
        "key": "tick-interval",
        "type": "string",
        "comment": "TickInterval is the interval for etcd Raft tick."
    },
    {
        "key": "election-interval",
        "type": "string",
        "comment": "ElectionInterval is the interval for etcd Raft election."
    },
    {
        "key": "enable-prevote",
        "type": "bool",
        "comment": "Prevote is true to enable Raft Pre-Vote.\nIf enabled, Raft runs an additional election phase\nto check whether it would get enough votes to win\nan election, thus minimizing disruptions."
    },
    {
        "key": "max-request-bytes",
        "type": "int"
    },
    {
        "key": "security.cacert-path",
        "type": "string"
    },
    {
        "key": "security.cert-path",
        "type": "string"
    },
    {
        "key": "security.key-path",
        "type": "string"
    },
    {
        "key": "security.cert-allowed-cn",
        "type": "json"
    },
    {
        "key": "security.redact-info-log",
        "type": "unknown"
    },
    {
        "key": "security.encryption.data-encryption-method",
        "type": "string"
    },
    {
        "key": "security.encryption.data-key-rotation-period",
        "type": "string"
    },
    {
        "key": "security.encryption.master-key.type",
        "type": "string"
    },
    {
        "key": "security.encryption.master-key.key-id",
        "type": "string"
    },
    {
        "key": "security.encryption.master-key.region",
        "type": "string"
    },
    {
        "key": "security.encryption.master-key.endpoint",
        "type": "string"
    },
    {
        "key": "security.encryption.master-key.path",
        "type": "string"
    },
    {
        "key": "label-property",
        "type": "json"
    },
    {
        "key": "dashboard.tidb-cacert-path",
        "type": "string"
    },
    {
        "key": "dashboard.tidb-cert-path",
        "type": "string"
    },
    {
        "key": "dashboard.tidb-key-path",
        "type": "string"
    },
    {
        "key": "dashboard.public-path-prefix",
        "type": "string"
    },
    {
        "key": "dashboard.internal-proxy",
        "type": "bool"
    },
    {
        "key": "dashboard.enable-telemetry",
        "type": "bool"
    },
    {
        "key": "dashboard.enable-experimental",
        "type": "bool"
    },
    {
        "key": "dashboard.disable-custom-prom-addr",
        "type": "bool"
    },
    {
        "key": "replication-mode.replication-mode",
        "type": "string",
        "comment": "can be 'dr-auto-sync' or 'majority', default value is 'majority'"
    },
    {
        "key": "replication-mode.dr-auto-sync.label-key",
        "type": "string"
    },
    {
        "key": "replication-mode.dr-auto-sync.primary",
        "type": "string"
    },
    {
        "key": "replication-mode.dr-auto-sync.dr",
        "type": "string"
    },
    {
        "key": "replication-mode.dr-auto-sync.primary-replicas",
        "type": "int"
    },
    {
        "key": "replication-mode.dr-auto-sync.dr-replicas",
        "type": "int"
    },
    {
        "key": "replication-mode.dr-auto-sync.wait-store-timeout",
        "type": "string"
    },
    {
        "key": "replication-mode.dr-auto-sync.wait-recover-timeout",
        "type": "string"
    },
    {
        "key": "replication-mode.dr-auto-sync.pause-region-split",
        "type": "bool"
    },
    {
        "key": "keyspace.pre-alloc",
        "type": "json",
        "comment": "PreAlloc contains the keyspace to be allocated during keyspace manager initialization."
    },
    {
        "key": "keyspace.wait-region-split",
        "type": "bool",
        "comment": "WaitRegionSplit indicates whether to wait for the region split to complete"
    },
    {
        "key": "keyspace.wait-region-split-timeout",
        "type": "string",
        "comment": "WaitRegionSplitTimeout indicates the max duration to wait region split."
    },
    {
        "key": "keyspace.check-region-split-interval",
        "type": "string",
        "comment": "CheckRegionSplitInterval indicates the interval to check whether the region split is complete"
    },
    {
        "key": "micro-service.enable-scheduling-fallback",
        "type": "bool"
    },
    {
        "key": "controller.degraded-mode-wait-duration",
        "type": "string"
    },
    {
        "key": "controller.ltb-max-wait-duration",
        "type": "string"
    },
    {
        "key": "controller.ltb-token-rpc-max-delay",
        "type": "string"
    },
    {
        "key": "controller.request-unit.read-base-cost",
        "type": "float"
    },
    {
        "key": "controller.request-unit.read-per-batch-base-cost",
        "type": "float"
    },
    {
        "key": "controller.request-unit.read-cost-per-byte",
        "type": "float"
    },
    {
        "key": "controller.request-unit.write-base-cost",
        "type": "float"
    },
    {
        "key": "controller.request-unit.write-per-batch-base-cost",
        "type": "float"
    },
    {
        "key": "controller.request-unit.write-cost-per-byte",
        "type": "float"
    },
    {
        "key": "controller.request-unit.read-cpu-ms-cost",
        "type": "float"
    },
    {
        "key": "controller.enable-controller-trace-log",
        "type": "bool"
    }
]