http

package
v0.0.0-...-f3e9d9a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 24, 2024 License: Apache-2.0 Imports: 23 Imported by: 12

Documentation

Index

Constants

View Source
const (
	// Metadata
	HotRead          = "/pd/api/v1/hotspot/regions/read"
	HotWrite         = "/pd/api/v1/hotspot/regions/write"
	HotHistory       = "/pd/api/v1/hotspot/regions/history"
	RegionByIDPrefix = "/pd/api/v1/region/id"

	Regions = "/pd/api/v1/regions"

	RegionsByStoreIDPrefix = "/pd/api/v1/regions/store"

	EmptyRegions              = "/pd/api/v1/regions/check/empty-region"
	AccelerateSchedule        = "/pd/api/v1/regions/accelerate-schedule"
	AccelerateScheduleInBatch = "/pd/api/v1/regions/accelerate-schedule/batch"

	Stores      = "/pd/api/v1/stores"
	StatsRegion = "/pd/api/v1/stats/region"

	// Config
	Config          = "/pd/api/v1/config"
	ClusterVersion  = "/pd/api/v1/config/cluster-version"
	ScheduleConfig  = "/pd/api/v1/config/schedule"
	ReplicateConfig = "/pd/api/v1/config/replicate"
	// Rule
	PlacementRule         = "/pd/api/v1/config/rule"
	PlacementRules        = "/pd/api/v1/config/rules"
	PlacementRulesInBatch = "/pd/api/v1/config/rules/batch"

	PlacementRuleBundle = "/pd/api/v1/config/placement-rule"

	RegionLabelRule       = "/pd/api/v1/config/region-label/rule"
	RegionLabelRules      = "/pd/api/v1/config/region-label/rules"
	RegionLabelRulesByIDs = "/pd/api/v1/config/region-label/rules/ids"
	// Scheduler
	Schedulers = "/pd/api/v1/schedulers"

	// Admin
	ResetTS                = "/pd/api/v1/admin/reset-ts"
	BaseAllocID            = "/pd/api/v1/admin/base-alloc-id"
	SnapshotRecoveringMark = "/pd/api/v1/admin/cluster/markers/snapshot-recovering"
	// Debug
	PProfProfile   = "/pd/api/v1/debug/pprof/profile"
	PProfHeap      = "/pd/api/v1/debug/pprof/heap"
	PProfMutex     = "/pd/api/v1/debug/pprof/mutex"
	PProfAllocs    = "/pd/api/v1/debug/pprof/allocs"
	PProfBlock     = "/pd/api/v1/debug/pprof/block"
	PProfGoroutine = "/pd/api/v1/debug/pprof/goroutine"
	// Others
	MinResolvedTSPrefix = "/pd/api/v1/min-resolved-ts"
	Cluster             = "/pd/api/v1/cluster"
	ClusterStatus       = "/pd/api/v1/cluster/status"
	Status              = "/pd/api/v1/status"
	Version             = "/pd/api/v1/version"

	// Keyspace
	KeyspaceConfig        = "/pd/api/v2/keyspaces/%s/config"
	GetKeyspaceMetaByName = "/pd/api/v2/keyspaces/%s"
)

The following constants are the paths of PD HTTP APIs.

View Source
const (
	UpdateKeyspaceGCManagementTypeName = "UpdateKeyspaceGCManagementType"
	GetKeyspaceMetaByNameName          = "GetKeyspaceMetaByName"
	GetGCSafePointName                 = "GetGCSafePoint"
	DeleteGCSafePointName              = "DeleteGCSafePoint"
)

The following constants are the names of the requests.

Variables

View Source
var NewKeyRange = pd.NewKeyRange

NewKeyRange alias pd.NewKeyRange to avoid break client compatibility.

Functions

func ConfigWithTTLSeconds

func ConfigWithTTLSeconds(ttlSeconds float64) string

ConfigWithTTLSeconds returns the config API with the TTL seconds parameter.

func GetDeleteSafePointURI

func GetDeleteSafePointURI(serviceID string) string

GetDeleteSafePointURI returns the URI for delete safepoint service

func GetKeyspaceMetaByNameURL

func GetKeyspaceMetaByNameURL(keyspaceName string) string

GetKeyspaceMetaByNameURL returns the path of PD HTTP API to get keyspace meta by keyspace name.

func GetUpdateKeyspaceConfigURL

