server

package
v3.0.14 Latest Latest
Warning

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

Go to latest
Published: Mar 12, 2020 License: Apache-2.0 Imports: 56 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrNotBootstrapped is error info for cluster not bootstrapped
	ErrNotBootstrapped = errors.New("TiKV cluster not bootstrapped, please start TiKV first")
	// ErrOperatorNotFound is error info for operator not found
	ErrOperatorNotFound = errors.New("operator not found")
	// ErrAddOperator is error info for already have an operator when adding operator
	ErrAddOperator = errors.New("failed to add operator, maybe already have one")
	// ErrRegionNotAdjacent is error info for region not adjacent
	ErrRegionNotAdjacent = errors.New("two regions are not adjacent")
	// ErrRegionNotFound is error info for region not found
	ErrRegionNotFound = func(regionID uint64) error {
		return errors.Errorf("region %v not found", regionID)
	}
	// ErrRegionAbnormalPeer is error info for region has abonormal peer
	ErrRegionAbnormalPeer = func(regionID uint64) error {
		return errors.Errorf("region %v has abnormal peer", regionID)
	}
)
View Source
var (
	PDReleaseVersion = "None"
	PDBuildTS        = "None"
	PDGitHash        = "None"
	PDGitBranch      = "None"
)

Version information.

View Source
var EnableZap = false

EnableZap enable the zap logger in embed etcd.

Functions

func CheckPDVersion

func CheckPDVersion(opt *scheduleOption)

CheckPDVersion checks if PD needs to be upgraded.

func GetMembers

func GetMembers(etcdClient *clientv3.Client) ([]*pdpb.Member, error)

GetMembers return a slice of Members.

func InitHTTPClient

func InitHTTPClient(svr *Server) error

InitHTTPClient initials a http client.

func IsCompatible

func IsCompatible(clusterVersion, v semver.Version) bool

IsCompatible checks if the clusterVersion is compatible with the specified version.

func IsDefaultScheduler

func IsDefaultScheduler(typ string) bool

IsDefaultScheduler checks whether the scheduler is enable by default.

func LogPDInfo

func LogPDInfo()

LogPDInfo prints the PD version information.

func MinSupportedVersion

func MinSupportedVersion(v Feature) semver.Version

MinSupportedVersion returns the minimum support version for the specified feature.

func MustParseVersion

func MustParseVersion(v string) *semver.Version

MustParseVersion wraps ParseVersion and will panic if error is not nil.

func NewTestServer

func NewTestServer(c *check.C) (*Config, *Server, CleanupFunc, error)

NewTestServer creates a pd server for testing.

func ParseUrls

func ParseUrls(s string) ([]url.URL, error)

ParseUrls parse a string into multiple urls. Export for api.

func ParseVersion

func ParseVersion(v string) (*semver.Version, error)

ParseVersion wraps semver.NewVersion and handles compatibility issues.

func PrepareJoinCluster

func PrepareJoinCluster(cfg *Config) error

PrepareJoinCluster sends MemberAdd command to PD cluster, and returns the initial configuration of the PD cluster.

TL;TR: The join functionality is safe. With data, join does nothing, w/o data

and it is not a member of cluster, join does MemberAdd, it returns an
error if PD tries to join itself, missing data or join a duplicated PD.

Etcd automatically re-joins the cluster if there is a data directory. So first it checks if there is a data directory or not. If there is, it returns an empty string (etcd will get the correct configurations from the data directory.)

If there is no data directory, there are following cases:

  • A new PD joins an existing cluster. What join does: MemberAdd, MemberList, then generate initial-cluster.

  • A failed PD re-joins the previous cluster. What join does: return an error. (etcd reports: raft log corrupted, truncated, or lost?)

  • A deleted PD joins to previous cluster. What join does: MemberAdd, MemberList, then generate initial-cluster. (it is not in the member list and there is no data, so we can treat it as a new PD.)

If there is a data directory, there are following special cases:

  • A failed PD tries to join the previous cluster but it has been deleted during its downtime. What join does: return "" (etcd will connect to other peers and find that the PD itself has been removed.)

  • A deleted PD joins the previous cluster. What join does: return "" (as etcd will read data directory and find that the PD itself has been removed, so an empty string is fine.)

func PrintConfigCheckMsg

func PrintConfigCheckMsg(cfg *Config)

PrintConfigCheckMsg prints the message about configuration checks.

func PrintPDInfo

func PrintPDInfo()

PrintPDInfo prints the PD version information without log info.

func StartMonitor

func StartMonitor(now func() time.Time, systimeErrHandler func())

StartMonitor calls systimeErrHandler if system time jump backward.

func ToTLSConfig

func ToTLSConfig(config map[string]string) (*tls.Config, error)

ToTLSConfig generatres tls config.

func ValidateLabelString

func ValidateLabelString(s string) error

ValidateLabelString checks the legality of the label string. The valid label consists of alphanumeric characters, '-', '_', '.' or '/', and must start and end with an alphanumeric character.

func ValidateLabels

func ValidateLabels(labels []*metapb.StoreLabel) error

ValidateLabels checks the legality of the labels.

Types

type CleanupFunc

type CleanupFunc func()

CleanupFunc closes test pd server(s) and deletes any files left behind.

type ClusterStatus

type ClusterStatus struct {
	RaftBootstrapTime time.Time `json:"raft_bootstrap_time,omitempty"`
	IsInitialized     bool      `json:"is_initialized"`
}

ClusterStatus saves some state information

type Config

