mirror of
https://github.com/talent-plan/tinykv.git
synced 2024-12-28 22:00:42 +08:00
128 lines
3.5 KiB
Go
128 lines
3.5 KiB
Go
|
// Copyright 2019 PingCAP, Inc.
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
|
||
|
package core
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
|
||
|
"github.com/gogo/protobuf/proto"
|
||
|
"github.com/pingcap-incubator/tinykv/proto/pkg/metapb"
|
||
|
"github.com/pingcap-incubator/tinykv/proto/pkg/schedulerpb"
|
||
|
)
|
||
|
|
||
|
// StoreCreateOption is used to create store.
|
||
|
type StoreCreateOption func(region *StoreInfo)
|
||
|
|
||
|
// SetStoreAddress sets the address for the store.
|
||
|
func SetStoreAddress(address string) StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
meta := proto.Clone(store.meta).(*metapb.Store)
|
||
|
meta.Address = address
|
||
|
store.meta = meta
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SetStoreState sets the state for the store.
|
||
|
func SetStoreState(state metapb.StoreState) StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
meta := proto.Clone(store.meta).(*metapb.Store)
|
||
|
meta.State = state
|
||
|
store.meta = meta
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SetStoreBlock stops balancer from selecting the store.
|
||
|
func SetStoreBlock() StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
store.blocked = true
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SetStoreUnBlock allows balancer to select the store.
|
||
|
func SetStoreUnBlock() StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
store.blocked = false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SetLeaderCount sets the leader count for the store.
|
||
|
func SetLeaderCount(leaderCount int) StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
store.leaderCount = leaderCount
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SetRegionCount sets the Region count for the store.
|
||
|
func SetRegionCount(regionCount int) StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
store.regionCount = regionCount
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SetPendingPeerCount sets the pending peer count for the store.
|
||
|
func SetPendingPeerCount(pendingPeerCount int) StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
store.pendingPeerCount = pendingPeerCount
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SetLeaderSize sets the leader size for the store.
|
||
|
func SetLeaderSize(leaderSize int64) StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
store.leaderSize = leaderSize
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SetRegionSize sets the Region size for the store.
|
||
|
func SetRegionSize(regionSize int64) StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
store.regionSize = regionSize
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SetLeaderWeight sets the leader weight for the store.
|
||
|
func SetLeaderWeight(leaderWeight float64) StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
store.leaderWeight = leaderWeight
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SetRegionWeight sets the Region weight for the store.
|
||
|
func SetRegionWeight(regionWeight float64) StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
store.regionWeight = regionWeight
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SetLastHeartbeatTS sets the time of last heartbeat for the store.
|
||
|
func SetLastHeartbeatTS(lastHeartbeatTS time.Time) StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
store.lastHeartbeatTS = lastHeartbeatTS
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SetStoreStats sets the statistics information for the store.
|
||
|
func SetStoreStats(stats *schedulerpb.StoreStats) StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
store.stats = stats
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// SetAvailableFunc sets a customize function for the store. The function f returns true if the store limit is not exceeded.
|
||
|
func SetAvailableFunc(f func() bool) StoreCreateOption {
|
||
|
return func(store *StoreInfo) {
|
||
|
store.available = f
|
||
|
}
|
||
|
}
|