func GetUpdateKeyspaceConfigURL(keyspaceName string) string

GetUpdateKeyspaceConfigURL returns the path of PD HTTP API to update keyspace config.

func LabelByStoreID

func LabelByStoreID(storeID int64) string

LabelByStoreID returns the path of PD HTTP API to set store label.

func MicroServiceMembers

func MicroServiceMembers(service string) string

MicroServiceMembers returns the path of PD HTTP API to get the members of microservice.

func MicroServicePrimary

func MicroServicePrimary(service string) string

MicroServicePrimary returns the path of PD HTTP API to get the primary of microservice.

func NewHTTPClientWithRequestChecker

func NewHTTPClientWithRequestChecker(checker requestChecker) *http.Client

NewHTTPClientWithRequestChecker returns a http client with checker.

func PProfGoroutineWithDebugLevel

func PProfGoroutineWithDebugLevel(level int) string

PProfGoroutineWithDebugLevel returns the pprof goroutine API with debug level parameter.

func PProfProfileAPIWithInterval

func PProfProfileAPIWithInterval(interval time.Duration) string

PProfProfileAPIWithInterval returns the pprof profile API with interval parameter.

func PlacementRuleBundleByGroup

func PlacementRuleBundleByGroup(group string) string

PlacementRuleBundleByGroup returns the path of PD HTTP API to get placement rule bundle by group.

func PlacementRuleBundleWithPartialParameter

func PlacementRuleBundleWithPartialParameter(partial bool) string

PlacementRuleBundleWithPartialParameter returns the path of PD HTTP API to get placement rule bundle with partial parameter.

func PlacementRuleByGroupAndID

func PlacementRuleByGroupAndID(group, id string) string

PlacementRuleByGroupAndID returns the path of PD HTTP API to get placement rule by group and ID.

func PlacementRuleGroupByID

func PlacementRuleGroupByID(id string) string

PlacementRuleGroupByID returns the path of PD HTTP API to get placement rule group by ID.

func PlacementRulesByGroup

func PlacementRulesByGroup(group string) string

PlacementRulesByGroup returns the path of PD HTTP API to get placement rules by group.

func RegionByID

func RegionByID(regionID uint64) string

RegionByID returns the path of PD HTTP API to get region by ID.

func RegionByKey

func RegionByKey(key []byte) string

RegionByKey returns the path of PD HTTP API to get region by key.

func RegionStatsByKeyRange

func RegionStatsByKeyRange(keyRange *KeyRange, onlyCount bool) string

RegionStatsByKeyRange returns the path of PD HTTP API to get region stats by start key and end key.

func RegionsByKeyRange

func RegionsByKeyRange(keyRange *KeyRange, limit int) string

RegionsByKeyRange returns the path of PD HTTP API to scan regions with given start key, end key and limit parameters.

func RegionsByStoreID

func RegionsByStoreID(storeID uint64) string

RegionsByStoreID returns the path of PD HTTP API to get regions by store ID.

func RegionsReplicatedByKeyRange

func RegionsReplicatedByKeyRange(keyRange *KeyRange) string

RegionsReplicatedByKeyRange returns the path of PD HTTP API to get replicated regions with given start key and end key.

func ScatterRangeSchedulerWithName

func ScatterRangeSchedulerWithName(name string) string

ScatterRangeSchedulerWithName returns the scatter range scheduler API with name parameter. It is used in https://github.com/pingcap/tidb/blob/2a3352c45dd0f8dd5102adb92879bbfa964e7f5f/pkg/server/handler/tikvhandler/tikv_handler.go#L1252.

func SchedulerByName

func SchedulerByName(name string) string

SchedulerByName returns the scheduler API with the given scheduler name.

func StoreByID

func StoreByID(id uint64) string

StoreByID returns the store API with store ID parameter.

func StoreLabelByID

func StoreLabelByID(id uint64) string

StoreLabelByID returns the store label API with store ID parameter.

func TransferLeaderByID

func TransferLeaderByID(leaderID string) string

TransferLeaderByID returns the path of PD HTTP API to transfer leader by ID.

Types

type Client