type Config struct {
	*flag.FlagSet `json:"-"`

	Version bool `json:"-"`

	ConfigCheck bool `json:"-"`

	ClientUrls          string `toml:"client-urls" json:"client-urls"`
	PeerUrls            string `toml:"peer-urls" json:"peer-urls"`
	AdvertiseClientUrls string `toml:"advertise-client-urls" json:"advertise-client-urls"`
	AdvertisePeerUrls   string `toml:"advertise-peer-urls" json:"advertise-peer-urls"`

	Name              string `toml:"name" json:"name"`
	DataDir           string `toml:"data-dir" json:"data-dir"`
	ForceNewCluster   bool   `json:"force-new-cluster"`
	EnableGRPCGateway bool   `json:"enable-grpc-gateway"`

	InitialCluster      string `toml:"initial-cluster" json:"initial-cluster"`
	InitialClusterState string `toml:"initial-cluster-state" json:"initial-cluster-state"`

	// Join to an existing pd cluster, a string of endpoints.
	Join string `toml:"join" json:"join"`

	// LeaderLease time, if leader doesn't update its TTL
	// in etcd after lease time, etcd will expire the leader key
	// and other servers can campaign the leader again.
	// Etcd only supports seconds TTL, so here is second too.
	LeaderLease int64 `toml:"lease" json:"lease"`

	// Log related config.
	Log log.Config `toml:"log" json:"log"`

	// Backward compatibility.
	LogFileDeprecated  string `toml:"log-file" json:"log-file"`
	LogLevelDeprecated string `toml:"log-level" json:"log-level"`

	// TsoSaveInterval is the interval to save timestamp.
	TsoSaveInterval typeutil.Duration `toml:"tso-save-interval" json:"tso-save-interval"`

	Metric metricutil.MetricConfig `toml:"metric" json:"metric"`

	Schedule ScheduleConfig `toml:"schedule" json:"schedule"`

	Replication ReplicationConfig `toml:"replication" json:"replication"`

	Namespace map[string]NamespaceConfig `json:"namespace"`

	PDServerCfg PDServerConfig `toml:"pd-server" json:"pd-server"`

	ClusterVersion semver.Version `json:"cluster-version"`

	// QuotaBackendBytes Raise alarms when backend size exceeds the given quota. 0 means use the default quota.
	// the default size is 2GB, the maximum is 8GB.
	QuotaBackendBytes typeutil.ByteSize `toml:"quota-backend-bytes" json:"quota-backend-bytes"`
	// AutoCompactionMode is either 'periodic' or 'revision'. The default value is 'periodic'.
	AutoCompactionMode string `toml:"auto-compaction-mode" json:"auto-compaction-mode"`
	// AutoCompactionRetention is either duration string with time unit
	// (e.g. '5m' for 5-minute), or revision unit (e.g. '5000').
	// If no time unit is provided and compaction mode is 'periodic',
	// the unit defaults to hour. For example, '5' translates into 5-hour.
	// The default retention is 1 hour.
	// Before etcd v3.3.x, the type of retention is int. We add 'v2' suffix to make it backward compatible.
	AutoCompactionRetention string `toml:"auto-compaction-retention" json:"auto-compaction-retention-v2"`

	// TickInterval is the interval for etcd Raft tick.
	TickInterval typeutil.Duration `toml:"tick-interval"`
	// ElectionInterval is the interval for etcd Raft election.
	ElectionInterval typeutil.Duration `toml:"election-interval"`
	// Prevote is true to enable Raft Pre-Vote.
	// If enabled, Raft runs an additional election phase
	// to check whether it would get enough votes to win
	// an election, thus minimizing disruptions.
	PreVote bool `toml:"enable-prevote"`

	Security SecurityConfig `toml:"security" json:"security"`

	LabelProperty LabelPropertyConfig `toml:"label-property" json:"label-property"`

	// For all warnings during parsing.
	WarningMsgs []string

	// NamespaceClassifier is for classifying stores/regions into different
	// namespaces.
	NamespaceClassifier string `toml:"namespace-classifier" json:"namespace-classifier"`

	LeaderPriorityCheckInterval typeutil.Duration
	// contains filtered or unexported fields
}

Config is the pd server configuration.

func NewConfig

func NewConfig() *Config

NewConfig creates a new config.

func NewTestMultiConfig

func NewTestMultiConfig(c *check.C, count int) []*Config

NewTestMultiConfig is only for test to create multiple pd configurations. Because PD client also needs this, so export here.

func NewTestSingleConfig

func NewTestSingleConfig(c *check.C) *Config

NewTestSingleConfig is only for test to create one pd. Because PD client also needs this, so export here.

func (*Config) Adjust

func (c *Config) Adjust(meta *toml.MetaData) error

Adjust is used to adjust the PD configurations.

func (*Config) GetZapLogProperties

func (c *Config) GetZapLogProperties() *log.ZapProperties

GetZapLogProperties gets properties of the zap logger.

func (*Config) GetZapLogger

func (c *Config) GetZapLogger() *zap.Logger

GetZapLogger gets the created zap logger.

func (*Config) Parse

func (c *Config) Parse(arguments []string) error

Parse parses flag definitions from the argument list.

func (*Config) SetupLogger

func (c *Config) SetupLogger() error

SetupLogger setup the logger.

func (*Config) String

func (c *Config) String() string

type Feature

type Feature int

Feature supported features.

const (
	Base Feature = iota
	Version2_0
	// RegionMerge supports the adjacent regions to be merged.
	// and PD will periodically check if there is enough small
	// region to be merged. if there is, will send the corresponding
	// merge command to the TiKV.
	RegionMerge
	// RaftLearner supports add a non-voting member in raft members.
	// and PD scheduling strategy will replace `addPeer` to `addLearner`,`promotoLearner`.
	RaftLearner
	// BatchSplit can speed up the region split.
	// and PD will response the BatchSplit request.
	BatchSplit
)

Fetures list. The cluster provides corresponding new features if the cluster version greater than or equal to the required minimum version of the feature.

type Handler

type Handler struct {
	// contains filtered or unexported fields
}

Handler is a helper to export methods to handle API/RPC requests.

func (*Handler) AddAddLearnerOperator

func (h *Handler) AddAddLearnerOperator(regionID uint64, toStoreID uint64) error

AddAddLearnerOperator adds an operator to add learner.

func (*Handler) AddAddPeerOperator

func (h *Handler) AddAddPeerOperator(regionID uint64, toStoreID uint64) error

AddAddPeerOperator adds an operator to add peer.

func (*Handler) AddAdjacentRegionScheduler

func (h *Handler) AddAdjacentRegionScheduler(args ...string) error

AddAdjacentRegionScheduler adds a balance-adjacent-region-scheduler.

func (*Handler) AddBalanceHotRegionScheduler

func (h *Handler) AddBalanceHotRegionScheduler() error

AddBalanceHotRegionScheduler adds a balance-hot-region-scheduler.

func (*Handler) AddBalanceLeaderScheduler

