Documentation ¶
Index ¶
- Constants
- func DistinctScore(labels []string, stores []*core.StoreInfo, other *core.StoreInfo) float64
- func FilterSource(store *core.StoreInfo, filters []Filter) bool
- func FilterTarget(store *core.StoreInfo, filters []Filter) bool
- func RegisterScheduler(name string, createFn CreateSchedulerFunc)
- type AddPeer
- type Cluster
- type CreateSchedulerFunc
- type Filter
- func NewBlockFilter() Filter
- func NewCacheFilter(cache *cache.TTLUint64) Filter
- func NewDistinctScoreFilter(labels []string, stores []*core.StoreInfo, source *core.StoreInfo) Filter
- func NewExcludedFilter(sources, targets map[uint64]struct{}) Filter
- func NewHealthFilter(opt Options) Filter
- func NewNamespaceFilter(classifier namespace.Classifier, namespace string) Filter
- func NewSnapshotCountFilter(opt Options) Filter
- func NewStateFilter(opt Options) Filter
- func NewStorageThresholdFilter(opt Options) Filter
- type NamespaceChecker
- func (n *NamespaceChecker) Check(region *core.RegionInfo) *Operator
- func (n *NamespaceChecker) SelectBestPeerToRelocate(region *core.RegionInfo, targets []*core.StoreInfo, filters ...Filter) *metapb.Peer
- func (n *NamespaceChecker) SelectBestStoreToRelocate(region *core.RegionInfo, targets []*core.StoreInfo, filters ...Filter) uint64
- type Operator
- func CreateMovePeerOperator(desc string, region *core.RegionInfo, kind core.ResourceKind, ...) *Operator
- func CreateRemovePeerOperator(desc string, region *core.RegionInfo, storeID uint64) *Operator
- func NewOperator(desc string, regionID uint64, kind core.ResourceKind, steps ...OperatorStep) *Operator
- func (o *Operator) Check(region *core.RegionInfo) OperatorStep
- func (o *Operator) Desc() string
- func (o *Operator) ElapsedTime() time.Duration
- func (o *Operator) IsFinish() bool
- func (o *Operator) IsTimeout() bool
- func (o *Operator) Len() int
- func (o *Operator) MarshalJSON() ([]byte, error)
- func (o *Operator) RegionID() uint64
- func (o *Operator) ResourceKind() core.ResourceKind
- func (o *Operator) Step(i int) OperatorStep
- func (o *Operator) String() string
- type OperatorStep
- type Options
- type RemovePeer
- type ReplicaChecker
- type Scheduler
- type Selector
- type TransferLeader
Constants ¶
const ( MaxScheduleInterval = time.Minute MinScheduleInterval = time.Millisecond * 10 MinSlowScheduleInterval = time.Second * 3 )
options for interval of schedulers
const MaxOperatorWaitTime = 5 * time.Minute
MaxOperatorWaitTime is the duration that if an operator lives longer that it, the operator is considered timeout.
Variables ¶
This section is empty.
Functions ¶
func DistinctScore ¶
DistinctScore returns the score that the other is distinct from the stores. A higher score means the other store is more different from the existed stores.
func FilterSource ¶
FilterSource checks if store can pass all Filters as source store.
func FilterTarget ¶
FilterTarget checks if store can pass all Filters as target store.
func RegisterScheduler ¶
func RegisterScheduler(name string, createFn CreateSchedulerFunc)
RegisterScheduler binds a scheduler creator. It should be called in init() func of a package.
Types ¶
type AddPeer ¶
type AddPeer struct {
ToStore, PeerID uint64
}
AddPeer is an OperatorStep that adds a region peer.
type Cluster ¶
type Cluster interface { RandFollowerRegion(storeID uint64) *core.RegionInfo RandLeaderRegion(storeID uint64) *core.RegionInfo GetStores() []*core.StoreInfo GetStore(id uint64) *core.StoreInfo GetRegion(id uint64) *core.RegionInfo GetRegionStores(region *core.RegionInfo) []*core.StoreInfo GetFollowerStores(region *core.RegionInfo) []*core.StoreInfo GetLeaderStore(region *core.RegionInfo) *core.StoreInfo BlockStore(id uint64) error UnblockStore(id uint64) IsRegionHot(id uint64) bool RegionWriteStats() []*core.RegionStat RegionReadStats() []*core.RegionStat // TODO: it should be removed. Schedulers don't need to know anything // about peers. AllocPeer(storeID uint64) (*metapb.Peer, error) }
Cluster provides an overview of a cluster's regions distribution.
type CreateSchedulerFunc ¶
CreateSchedulerFunc is for creating scheudler.
type Filter ¶
type Filter interface { // Return true if the store should not be used as a source store. FilterSource(store *core.StoreInfo) bool // Return true if the store should not be used as a target store. FilterTarget(store *core.StoreInfo) bool }
Filter is an interface to filter source and target store.
func NewBlockFilter ¶
func NewBlockFilter() Filter
NewBlockFilter creates a Filter that filters all stores that are blocked from balance.
func NewCacheFilter ¶
NewCacheFilter creates a Filter that filters all stores that are in the cache.
func NewDistinctScoreFilter ¶
func NewDistinctScoreFilter(labels []string, stores []*core.StoreInfo, source *core.StoreInfo) Filter
NewDistinctScoreFilter creates a filter that filters all stores that have lower distinct score than specified store.
func NewExcludedFilter ¶
NewExcludedFilter creates a Filter that filters all specified stores.
func NewHealthFilter ¶
NewHealthFilter creates a Filter that filters all stores that are Busy or Down.
func NewNamespaceFilter ¶
func NewNamespaceFilter(classifier namespace.Classifier, namespace string) Filter
NewNamespaceFilter creates a Filter that filters all stores that are not belong to a namespace.
func NewSnapshotCountFilter ¶
NewSnapshotCountFilter creates a Filter that filters all stores that are currently handling too many snapshots.
func NewStateFilter ¶
NewStateFilter creates a Filter that filters all stores that are not UP.
func NewStorageThresholdFilter ¶
NewStorageThresholdFilter creates a Filter that filters all stores that are almost full.
type NamespaceChecker ¶
type NamespaceChecker struct {
// contains filtered or unexported fields
}
NamespaceChecker ensures region to go to the right place.
func NewNamespaceChecker ¶
func NewNamespaceChecker(opt Options, cluster Cluster, classifier namespace.Classifier) *NamespaceChecker
NewNamespaceChecker creates a namespace checker.
func (*NamespaceChecker) Check ¶
func (n *NamespaceChecker) Check(region *core.RegionInfo) *Operator
Check verifies a region's namespace, creating an Operator if need.
func (*NamespaceChecker) SelectBestPeerToRelocate ¶
func (n *NamespaceChecker) SelectBestPeerToRelocate(region *core.RegionInfo, targets []*core.StoreInfo, filters ...Filter) *metapb.Peer
SelectBestPeerToRelocate return a new peer that to be used to move a region
func (*NamespaceChecker) SelectBestStoreToRelocate ¶
func (n *NamespaceChecker) SelectBestStoreToRelocate(region *core.RegionInfo, targets []*core.StoreInfo, filters ...Filter) uint64
SelectBestStoreToRelocate randomly returns the store to relocate
type Operator ¶
type Operator struct {
// contains filtered or unexported fields
}
Operator contains execution steps generated by scheduler.
func CreateMovePeerOperator ¶
func CreateMovePeerOperator(desc string, region *core.RegionInfo, kind core.ResourceKind, oldStore, newStore uint64, peerID uint64) *Operator
CreateMovePeerOperator creates an Operator that replaces an old peer with a new peer. It prevents removing leader by transfer its leadership first.
func CreateRemovePeerOperator ¶
func CreateRemovePeerOperator(desc string, region *core.RegionInfo, storeID uint64) *Operator
CreateRemovePeerOperator creates an Operator that removes a peer from region. It prevents removing leader by tranfer its leadership first.
func NewOperator ¶
func NewOperator(desc string, regionID uint64, kind core.ResourceKind, steps ...OperatorStep) *Operator
NewOperator creates a new operator.
func (*Operator) Check ¶
func (o *Operator) Check(region *core.RegionInfo) OperatorStep
Check checks if current step is finished, returns next step to take action. It's safe to be called by multiple goroutine concurrently.
func (*Operator) ElapsedTime ¶
ElapsedTime returns duration since it was created.
func (*Operator) IsTimeout ¶
IsTimeout checks the operator's create time and determines if it is timeout.
func (*Operator) MarshalJSON ¶
MarshalJSON serialize custom types to JSON
func (*Operator) ResourceKind ¶
func (o *Operator) ResourceKind() core.ResourceKind
ResourceKind returns operator's resource kind.
type OperatorStep ¶
type OperatorStep interface { fmt.Stringer IsFinish(region *core.RegionInfo) bool }
OperatorStep describes the basic scheduling steps that can not be subdivided.
type Options ¶
type Options interface { GetLeaderScheduleLimit() uint64 GetRegionScheduleLimit() uint64 GetMaxSnapshotCount() uint64 GetMaxStoreDownTime() time.Duration GetMaxReplicas() int GetLocationLabels() []string GetHotRegionLowThreshold() int }
Options for schedulers.
type RemovePeer ¶
type RemovePeer struct {
FromStore uint64
}
RemovePeer is an OperatorStep that removes a region peer.
func (RemovePeer) IsFinish ¶
func (rp RemovePeer) IsFinish(region *core.RegionInfo) bool
IsFinish checks if current step is finished.
func (RemovePeer) String ¶
func (rp RemovePeer) String() string
type ReplicaChecker ¶
type ReplicaChecker struct {
// contains filtered or unexported fields
}
ReplicaChecker ensures region has the best replicas.
func NewReplicaChecker ¶
func NewReplicaChecker(opt Options, cluster Cluster, classifier namespace.Classifier) *ReplicaChecker
NewReplicaChecker creates a replica checker.
func (*ReplicaChecker) Check ¶
func (r *ReplicaChecker) Check(region *core.RegionInfo) *Operator
Check verifies a region's replicas, creating an Operator if need.
func (*ReplicaChecker) SelectBestPeerToAddReplica ¶
func (r *ReplicaChecker) SelectBestPeerToAddReplica(region *core.RegionInfo, filters ...Filter) *metapb.Peer
SelectBestPeerToAddReplica returns a new peer that to be used to add a replica.
func (*ReplicaChecker) SelectBestStoreToAddReplica ¶
func (r *ReplicaChecker) SelectBestStoreToAddReplica(region *core.RegionInfo, filters ...Filter) (uint64, float64)
SelectBestStoreToAddReplica returns the store to add a replica.
type Scheduler ¶
type Scheduler interface { GetName() string // GetType should in accordance with the name passing to schedule.RegisterScheduler() GetType() string GetInterval() time.Duration GetResourceKind() core.ResourceKind GetResourceLimit() uint64 Prepare(cluster Cluster) error Cleanup(cluster Cluster) Schedule(cluster Cluster) *Operator }
Scheduler is an interface to schedule resources.
type Selector ¶
type Selector interface { SelectSource(stores []*core.StoreInfo, filters ...Filter) *core.StoreInfo SelectTarget(stores []*core.StoreInfo, filters ...Filter) *core.StoreInfo }
Selector is an interface to select source and target store to schedule.
func NewBalanceSelector ¶
func NewBalanceSelector(kind core.ResourceKind, filters []Filter) Selector
NewBalanceSelector creates a Selector that select source/target store by their resource scores.
func NewRandomSelector ¶
NewRandomSelector creates a selector that select store randomly.
type TransferLeader ¶
type TransferLeader struct {
FromStore, ToStore uint64
}
TransferLeader is an OperatorStep that transfers a region's leader.
func (TransferLeader) IsFinish ¶
func (tl TransferLeader) IsFinish(region *core.RegionInfo) bool
IsFinish checks if current step is finished.
func (TransferLeader) String ¶
func (tl TransferLeader) String() string