type Client interface {
	/* Member-related interfaces */
	GetMembers(context.Context) (*MembersInfo, error)
	GetLeader(context.Context) (*pdpb.Member, error)
	TransferLeader(context.Context, string) error
	/* Meta-related interfaces */
	GetRegionByID(context.Context, uint64) (*RegionInfo, error)
	GetRegionByKey(context.Context, []byte) (*RegionInfo, error)
	GetRegions(context.Context) (*RegionsInfo, error)
	GetRegionsByKeyRange(context.Context, *KeyRange, int) (*RegionsInfo, error)
	GetRegionsByStoreID(context.Context, uint64) (*RegionsInfo, error)
	GetEmptyRegions(context.Context) (*RegionsInfo, error)
	GetRegionsReplicatedStateByKeyRange(context.Context, *KeyRange) (string, error)
	GetHotReadRegions(context.Context) (*StoreHotPeersInfos, error)
	GetHotWriteRegions(context.Context) (*StoreHotPeersInfos, error)
	GetHistoryHotRegions(context.Context, *HistoryHotRegionsRequest) (*HistoryHotRegions, error)
	GetRegionStatusByKeyRange(context.Context, *KeyRange, bool) (*RegionStats, error)
	GetStores(context.Context) (*StoresInfo, error)
	GetStore(context.Context, uint64) (*StoreInfo, error)
	DeleteStore(context.Context, uint64) error
	SetStoreLabels(context.Context, int64, map[string]string) error
	DeleteStoreLabel(ctx context.Context, storeID int64, labelKey string) error
	GetHealthStatus(context.Context) ([]Health, error)
	/* Config-related interfaces */
	GetConfig(context.Context) (map[string]any, error)
	SetConfig(context.Context, map[string]any, ...float64) error
	GetScheduleConfig(context.Context) (map[string]any, error)
	SetScheduleConfig(context.Context, map[string]any) error
	GetClusterVersion(context.Context) (string, error)
	GetCluster(context.Context) (*metapb.Cluster, error)
	GetClusterStatus(context.Context) (*ClusterState, error)
	GetStatus(context.Context) (*State, error)
	GetReplicateConfig(context.Context) (map[string]any, error)
	/* Scheduler-related interfaces */
	GetSchedulers(context.Context) ([]string, error)
	CreateScheduler(ctx context.Context, name string, storeID uint64) error
	DeleteScheduler(ctx context.Context, name string) error
	SetSchedulerDelay(context.Context, string, int64) error
	/* Rule-related interfaces */
	GetAllPlacementRuleBundles(context.Context) ([]*GroupBundle, error)
	GetPlacementRuleBundleByGroup(context.Context, string) (*GroupBundle, error)
	GetPlacementRulesByGroup(context.Context, string) ([]*Rule, error)
	GetPlacementRule(context.Context, string, string) (*Rule, error)
	SetPlacementRule(context.Context, *Rule) error
	SetPlacementRuleInBatch(context.Context, []*RuleOp) error
	SetPlacementRuleBundles(context.Context, []*GroupBundle, bool) error
	DeletePlacementRule(context.Context, string, string) error
	GetAllPlacementRuleGroups(context.Context) ([]*RuleGroup, error)
	GetPlacementRuleGroupByID(context.Context, string) (*RuleGroup, error)
	SetPlacementRuleGroup(context.Context, *RuleGroup) error
	DeletePlacementRuleGroupByID(context.Context, string) error
	GetAllRegionLabelRules(context.Context) ([]*LabelRule, error)
	GetRegionLabelRulesByIDs(context.Context, []string) ([]*LabelRule, error)
	// `SetRegionLabelRule` sets the label rule for a region.
	// When a label rule (deny scheduler) is set,
	//  1. All schedulers will be disabled except for the evict-leader-scheduler.
	//  2. The merge-checker will be disabled, preventing these regions from being merged.
	SetRegionLabelRule(context.Context, *LabelRule) error
	PatchRegionLabelRules(context.Context, *LabelRulePatch) error
	/* Scheduling-related interfaces */
	AccelerateSchedule(context.Context, *KeyRange) error
	AccelerateScheduleInBatch(context.Context, []*KeyRange) error
	/* Admin-related interfaces */
	ResetTS(context.Context, uint64, bool) error
	ResetBaseAllocID(context.Context, uint64) error
	SetSnapshotRecoveringMark(context.Context) error
	DeleteSnapshotRecoveringMark(context.Context) error
	/* Other interfaces */
	GetMinResolvedTSByStoresIDs(context.Context, []uint64) (uint64, map[uint64]uint64, error)
	GetPDVersion(context.Context) (string, error)
	GetGCSafePoint(context.Context) (ListServiceGCSafepoint, error)
	DeleteGCSafePoint(context.Context, string) (string, error)
	/* Micro Service interfaces */
	GetMicroServiceMembers(context.Context, string) ([]MicroServiceMember, error)
	GetMicroServicePrimary(context.Context, string) (string, error)
	DeleteOperators(context.Context) error

	// UpdateKeyspaceGCManagementType update the `gc_management_type` in keyspace meta config.
	// If `gc_management_type` is `global_gc`, it means the current keyspace requires a tidb without 'keyspace-name'
	// configured to run a global gc worker to calculate a global gc safe point.
	// If `gc_management_type` is `keyspace_level_gc` it means the current keyspace can calculate gc safe point by its own.
	UpdateKeyspaceGCManagementType(ctx context.Context, keyspaceName string, keyspaceGCManagementType *KeyspaceGCManagementTypeConfig) error
	GetKeyspaceMetaByName(ctx context.Context, keyspaceName string) (*keyspacepb.KeyspaceMeta, error)

	/* Client-related methods */
	// WithCallerID sets and returns a new client with the given caller ID.
	WithCallerID(string) Client
	// WithRespHandler sets and returns a new client with the given HTTP response handler.
	// This allows the caller to customize how the response is handled, including error handling logic.
	// Additionally, it is important for the caller to handle the content of the response body properly
	// in order to ensure that it can be read and marshaled correctly into `res`.
	WithRespHandler(func(resp *http.Response, res any) error) Client
	// WithBackoffer sets and returns a new client with the given backoffer.
	WithBackoffer(*retry.Backoffer) Client
	// WithTargetURL sets and returns a new client with the given target URL.
	WithTargetURL(string) Client
	// Close gracefully closes the HTTP client.
	Close()
}