func (h *Handler) AddBalanceLeaderScheduler() error

AddBalanceLeaderScheduler adds a balance-leader-scheduler.

func (*Handler) AddBalanceRegionScheduler

func (h *Handler) AddBalanceRegionScheduler() error

AddBalanceRegionScheduler adds a balance-region-scheduler.

func (*Handler) AddEvictLeaderScheduler

func (h *Handler) AddEvictLeaderScheduler(storeID uint64) error

AddEvictLeaderScheduler adds an evict-leader-scheduler.

func (*Handler) AddGrantLeaderScheduler

func (h *Handler) AddGrantLeaderScheduler(storeID uint64) error

AddGrantLeaderScheduler adds a grant-leader-scheduler.

func (*Handler) AddLabelScheduler

func (h *Handler) AddLabelScheduler() error

AddLabelScheduler adds a label-scheduler.

func (*Handler) AddMergeRegionOperator

func (h *Handler) AddMergeRegionOperator(regionID uint64, targetID uint64) error

AddMergeRegionOperator adds an operator to merge region.

func (*Handler) AddRandomMergeScheduler

func (h *Handler) AddRandomMergeScheduler() error

AddRandomMergeScheduler adds a random-merge-scheduler.

func (*Handler) AddRemovePeerOperator

func (h *Handler) AddRemovePeerOperator(regionID uint64, fromStoreID uint64) error

AddRemovePeerOperator adds an operator to remove peer.

func (*Handler) AddScatterRangeScheduler

func (h *Handler) AddScatterRangeScheduler(args ...string) error

AddScatterRangeScheduler adds a balance-range-leader-scheduler

func (*Handler) AddScatterRegionOperator

func (h *Handler) AddScatterRegionOperator(regionID uint64) error

AddScatterRegionOperator adds an operator to scatter a region.

func (*Handler) AddScheduler

func (h *Handler) AddScheduler(name string, args ...string) error

AddScheduler adds a scheduler.

func (*Handler) AddShuffleHotRegionScheduler

func (h *Handler) AddShuffleHotRegionScheduler(limit uint64) error

AddShuffleHotRegionScheduler adds a shuffle-hot-region-scheduler.

func (*Handler) AddShuffleLeaderScheduler

func (h *Handler) AddShuffleLeaderScheduler() error

AddShuffleLeaderScheduler adds a shuffle-leader-scheduler.

func (*Handler) AddShuffleRegionScheduler

func (h *Handler) AddShuffleRegionScheduler() error

AddShuffleRegionScheduler adds a shuffle-region-scheduler.

func (*Handler) AddSplitRegionOperator

func (h *Handler) AddSplitRegionOperator(regionID uint64, policy string) error

AddSplitRegionOperator adds an operator to split a region.

func (*Handler) AddTransferLeaderOperator

func (h *Handler) AddTransferLeaderOperator(regionID uint64, storeID uint64) error

AddTransferLeaderOperator adds an operator to transfer leader to the store.

func (*Handler) AddTransferPeerOperator

func (h *Handler) AddTransferPeerOperator(regionID uint64, fromStoreID, toStoreID uint64) error

AddTransferPeerOperator adds an operator to transfer peer.

func (*Handler) AddTransferRegionOperator

func (h *Handler) AddTransferRegionOperator(regionID uint64, storeIDs map[uint64]struct{}) error

AddTransferRegionOperator adds an operator to transfer region to the stores.

func (*Handler) GetAdminOperators

func (h *Handler) GetAdminOperators() ([]*schedule.Operator, error)

GetAdminOperators returns the running admin operators.

func (*Handler) GetAllStoresLimit

func (h *Handler) GetAllStoresLimit() (map[uint64]float64, error)

GetAllStoresLimit is used to get limit of all stores.

func (*Handler) GetDownPeerRegions

func (h *Handler) GetDownPeerRegions() ([]*core.RegionInfo, error)

GetDownPeerRegions gets the region with down peer.

func (*Handler) GetEmptyRegion

func (h *Handler) GetEmptyRegion() ([]*core.RegionInfo, error)

GetEmptyRegion gets the region with empty size.

func (*Handler) GetExtraPeerRegions

func (h *Handler) GetExtraPeerRegions() ([]*core.RegionInfo, error)

GetExtraPeerRegions gets the region exceeds the specified number of peers.

func (*Handler) GetHistory

func (h *Handler) GetHistory(start time.Time) ([]schedule.OperatorHistory, error)

GetHistory returns finished operators' history since start.

func (*Handler) GetHotBytesReadStores

func (h *Handler) GetHotBytesReadStores() map[uint64]uint64

GetHotBytesReadStores gets all hot write stores stats.

func (*Handler) GetHotBytesWriteStores

func (h *Handler) GetHotBytesWriteStores() map[uint64]uint64

GetHotBytesWriteStores gets all hot write stores stats.

func (*Handler) GetHotKeysReadStores

func (h *Handler) GetHotKeysReadStores() map[uint64]uint64

GetHotKeysReadStores gets all hot write stores stats.

func (*Handler) GetHotKeysWriteStores

func (h *Handler) GetHotKeysWriteStores() map[uint64]uint64

GetHotKeysWriteStores gets all hot write stores stats.

func (*Handler) GetHotReadRegions

func (h *Handler) GetHotReadRegions() *statistics.StoreHotRegionInfos

GetHotReadRegions gets all hot read regions stats.

func (*Handler) GetHotWriteRegions

func (h *Handler) GetHotWriteRegions() *statistics.StoreHotRegionInfos

GetHotWriteRegions gets all hot write regions stats.

func (*Handler) GetIncorrectNamespaceRegions

func (h *Handler) GetIncorrectNamespaceRegions() ([]*core.RegionInfo, error)

GetIncorrectNamespaceRegions gets the region with incorrect namespace peer.

func (*Handler) GetLeaderOperators

func (h *Handler) GetLeaderOperators() ([]*schedule.Operator, error)

GetLeaderOperators returns the running leader operators.

func (*Handler) GetMissPeerRegions

func (h *Handler) GetMissPeerRegions() ([]*core.RegionInfo, error)

GetMissPeerRegions gets the region less than the specified number of peers.

func (*Handler) GetOfflinePeer