Client is a PD (Placement Driver) HTTP client.

func NewClient

func NewClient(
	source string,
	pdAddrs []string,
	opts ...ClientOption,
) Client

NewClient creates a PD HTTP client with the given PD addresses and TLS config.

func NewClientWithServiceDiscovery

func NewClientWithServiceDiscovery(
	source string,
	sd pd.ServiceDiscovery,
	opts ...ClientOption,
) Client

NewClientWithServiceDiscovery creates a PD HTTP client with the given PD service discovery.

type ClientOption

type ClientOption func(c *client)

ClientOption configures the HTTP client.

func WithHTTPClient

func WithHTTPClient(cli *http.Client) ClientOption

WithHTTPClient configures the client with the given initialized HTTP client.

func WithMetrics

func WithMetrics(
	requestCounter *prometheus.CounterVec,
	executionDuration *prometheus.HistogramVec,
) ClientOption

WithMetrics configures the client with metrics.

func WithTLSConfig

func WithTLSConfig(tlsConf *tls.Config) ClientOption

WithTLSConfig configures the client with the given TLS config. This option won't work if the client is configured with WithHTTPClient.

type ClusterState

type ClusterState struct {
	RaftBootstrapTime time.Time `json:"raft_bootstrap_time,omitempty"`
	IsInitialized     bool      `json:"is_initialized"`
	ReplicationStatus string    `json:"replication_status"`
}

ClusterState saves some cluster state information. NOTE: This type sync with https://github.com/tikv/pd/blob/5eae459c01a797cbd0c416054c6f0cad16b8740a/server/cluster/cluster.go#L173

type GroupBundle

type GroupBundle struct {
	ID       string  `json:"group_id"`
	Index    int     `json:"group_index"`
	Override bool    `json:"group_override"`
	Rules    []*Rule `json:"rules"`
}

GroupBundle represents a rule group and all rules belong to the group.

type HeaderOption

type HeaderOption func(header http.Header)

HeaderOption configures the HTTP header.

func WithAllowFollowerHandle

func WithAllowFollowerHandle() HeaderOption

WithAllowFollowerHandle sets the header field to allow a PD follower to handle this request.

type Health

type Health struct {
	Name       string   `json:"name"`
	MemberID   uint64   `json:"member_id"`
	ClientUrls []string `json:"client_urls"`
	Health     bool     `json:"health"`
}

Health reflects the cluster's health. NOTE: This type is moved from `server/api/health.go`, maybe move them to the same place later.

type HistoryHotRegion

type HistoryHotRegion struct {
	UpdateTime    int64   `json:"update_time"`
	RegionID      uint64  `json:"region_id"`
	PeerID        uint64  `json:"peer_id"`
	StoreID       uint64  `json:"store_id"`
	IsLeader      bool    `json:"is_leader"`
	IsLearner     bool    `json:"is_learner"`
	HotRegionType string  `json:"hot_region_type"`
	HotDegree     int64   `json:"hot_degree"`
	FlowBytes     float64 `json:"flow_bytes"`
	KeyRate       float64 `json:"key_rate"`
	QueryRate     float64 `json:"query_rate"`
	StartKey      string  `json:"start_key"`
	EndKey        string  `json:"end_key"`
	// Encryption metadata for start_key and end_key. encryption_meta.iv is IV for start_key.
	// IV for end_key is calculated from (encryption_meta.iv + len(start_key)).
	// The field is only used by PD and should be ignored otherwise.
	// If encryption_meta is empty (i.e. nil), it means start_key and end_key are unencrypted.
	EncryptionMeta *encryptionpb.EncryptionMeta `json:"encryption_meta,omitempty"`
}

HistoryHotRegion wraps hot region info it is storage format of hot_region_storage

type HistoryHotRegions

type HistoryHotRegions struct {
	HistoryHotRegion []*HistoryHotRegion `json:"history_hot_region"`
}

HistoryHotRegions wraps historyHotRegion

type HistoryHotRegionsRequest

type HistoryHotRegionsRequest struct {
	StartTime      int64    `json:"start_time,omitempty"`
	EndTime        int64    `json:"end_time,omitempty"`
	RegionIDs      []uint64 `json:"region_ids,omitempty"`
	StoreIDs       []uint64 `json:"store_ids,omitempty"`
	PeerIDs        []uint64 `json:"peer_ids,omitempty"`
	IsLearners     []bool   `json:"is_learners,omitempty"`
	IsLeaders      []bool   `json:"is_leaders,omitempty"`
	HotRegionTypes []string `json:"hot_region_type,omitempty"`
}

HistoryHotRegionsRequest wrap the request conditions.

type HotPeerStatShow

type HotPeerStatShow struct {
	StoreID        uint64    `json:"store_id"`
	Stores         []uint64  `json:"stores"`
	IsLeader       bool      `json:"is_leader"`
	IsLearner      bool      `json:"is_learner"`
	RegionID       uint64    `json:"region_id"`
	HotDegree      int       `json:"hot_degree"`
	ByteRate       float64   `json:"flow_bytes"`
	KeyRate        float64   `json:"flow_keys"`
	QueryRate      float64   `json:"flow_query"`
	AntiCount      int       `json:"anti_count"`
	LastUpdateTime time.Time `json:"last_update_time,omitempty"`
}

HotPeerStatShow records the hot region statistics for output

type HotPeersStat

type HotPeersStat struct {
	StoreByteRate  float64           `json:"store_bytes"`
	StoreKeyRate   float64           `json:"store_keys"`
	StoreQueryRate float64           `json:"store_query"`
	TotalBytesRate float64           `json:"total_flow_bytes"`
	TotalKeysRate  float64           `json:"total_flow_keys"`
	TotalQueryRate float64           `json:"total_flow_query"`
	Count          int               `json:"regions_count"`
	Stats          []HotPeerStatShow `json:"statistics"`
}

HotPeersStat records all hot regions statistics

type KeyRange

type KeyRange = pd.KeyRange

KeyRange alias pd.KeyRange to avoid break client compatibility.

type KeyspaceGCManagementType

type KeyspaceGCManagementType struct {
	GCManagementType string `json:"gc_management_type,omitempty"`
}

KeyspaceGCManagementType represents parameters needed to modify the gc management type. If `gc_management_type` is `global_gc`, it means the current keyspace requires a tidb without 'keyspace-name' configured to run a global gc worker to calculate a global gc safe point. If `gc_management_type` is `keyspace_level_gc` it means the current keyspace can calculate gc safe point by its own.

type KeyspaceGCManagementTypeConfig

type KeyspaceGCManagementTypeConfig struct {
	Config KeyspaceGCManagementType `json:"config"`
}

KeyspaceGCManagementTypeConfig represents parameters needed to modify target keyspace's configs.

type LabelConstraint