func (h *Handler) GetOfflinePeer() ([]*core.RegionInfo, error)

GetOfflinePeer gets the region with offline peer.

func (*Handler) GetOperator

func (h *Handler) GetOperator(regionID uint64) (*schedule.Operator, error)

GetOperator returns the region operator.

func (*Handler) GetOperatorStatus

func (h *Handler) GetOperatorStatus(regionID uint64) (*schedule.OperatorWithStatus, error)

GetOperatorStatus returns the status of the region operator.

func (*Handler) GetOperators

func (h *Handler) GetOperators() ([]*schedule.Operator, error)

GetOperators returns the running operators.

func (*Handler) GetOperatorsOfKind

func (h *Handler) GetOperatorsOfKind(mask schedule.OperatorKind) ([]*schedule.Operator, error)

GetOperatorsOfKind returns the running operators of the kind.

func (*Handler) GetPendingPeerRegions

func (h *Handler) GetPendingPeerRegions() ([]*core.RegionInfo, error)

GetPendingPeerRegions gets the region with pending peer.

func (*Handler) GetRaftCluster

func (h *Handler) GetRaftCluster() *RaftCluster

GetRaftCluster returns RaftCluster.

func (*Handler) GetRegionOperators

func (h *Handler) GetRegionOperators() ([]*schedule.Operator, error)

GetRegionOperators returns the running region operators.

func (*Handler) GetScheduleConfig

func (h *Handler) GetScheduleConfig() *ScheduleConfig

GetScheduleConfig returns ScheduleConfig.

func (*Handler) GetSchedulers

func (h *Handler) GetSchedulers() ([]string, error)

GetSchedulers returns all names of schedulers.

func (*Handler) GetStores

func (h *Handler) GetStores() ([]*core.StoreInfo, error)

GetStores returns all stores in the cluster.

func (*Handler) GetWaitingOperators

func (h *Handler) GetWaitingOperators() ([]*schedule.Operator, error)

GetWaitingOperators returns the waiting operators.

func (*Handler) RemoveOperator

func (h *Handler) RemoveOperator(regionID uint64) error

RemoveOperator removes the region operator.

func (*Handler) RemoveScheduler

func (h *Handler) RemoveScheduler(name string) error

RemoveScheduler removes a scheduler by name.

func (*Handler) SetAllStoresLimit

func (h *Handler) SetAllStoresLimit(rate float64) error

SetAllStoresLimit is used to set limit of all stores.

func (*Handler) SetStoreLimit

func (h *Handler) SetStoreLimit(storeID uint64, rate float64) error

SetStoreLimit is used to set the limit of a store.

type LabelPropertyConfig

type LabelPropertyConfig map[string][]StoreLabel

LabelPropertyConfig is the config section to set properties to store labels.

type LeaderLease

type LeaderLease struct {
	ID clientv3.LeaseID
	// contains filtered or unexported fields
}

LeaderLease is used for renewing leadership of PD server.

func NewLeaderLease

func NewLeaderLease(client *clientv3.Client) *LeaderLease

NewLeaderLease creates a lease.

func (*LeaderLease) Close

func (l *LeaderLease) Close() error

Close releases the lease.

func (*LeaderLease) Grant

func (l *LeaderLease) Grant(leaseTimeout int64) error

Grant uses `lease.Grant` to initialize the lease and expireTime.

func (*LeaderLease) IsExpired

func (l *LeaderLease) IsExpired() bool

IsExpired checks if the lease is expired. If it returns true, current PD server should step down and try to re-elect again.

func (*LeaderLease) KeepAlive

func (l *LeaderLease) KeepAlive(ctx context.Context)

KeepAlive auto renews the lease and update expireTime.

type NamespaceConfig

type NamespaceConfig struct {
	// LeaderScheduleLimit is the max coexist leader schedules.
	LeaderScheduleLimit uint64 `json:"leader-schedule-limit"`
	// RegionScheduleLimit is the max coexist region schedules.
	RegionScheduleLimit uint64 `json:"region-schedule-limit"`
	// ReplicaScheduleLimit is the max coexist replica schedules.
	ReplicaScheduleLimit uint64 `json:"replica-schedule-limit"`
	// MergeScheduleLimit is the max coexist merge schedules.
	MergeScheduleLimit uint64 `json:"merge-schedule-limit"`
	// HotRegionScheduleLimit is the max coexist hot region schedules.
	HotRegionScheduleLimit uint64 `json:"hot-region-schedule-limit"`
	// MaxReplicas is the number of replicas for each region.
	MaxReplicas uint64 `json:"max-replicas"`
}

NamespaceConfig is to overwrite the global setting for specific namespace

type PDServerConfig

type PDServerConfig struct {
	// UseRegionStorage enables the independent region storage.
	UseRegionStorage bool `toml:"use-region-storage" json:"use-region-storage,string"`
}

PDServerConfig is the configuration for pd server.

type RaftCluster

type RaftCluster struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

RaftCluster is used for cluster config management. Raft cluster key format: cluster 1 -> /1/raft, value is metapb.Cluster cluster 2 -> /2/raft For cluster 1 store 1 -> /1/raft/s/1, value is metapb.Store region 1 -> /1/raft/r/1, value is metapb.Region

func (*RaftCluster) BuryStore

func (c *RaftCluster) BuryStore(storeID uint64, force bool) error

BuryStore marks a store as tombstone in cluster. State transition: Case 1: Up -> Tombstone (if force is true); Case 2: Offline -> Tombstone.

func (*RaftCluster) DropCacheRegion

func (c *RaftCluster) DropCacheRegion(id uint64)

DropCacheRegion removes a region from the cache.

func (*RaftCluster) GetAdjacentRegions

func (c *RaftCluster) GetAdjacentRegions(region *core.RegionInfo) (*core.RegionInfo, *core.RegionInfo)

GetAdjacentRegions returns regions' information that are adjacent with the specific region ID.

func (*RaftCluster) GetConfig

func (c *RaftCluster) GetConfig() *metapb.Cluster

GetConfig gets config from cluster.

func (*RaftCluster) GetMetaRegions

func (c *RaftCluster) GetMetaRegions() []*metapb.Region

GetMetaRegions gets regions from cluster.

func (*RaftCluster) GetNamespaceClassifier

func (c *RaftCluster) GetNamespaceClassifier() namespace.Classifier

GetNamespaceClassifier returns current namespace classifier.

func (*RaftCluster) GetPrevRegionByKey

func (c *RaftCluster) GetPrevRegionByKey(regionKey []byte) (*metapb.Region, *metapb.Peer)

GetPrevRegionByKey gets previous region and leader peer by the region key from cluster.

func (*RaftCluster) GetRegionByID

func (c *RaftCluster) GetRegionByID(regionID uint64) (*metapb.Region, *metapb.Peer)

GetRegionByID gets region and leader peer by regionID from cluster.

func (*RaftCluster) GetRegionByKey

func (c *RaftCluster) GetRegionByKey(regionKey []byte) (*metapb.Region, *metapb.Peer)

GetRegionByKey gets region and leader peer by region key from cluster.

func (*RaftCluster) GetRegionInfoByID

func (c *RaftCluster) GetRegionInfoByID(regionID uint64) *core.RegionInfo

GetRegionInfoByID gets regionInfo by regionID from cluster.

func (*RaftCluster) GetRegionInfoByKey

func (c *RaftCluster) GetRegionInfoByKey(regionKey []byte) *core.RegionInfo

GetRegionInfoByKey gets regionInfo by region key from cluster.

func (*RaftCluster) GetRegionStats

func (c *RaftCluster) GetRegionStats(startKey, endKey []byte) *statistics.RegionStats

GetRegionStats returns region statistics from cluster.

func (*RaftCluster) GetRegions

func (c *RaftCluster) GetRegions() []*core.RegionInfo

GetRegions returns all regions' information in detail.

func (*RaftCluster) GetStore

func (c *RaftCluster) GetStore(storeID uint64) (*core.StoreInfo, error)

GetStore gets store from cluster.

func (*RaftCluster) GetStoreRegions

func (c *RaftCluster) GetStoreRegions(storeID uint64) []*core.RegionInfo

GetStoreRegions returns all regions' information with a given storeID.

func (*RaftCluster) GetStores

func (c *RaftCluster) GetStores() []*metapb.Store

GetStores gets stores from cluster.

func (*RaftCluster) GetStoresStats

func (c *RaftCluster) GetStoresStats() *statistics.StoresStats

GetStoresStats returns stores' statistics from cluster.

func (*RaftCluster) HandleRegionHeartbeat

func (c *RaftCluster) HandleRegionHeartbeat(region *core.RegionInfo) error

HandleRegionHeartbeat processes RegionInfo reports from client.

func (*RaftCluster) RemoveStore

func (c *RaftCluster) RemoveStore(storeID uint64) error

RemoveStore marks a store as offline in cluster. State transition: Up -> Offline.

func (*RaftCluster) RemoveTombStoneRecords

func (c *RaftCluster) RemoveTombStoneRecords() error

RemoveTombStoneRecords removes the tombStone Records.

func (*RaftCluster) ScanRegionsByKey

func (c *RaftCluster) ScanRegionsByKey(startKey []byte, limit int) []*core.RegionInfo

ScanRegionsByKey scans region with start key, until number greater than limit.

func (*RaftCluster) SetStoreState

func (c *RaftCluster) SetStoreState(storeID uint64, state metapb.StoreState) error

SetStoreState sets up a store's state.

func (*RaftCluster) SetStoreWeight

func (c *RaftCluster) SetStoreWeight(storeID uint64, leaderWeight, regionWeight float64) error

SetStoreWeight sets up a store's leader/region balance weight.

func (*RaftCluster) UpdateStoreLabels

func (c *RaftCluster) UpdateStoreLabels(storeID uint64, labels []*metapb.StoreLabel) error

UpdateStoreLabels updates a store's location labels.

type Replication

type Replication struct {
	// contains filtered or unexported fields
}

Replication provides some help to do replication.

func (*Replication) GetLocationLabels

func (r *Replication) GetLocationLabels() []string

GetLocationLabels returns the location labels for each region

func (*Replication) GetMaxReplicas

func (r *Replication) GetMaxReplicas() int

GetMaxReplicas returns the number of replicas for each region.

func (*Replication) GetStrictlyMatchLabel

func (r *Replication) GetStrictlyMatchLabel() bool

GetStrictlyMatchLabel returns whether check label strict.

func (*Replication) SetMaxReplicas

func (r *Replication) SetMaxReplicas(replicas int)

SetMaxReplicas set the replicas for each region.

type ReplicationConfig

type ReplicationConfig struct {
	// MaxReplicas is the number of replicas for each region.
	MaxReplicas uint64 `toml:"max-replicas,omitempty" json:"max-replicas"`

	// The label keys specified the location of a store.
	// The placement priorities is implied by the order of label keys.
	// For example, ["zone", "rack"] means that we should place replicas to
	// different zones first, then to different racks if we don't have enough zones.
	LocationLabels typeutil.StringSlice `toml:"location-labels,omitempty" json:"location-labels"`
	// StrictlyMatchLabel strictly checks if the label of TiKV is matched with LocaltionLabels.
	StrictlyMatchLabel bool `toml:"strictly-match-label,omitempty" json:"strictly-match-label,string"`
}

ReplicationConfig is the replication configuration.

type ScheduleConfig

type ScheduleConfig struct {
	// If the snapshot count of one store is greater than this value,
	// it will never be used as a source or target store.
	MaxSnapshotCount    uint64 `toml:"max-snapshot-count,omitempty" json:"max-snapshot-count"`
	MaxPendingPeerCount uint64 `toml:"max-pending-peer-count,omitempty" json:"max-pending-peer-count"`
	// If both the size of region is smaller than MaxMergeRegionSize
	// and the number of rows in region is smaller than MaxMergeRegionKeys,
	// it will try to merge with adjacent regions.
	MaxMergeRegionSize uint64 `toml:"max-merge-region-size,omitempty" json:"max-merge-region-size"`
	MaxMergeRegionKeys uint64 `toml:"max-merge-region-keys,omitempty" json:"max-merge-region-keys"`
	// SplitMergeInterval is the minimum interval time to permit merge after split.
	SplitMergeInterval typeutil.Duration `toml:"split-merge-interval,omitempty" json:"split-merge-interval"`
	// EnableOneWayMerge is the option to enable one way merge
	EnableOneWayMerge bool `toml:"enable-one-way-merge,omitempty" json:"enable-one-way-merge,string"`
	// PatrolRegionInterval is the interval for scanning region during patrol.
	PatrolRegionInterval typeutil.Duration `toml:"patrol-region-interval,omitempty" json:"patrol-region-interval"`
	// MaxStoreDownTime is the max duration after which
	// a store will be considered to be down if it hasn't reported heartbeats.
	MaxStoreDownTime typeutil.Duration `toml:"max-store-down-time,omitempty" json:"max-store-down-time"`
	// LeaderScheduleLimit is the max coexist leader schedules.
	LeaderScheduleLimit uint64 `toml:"leader-schedule-limit,omitempty" json:"leader-schedule-limit"`
	// RegionScheduleLimit is the max coexist region schedules.
	RegionScheduleLimit uint64 `toml:"region-schedule-limit,omitempty" json:"region-schedule-limit"`
	// ReplicaScheduleLimit is the max coexist replica schedules.
	ReplicaScheduleLimit uint64 `toml:"replica-schedule-limit,omitempty" json:"replica-schedule-limit"`
	// MergeScheduleLimit is the max coexist merge schedules.
	MergeScheduleLimit uint64 `toml:"merge-schedule-limit,omitempty" json:"merge-schedule-limit"`
	// HotRegionScheduleLimit is the max coexist hot region schedules.
	HotRegionScheduleLimit uint64 `toml:"hot-region-schedule-limit,omitempty" json:"hot-region-schedule-limit"`
	// HotRegionCacheHitThreshold is the cache hits threshold of the hot region.
	// If the number of times a region hits the hot cache is greater than this
	// threshold, it is considered a hot region.
	HotRegionCacheHitsThreshold uint64 `toml:"hot-region-cache-hits-threshold,omitempty" json:"hot-region-cache-hits-threshold"`
	// StoreBalanceRate is the maximum of balance rate for each store.
	StoreBalanceRate float64 `toml:"store-balance-rate,omitempty" json:"store-balance-rate"`
	// TolerantSizeRatio is the ratio of buffer size for balance scheduler.
	TolerantSizeRatio float64 `toml:"tolerant-size-ratio,omitempty" json:"tolerant-size-ratio"`
	//
	//      high space stage         transition stage           low space stage
	//   |--------------------|-----------------------------|-------------------------|
	//   ^                    ^                             ^                         ^
	//   0       HighSpaceRatio * capacity       LowSpaceRatio * capacity          capacity
	//
	// LowSpaceRatio is the lowest usage ratio of store which regraded as low space.
	// When in low space, store region score increases to very large and varies inversely with available size.
	LowSpaceRatio float64 `toml:"low-space-ratio,omitempty" json:"low-space-ratio"`
	// HighSpaceRatio is the highest usage ratio of store which regraded as high space.
	// High space means there is a lot of spare capacity, and store region score varies directly with used size.
	HighSpaceRatio float64 `toml:"high-space-ratio,omitempty" json:"high-space-ratio"`
	// SchedulerMaxWaitingOperator is the max coexist operators for each scheduler.
	SchedulerMaxWaitingOperator uint64 `toml:"scheduler-max-waiting-operator,omitempty" json:"scheduler-max-waiting-operator"`
	// DisableLearner is the option to disable using AddLearnerNode instead of AddNode.
	DisableLearner bool `toml:"disable-raft-learner" json:"disable-raft-learner,string"`

	// DisableRemoveDownReplica is the option to prevent replica checker from
	// removing down replicas.
	DisableRemoveDownReplica bool `toml:"disable-remove-down-replica" json:"disable-remove-down-replica,string"`
	// DisableReplaceOfflineReplica is the option to prevent replica checker from
	// replacing offline replicas.
	DisableReplaceOfflineReplica bool `toml:"disable-replace-offline-replica" json:"disable-replace-offline-replica,string"`
	// DisableMakeUpReplica is the option to prevent replica checker from making up
	// replicas when replica count is less than expected.
	DisableMakeUpReplica bool `toml:"disable-make-up-replica" json:"disable-make-up-replica,string"`
	// DisableRemoveExtraReplica is the option to prevent replica checker from
	// removing extra replicas.
	DisableRemoveExtraReplica bool `toml:"disable-remove-extra-replica" json:"disable-remove-extra-replica,string"`
	// DisableLocationReplacement is the option to prevent replica checker from
	// moving replica to a better location.
	DisableLocationReplacement bool `toml:"disable-location-replacement" json:"disable-location-replacement,string"`
	// DisableNamespaceRelocation is the option to prevent namespace checker
	// from moving replica to the target namespace.
	DisableNamespaceRelocation bool `toml:"disable-namespace-relocation" json:"disable-namespace-relocation,string"`

	// Schedulers support for loading customized schedulers
	Schedulers SchedulerConfigs `toml:"schedulers,omitempty" json:"schedulers-v2"` // json v2 is for the sake of compatible upgrade
}

ScheduleConfig is the schedule configuration.

type SchedulerConfig

type SchedulerConfig struct {
	Type    string   `toml:"type" json:"type"`
	Args    []string `toml:"args,omitempty" json:"args"`
	Disable bool     `toml:"disable" json:"disable"`
}

SchedulerConfig is customized scheduler configuration

type SchedulerConfigs

type SchedulerConfigs []SchedulerConfig

SchedulerConfigs is a slice of customized scheduler configuration.

type SecurityConfig

type SecurityConfig struct {
	// CAPath is the path of file that contains list of trusted SSL CAs. if set, following four settings shouldn't be empty
	CAPath string `toml:"cacert-path" json:"cacert-path"`
	// CertPath is the path of file that contains X509 certificate in PEM format.
	CertPath string `toml:"cert-path" json:"cert-path"`
	// KeyPath is the path of file that contains X509 key in PEM format.
	KeyPath string `toml:"key-path" json:"key-path"`
}

SecurityConfig is the configuration for supporting tls.

func (*SecurityConfig) ConvertToMap

func (s *SecurityConfig) ConvertToMap() map[string]string

ConvertToMap is used to convert SecurityConfig to a map.

type Server

type Server struct {
	// contains filtered or unexported fields
}

Server is the pd server.

func CreateServer

func CreateServer(cfg *Config, apiRegister func(*Server) http.Handler) (*Server, error)

CreateServer creates the UNINITIALIZED pd server with given configuration.

func (*Server) AllocID

func (s *Server) AllocID(ctx context.Context, request *pdpb.AllocIDRequest) (*pdpb.AllocIDResponse, error)

AllocID implements gRPC PDServer.

func (*Server) AskBatchSplit

func (s *Server) AskBatchSplit(ctx context.Context, request *pdpb.AskBatchSplitRequest) (*pdpb.AskBatchSplitResponse, error)

AskBatchSplit implements gRPC PDServer.

func (*Server) AskSplit

func (s *Server) AskSplit(ctx context.Context, request *pdpb.AskSplitRequest) (*pdpb.AskSplitResponse, error)

AskSplit implements gRPC PDServer.

func (*Server) Bootstrap

func (s *Server) Bootstrap(ctx context.Context, request *pdpb.BootstrapRequest) (*pdpb.BootstrapResponse, error)

Bootstrap implements gRPC PDServer.

func (*Server) CheckHealth

func (s *Server) CheckHealth(members []*pdpb.Member) map[uint64]*pdpb.Member

CheckHealth checks if members are healthy.

func (*Server) Close

func (s *Server) Close()

Close closes the server.

func (*Server) ClusterID

func (s *Server) ClusterID() uint64

ClusterID returns the cluster ID of this server.

func (*Server) Context

func (s *Server) Context() context.Context

Context returns the loop context of server.

func (*Server) DeleteLabelProperty

func (s *Server) DeleteLabelProperty(typ, labelKey, labelValue string) error

DeleteLabelProperty deletes a label property config.

func (*Server) DeleteMemberLeaderPriority

func (s *Server) DeleteMemberLeaderPriority(id uint64) error

DeleteMemberLeaderPriority removes a member's priority config.

func (*Server) DeleteNamespaceConfig

func (s *Server) DeleteNamespaceConfig(name string) error

DeleteNamespaceConfig deletes the namespace config.

func (*Server) GetAddr

func (s *Server) GetAddr() string

GetAddr returns the server urls for clients.

func (*Server) GetAllStores

func (s *Server) GetAllStores(ctx context.Context, request *pdpb.GetAllStoresRequest) (*pdpb.GetAllStoresResponse, error)

GetAllStores implements gRPC PDServer.

func (*Server) GetClassifier

func (s *Server) GetClassifier() namespace.Classifier

GetClassifier returns the classifier of this server.

func (*Server) GetClient

func (s *Server) GetClient() *clientv3.Client

GetClient returns builtin etcd client.

func (*Server) GetCluster

func (s *Server) GetCluster() *metapb.Cluster

GetCluster gets cluster.

func (*Server) GetClusterConfig

func (s *Server) GetClusterConfig(ctx context.Context, request *pdpb.GetClusterConfigRequest) (*pdpb.GetClusterConfigResponse, error)

GetClusterConfig implements gRPC PDServer.

func (*Server) GetClusterStatus

func (s *Server) GetClusterStatus() (*ClusterStatus, error)

GetClusterStatus gets cluster status.

func (*Server) GetClusterVersion

func (s *Server) GetClusterVersion() semver.Version

GetClusterVersion returns the version of cluster.

func (*Server) GetConfig

func (s *Server) GetConfig() *Config

GetConfig gets the config information.

func (*Server) GetEndpoints

func (s *Server) GetEndpoints() []string

GetEndpoints returns the etcd endpoints for outer use.

func (*Server) GetEtcdLeader

func (s *Server) GetEtcdLeader() uint64

GetEtcdLeader returns the etcd leader ID.

func (*Server) GetGCSafePoint

func (s *Server) GetGCSafePoint(ctx context.Context, request *pdpb.GetGCSafePointRequest) (*pdpb.GetGCSafePointResponse, error)

GetGCSafePoint implements gRPC PDServer.

func (*Server) GetHandler

func (s *Server) GetHandler() *Handler

GetHandler returns the handler for API.

func (*Server) GetLabelProperty

func (s *Server) GetLabelProperty() LabelPropertyConfig

GetLabelProperty returns the whole label property config.

func (*Server) GetLeader

func (s *Server) GetLeader() *pdpb.Member

GetLeader returns current leader of PD cluster.

func (*Server) GetLeaderID

func (s *Server) GetLeaderID() uint64

GetLeaderID returns current leader's member ID.

func (*Server) GetMemberInfo

func (s *Server) GetMemberInfo() *pdpb.Member

GetMemberInfo returns the server member information.

func (*Server) GetMemberLeaderPriority

func (s *Server) GetMemberLeaderPriority(id uint64) (int, error)

GetMemberLeaderPriority loads a member's priority to be elected as the etcd leader.

func (*Server) GetMembers

GetMembers implements gRPC PDServer.

func (*Server) GetMetaRegions

func (s *Server) GetMetaRegions() []*metapb.Region

GetMetaRegions gets meta regions from cluster.

func (*Server) GetNamespaceConfig

func (s *Server) GetNamespaceConfig(name string) *NamespaceConfig

GetNamespaceConfig get the namespace config.

func (*Server) GetNamespaceConfigWithAdjust

func (s *Server) GetNamespaceConfigWithAdjust(name string) *NamespaceConfig

GetNamespaceConfigWithAdjust get the namespace config that replace zero value with global config value.

func (*Server) GetOperator

func (s *Server) GetOperator(ctx context.Context, request *pdpb.GetOperatorRequest) (*pdpb.GetOperatorResponse, error)

GetOperator gets information about the operator belonging to the speicfy region.

func (*Server) GetPrevRegion

func (s *Server) GetPrevRegion(ctx context.Context, request *pdpb.GetRegionRequest) (*pdpb.GetRegionResponse, error)

GetPrevRegion implements gRPC PDServer

func (*Server) GetRaftCluster

func (s *Server) GetRaftCluster() *RaftCluster

GetRaftCluster gets Raft cluster. If cluster has not been bootstrapped, return nil.

func (*Server) GetRegion

func (s *Server) GetRegion(ctx context.Context, request *pdpb.GetRegionRequest) (*pdpb.GetRegionResponse, error)