type LabelConstraint struct {
	Key    string            `json:"key,omitempty"`
	Op     LabelConstraintOp `json:"op,omitempty"`
	Values []string          `json:"values,omitempty"`
}

LabelConstraint is used to filter store when trying to place peer of a region.

type LabelConstraintOp

type LabelConstraintOp string

LabelConstraintOp defines how a LabelConstraint matches a store. It can be one of 'in', 'notIn', 'exists', or 'notExists'.

const (
	// In restricts the store label value should in the value list.
	// If label does not exist, `in` is always false.
	In LabelConstraintOp = "in"
	// NotIn restricts the store label value should not in the value list.
	// If label does not exist, `notIn` is always true.
	NotIn LabelConstraintOp = "notIn"
	// Exists restricts the store should have the label.
	Exists LabelConstraintOp = "exists"
	// NotExists restricts the store should not have the label.
	NotExists LabelConstraintOp = "notExists"
)

type LabelRule

type LabelRule struct {
	ID       string        `json:"id"`
	Index    int           `json:"index"`
	Labels   []RegionLabel `json:"labels"`
	RuleType string        `json:"rule_type"`
	Data     any           `json:"data"`
}

LabelRule is the rule to assign labels to a region.

type LabelRulePatch

type LabelRulePatch struct {
	SetRules    []*LabelRule `json:"sets"`
	DeleteRules []string     `json:"deletes"`
}

LabelRulePatch is the patch to update the label rules.

type ListServiceGCSafepoint

type ListServiceGCSafepoint struct {
	ServiceGCSafepoints   []*ServiceSafePoint `json:"service_gc_safe_points"`
	MinServiceGcSafepoint uint64              `json:"min_service_gc_safe_point,omitempty"`
	GCSafePoint           uint64              `json:"gc_safe_point"`
}

ListServiceGCSafepoint is the response for list service GC safepoint. NOTE: This type is in sync with pd/server/api/service_gc_safepoint.go

type MembersInfo

type MembersInfo struct {
	Header     *pdpb.ResponseHeader `json:"header,omitempty"`
	Members    []*pdpb.Member       `json:"members,omitempty"`
	Leader     *pdpb.Member         `json:"leader,omitempty"`
	EtcdLeader *pdpb.Member         `json:"etcd_leader,omitempty"`
}

MembersInfo is PD members info returned from PD RESTful interface type Members map[string][]*pdpb.Member

type MetaStore

type MetaStore struct {
	ID             int64        `json:"id"`
	Address        string       `json:"address"`
	State          int64        `json:"state"`
	StateName      string       `json:"state_name"`
	Version        string       `json:"version"`
	Labels         []StoreLabel `json:"labels"`
	StatusAddress  string       `json:"status_address"`
	GitHash        string       `json:"git_hash"`
	StartTimestamp int64        `json:"start_timestamp"`
}

MetaStore represents the meta information of one store.

type MicroServiceMember

type MicroServiceMember struct {
	ServiceAddr    string `json:"service-addr"`
	Version        string `json:"version"`
	GitHash        string `json:"git-hash"`
	DeployPath     string `json:"deploy-path"`
	StartTimestamp int64  `json:"start-timestamp"`
}

MicroServiceMember is the member info of a micro service.

type PeerRoleType

type PeerRoleType string

PeerRoleType is the expected peer type of the placement rule.

const (
	// Voter can either match a leader peer or follower peer
	Voter PeerRoleType = "voter"
	// Leader matches a leader.
	Leader PeerRoleType = "leader"
	// Follower matches a follower.
	Follower PeerRoleType = "follower"
	// Learner matches a learner.
	Learner PeerRoleType = "learner"
)

type RegionEpoch

type RegionEpoch struct {
	ConfVer int64 `json:"conf_ver"`
	Version int64 `json:"version"`
}

RegionEpoch stores the information about its epoch.

type RegionInfo

type RegionInfo struct {
	ID              int64            `json:"id"`
	StartKey        string           `json:"start_key"`
	EndKey          string           `json:"end_key"`
	Epoch           RegionEpoch      `json:"epoch"`
	Peers           []RegionPeer     `json:"peers"`
	Leader          RegionPeer       `json:"leader"`
	DownPeers       []RegionPeerStat `json:"down_peers"`
	PendingPeers    []RegionPeer     `json:"pending_peers"`
	WrittenBytes    uint64           `json:"written_bytes"`
	ReadBytes       uint64           `json:"read_bytes"`
	ApproximateSize int64            `json:"approximate_size"`
	ApproximateKeys int64            `json:"approximate_keys"`

	ReplicationStatus *ReplicationStatus `json:"replication_status,omitempty"`
}

RegionInfo stores the information of one region.

func (*RegionInfo) GetEndKey

func (r *RegionInfo) GetEndKey() string

GetEndKey gets the end key of the region.

func (*RegionInfo) GetStartKey

func (r *RegionInfo) GetStartKey() string

GetStartKey gets the start key of the region.

type RegionLabel

type RegionLabel struct {
	Key     string `json:"key"`
	Value   string `json:"value"`
	TTL     string `json:"ttl,omitempty"`
	StartAt string `json:"start_at,omitempty"`
}

RegionLabel is the label of a region.

type RegionPeer

type RegionPeer struct {
	ID        int64 `json:"id"`
	StoreID   int64 `json:"store_id"`
	IsLearner bool  `json:"is_learner"`
}

RegionPeer stores information of one peer.

type RegionPeerStat

type RegionPeerStat struct {
	Peer    RegionPeer `json:"peer"`
	DownSec int64      `json:"down_seconds"`
}

RegionPeerStat stores one field `DownSec` which indicates how long it's down than `RegionPeer`.

type RegionStats

type RegionStats struct {
	Count            int            `json:"count"`
	EmptyCount       int            `json:"empty_count"`
	StorageSize      int64          `json:"storage_size"`
	StorageKeys      int64          `json:"storage_keys"`
	StoreLeaderCount map[uint64]int `json:"store_leader_count"`
	StorePeerCount   map[uint64]int `json:"store_peer_count"`
}

RegionStats stores the statistics of regions.

type RegionsInfo

type RegionsInfo struct {
	Count   int64        `json:"count"`
	Regions []RegionInfo `json:"regions"`
}

RegionsInfo stores the information of regions.

func (*RegionsInfo) Merge

func (ri *RegionsInfo) Merge(other *RegionsInfo) *RegionsInfo

Merge merges two RegionsInfo together and returns a new one.

type ReplicationStatus

type ReplicationStatus struct {
	State   string `json:"state"`
	StateID int64  `json:"state_id"`
}

ReplicationStatus represents the replication mode status of the region.

type Rule

type Rule struct {
	GroupID          string            `json:"group_id"`                    // mark the source that add the rule
	ID               string            `json:"id"`                          // unique ID within a group
	Index            int               `json:"index,omitempty"`             // rule apply order in a group, rule with less ID is applied first when indexes are equal
	Override         bool              `json:"override,omitempty"`          // when it is true, all rules with less indexes are disabled
	StartKey         []byte            `json:"-"`                           // range start key
	StartKeyHex      string            `json:"start_key"`                   // hex format start key, for marshal/unmarshal
	EndKey           []byte            `json:"-"`                           // range end key
	EndKeyHex        string            `json:"end_key"`                     // hex format end key, for marshal/unmarshal
	Role             PeerRoleType      `json:"role"`                        // expected role of the peers
	IsWitness        bool              `json:"is_witness"`                  // when it is true, it means the role is also a witness
	Count            int               `json:"count"`                       // expected count of the peers
	LabelConstraints []LabelConstraint `json:"label_constraints,omitempty"` // used to select stores to place peers
	LocationLabels   []string          `json:"location_labels,omitempty"`   // used to make peers isolated physically
	IsolationLevel   string            `json:"isolation_level,omitempty"`   // used to isolate replicas explicitly and forcibly
	Version          uint64            `json:"version,omitempty"`           // only set at runtime, add 1 each time rules updated, begin from 0.
	CreateTimestamp  uint64            `json:"create_timestamp,omitempty"`  // only set at runtime, recorded rule create timestamp
}

Rule is the placement rule that can be checked against a region. When applying rules (apply means schedule regions to match selected rules), the apply order is defined by the tuple [GroupIndex, GroupID, Index, ID].

func (*Rule) Clone

func (r *Rule) Clone() *Rule

Clone returns a copy of Rule.

func (*Rule) MarshalJSON

func (r *Rule) MarshalJSON() ([]byte, error)

MarshalJSON implements `json.Marshaler` interface to make sure we could set the correct start/end key.