GetRegion implements gRPC PDServer.

func (*Server) GetRegionByID

func (s *Server) GetRegionByID(ctx context.Context, request *pdpb.GetRegionByIDRequest) (*pdpb.GetRegionResponse, error)

GetRegionByID implements gRPC PDServer.

func (*Server) GetReplicationConfig

func (s *Server) GetReplicationConfig() *ReplicationConfig

GetReplicationConfig get the replication config.

func (*Server) GetScheduleConfig

func (s *Server) GetScheduleConfig() *ScheduleConfig

GetScheduleConfig gets the balance config information.

func (*Server) GetSecurityConfig

func (s *Server) GetSecurityConfig() map[string]string

GetSecurityConfig get paths of the security config.

func (*Server) GetStorage

func (s *Server) GetStorage() *core.KV

GetStorage returns the backend storage of server.

func (*Server) GetStore

func (s *Server) GetStore(ctx context.Context, request *pdpb.GetStoreRequest) (*pdpb.GetStoreResponse, error)

GetStore implements gRPC PDServer.

func (*Server) ID

func (s *Server) ID() uint64

ID returns the unique etcd ID for this server in etcd cluster.

func (*Server) IsBootstrapped

func (s *Server) IsBootstrapped(ctx context.Context, request *pdpb.IsBootstrappedRequest) (*pdpb.IsBootstrappedResponse, error)

IsBootstrapped implements gRPC PDServer.

func (*Server) IsLeader

func (s *Server) IsLeader() bool

IsLeader returns whether the server is leader or not.

func (*Server) IsNamespaceExist

func (s *Server) IsNamespaceExist(name string) bool

IsNamespaceExist returns whether the namespace exists.

func (*Server) MoveEtcdLeader

func (s *Server) MoveEtcdLeader(ctx context.Context, old, new uint64) error

MoveEtcdLeader tries to transfer etcd leader.

func (*Server) Name

func (s *Server) Name() string

Name returns the unique etcd Name for this server in etcd cluster.

func (*Server) PutClusterConfig

func (s *Server) PutClusterConfig(ctx context.Context, request *pdpb.PutClusterConfigRequest) (*pdpb.PutClusterConfigResponse, error)

PutClusterConfig implements gRPC PDServer.

func (*Server) PutStore

func (s *Server) PutStore(ctx context.Context, request *pdpb.PutStoreRequest) (*pdpb.PutStoreResponse, error)

PutStore implements gRPC PDServer.

func (*Server) RegionHeartbeat

func (s *Server) RegionHeartbeat(stream pdpb.PD_RegionHeartbeatServer) error

RegionHeartbeat implements gRPC PDServer.

func (*Server) ReportBatchSplit

func (s *Server) ReportBatchSplit(ctx context.Context, request *pdpb.ReportBatchSplitRequest) (*pdpb.ReportBatchSplitResponse, error)

ReportBatchSplit implements gRPC PDServer.

func (*Server) ReportSplit

func (s *Server) ReportSplit(ctx context.Context, request *pdpb.ReportSplitRequest) (*pdpb.ReportSplitResponse, error)

ReportSplit implements gRPC PDServer.

func (*Server) ResignLeader

func (s *Server) ResignLeader(nextLeader string) error

ResignLeader resigns current PD's leadership. If nextLeader is empty, all other pd-servers can campaign.

func (*Server) Run

func (s *Server) Run(ctx context.Context) error

Run runs the pd server.

func (*Server) ScanRegions

func (s *Server) ScanRegions(ctx context.Context, request *pdpb.ScanRegionsRequest) (*pdpb.ScanRegionsResponse, error)

ScanRegions implements gRPC PDServer.

func (*Server) ScatterRegion

func (s *Server) ScatterRegion(ctx context.Context, request *pdpb.ScatterRegionRequest) (*pdpb.ScatterRegionResponse, error)

ScatterRegion implements gRPC PDServer.

func (*Server) SetClusterVersion

func (s *Server) SetClusterVersion(v string) error

SetClusterVersion sets the version of cluster.

func (*Server) SetLabelProperty

func (s *Server) SetLabelProperty(typ, labelKey, labelValue string) error

SetLabelProperty inserts a label property config.

func (*Server) SetLogLevel

func (s *Server) SetLogLevel(level string)

SetLogLevel sets log level.

func (*Server) SetMemberLeaderPriority

func (s *Server) SetMemberLeaderPriority(id uint64, priority int) error

SetMemberLeaderPriority saves a member's priority to be elected as the etcd leader.

func (*Server) SetNamespaceConfig

func (s *Server) SetNamespaceConfig(name string, cfg NamespaceConfig) error

SetNamespaceConfig sets the namespace config.

func (*Server) SetPDServerConfig

func (s *Server) SetPDServerConfig(cfg PDServerConfig) error

SetPDServerConfig sets the server config.

func (*Server) SetReplicationConfig

func (s *Server) SetReplicationConfig(cfg ReplicationConfig) error

SetReplicationConfig sets the replication config.

func (*Server) SetScheduleConfig

func (s *Server) SetScheduleConfig(cfg ScheduleConfig) error

SetScheduleConfig sets the balance config information.

func (*Server) StoreHeartbeat

func (s *Server) StoreHeartbeat(ctx context.Context, request *pdpb.StoreHeartbeatRequest) (*pdpb.StoreHeartbeatResponse, error)

StoreHeartbeat implements gRPC PDServer.

func (*Server) SyncRegions

func (s *Server) SyncRegions(stream pdpb.PD_SyncRegionsServer) error

SyncRegions syncs the regions.

func (*Server) Tso

func (s *Server) Tso(stream pdpb.PD_TsoServer) error

Tso implements gRPC PDServer.

func (*Server) UpdateGCSafePoint

func (s *Server) UpdateGCSafePoint(ctx context.Context, request *pdpb.UpdateGCSafePointRequest) (*pdpb.UpdateGCSafePointResponse, error)

UpdateGCSafePoint implements gRPC PDServer.

type StoreLabel

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

StoreLabel is the config item of LabelPropertyConfig.

Directories

Path Synopsis
Package core defines core characteristics of the server.
Package core defines core characteristics of the server.

Jump to

Keyboard shortcuts

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