func (*Rule) String

func (r *Rule) String() string

String returns the string representation of this rule.

func (*Rule) UnmarshalJSON

func (r *Rule) UnmarshalJSON(bytes []byte) error

UnmarshalJSON implements `json.Unmarshaler` interface to make sure we could get the correct start/end key.

type RuleGroup

type RuleGroup struct {
	ID       string `json:"id,omitempty"`
	Index    int    `json:"index,omitempty"`
	Override bool   `json:"override,omitempty"`
}

RuleGroup defines properties of a rule group.

func (*RuleGroup) String

func (g *RuleGroup) String() string

type RuleOp

type RuleOp struct {
	*Rule                       // information of the placement rule to add/delete the operation type
	Action           RuleOpType `json:"action"`
	DeleteByIDPrefix bool       `json:"delete_by_id_prefix"` // if action == delete, delete by the prefix of id
}

RuleOp is for batching placement rule actions. The action type is distinguished by the field `Action`.

func (*RuleOp) MarshalJSON

func (r *RuleOp) MarshalJSON() ([]byte, error)

MarshalJSON implements `json.Marshaler` interface to make sure we could set the correct start/end key.

func (RuleOp) String

func (r RuleOp) String() string

func (*RuleOp) UnmarshalJSON

func (r *RuleOp) UnmarshalJSON(bytes []byte) error

UnmarshalJSON implements `json.Unmarshaler` interface to make sure we could get the correct start/end key.

type RuleOpType

type RuleOpType string

RuleOpType indicates the operation type

const (
	// RuleOpAdd a placement rule, only need to specify the field *Rule
	RuleOpAdd RuleOpType = "add"
	// RuleOpDel a placement rule, only need to specify the field `GroupID`, `ID`, `MatchID`
	RuleOpDel RuleOpType = "del"
)

type ServiceSafePoint

type ServiceSafePoint struct {
	ServiceID string `json:"service_id"`
	ExpiredAt int64  `json:"expired_at"`
	SafePoint uint64 `json:"safe_point"`
}

ServiceSafePoint is the safepoint for a specific service NOTE: This type is in sync with pd/pkg/storage/endpoint/gc_safe_point.go

type State

type State struct {
	BuildTS        string `json:"build_ts"`
	Version        string `json:"version"`
	GitHash        string `json:"git_hash"`
	StartTimestamp int64  `json:"start_timestamp"`
}

State is the status of PD server. NOTE: This type sync with https://github.com/tikv/pd/blob/1d77b25656bc18e1f5aa82337d4ab62a34b10087/pkg/versioninfo/versioninfo.go#L29

type StoreHotPeersInfos

type StoreHotPeersInfos struct {
	AsPeer   StoreHotPeersStat `json:"as_peer"`
	AsLeader StoreHotPeersStat `json:"as_leader"`
}

StoreHotPeersInfos is used to get human-readable description for hot regions.

type StoreHotPeersStat

type StoreHotPeersStat map[uint64]*HotPeersStat

StoreHotPeersStat is used to record the hot region statistics group by store.

type StoreInfo

type StoreInfo struct {
	Store  MetaStore   `json:"store"`
	Status StoreStatus `json:"status"`
}

StoreInfo represents the information of one TiKV/TiFlash store.

type StoreLabel

type StoreLabel struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

StoreLabel stores the information of one store label.

type StoreStatus

type StoreStatus struct {
	Capacity        string    `json:"capacity"`
	Available       string    `json:"available"`
	LeaderCount     int64     `json:"leader_count"`
	LeaderWeight    float64   `json:"leader_weight"`
	LeaderScore     float64   `json:"leader_score"`
	LeaderSize      int64     `json:"leader_size"`
	RegionCount     int64     `json:"region_count"`
	RegionWeight    float64   `json:"region_weight"`
	RegionScore     float64   `json:"region_score"`
	RegionSize      int64     `json:"region_size"`
	StartTS         time.Time `json:"start_ts"`
	LastHeartbeatTS time.Time `json:"last_heartbeat_ts"`
	Uptime          string    `json:"uptime"`
}

StoreStatus stores the detail information of one store.

type StoresInfo

type StoresInfo struct {
	Count  int         `json:"count"`
	Stores []StoreInfo `json:"stores"`
}

StoresInfo represents the information of all TiKV/TiFlash stores.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL