diff --git a/server/coordinator_test.go b/server/coordinator_test.go index a43ff5a5a3e2..86483c798305 100644 --- a/server/coordinator_test.go +++ b/server/coordinator_test.go @@ -688,13 +688,14 @@ func (s *testCoordinatorSuite) TestPersistScheduler(c *C) { co.run() storage = tc.RaftCluster.storage c.Assert(co.schedulers, HasLen, 3) - bls, err := schedule.CreateScheduler("balance-leader", oc, storage, nil) + bls, err := schedule.CreateScheduler("balance-leader", oc, storage, schedule.ConfigSliceDecoder("balance-leader", []string{"", ""})) c.Assert(err, IsNil) c.Assert(co.addScheduler(bls), IsNil) - brs, err := schedule.CreateScheduler("balance-region", oc, storage, nil) + brs, err := schedule.CreateScheduler("balance-region", oc, storage, schedule.ConfigSliceDecoder("balance-region", []string{"", ""})) c.Assert(err, IsNil) c.Assert(co.addScheduler(brs), IsNil) c.Assert(co.schedulers, HasLen, 5) + // the scheduler option should contain 7 items // the `hot scheduler` and `label scheduler` are disabled c.Assert(co.cluster.opt.GetSchedulers(), HasLen, 7) @@ -705,7 +706,7 @@ func (s *testCoordinatorSuite) TestPersistScheduler(c *C) { c.Assert(co.cluster.opt.Persist(co.cluster.storage), IsNil) co.stop() co.wg.Wait() - + fmt.Println("------------------------------") _, newOpt, err = newTestScheduleConfig() c.Assert(err, IsNil) c.Assert(newOpt.Reload(co.cluster.storage), IsNil) @@ -872,7 +873,7 @@ func (s *testOperatorControllerSuite) TestStoreOverloaded(c *C) { defer cleanup() defer hbStreams.Close() oc := schedule.NewOperatorController(tc.RaftCluster, hbStreams) - lb, err := schedule.CreateScheduler("balance-region", oc, tc.storage, nil) + lb, err := schedule.CreateScheduler("balance-region", oc, tc.storage, schedule.ConfigSliceDecoder("balance-region", []string{"", ""})) c.Assert(err, IsNil) c.Assert(tc.addRegionStore(4, 40), IsNil) @@ -907,7 +908,7 @@ func (s *testOperatorControllerSuite) TestStoreOverloadedWithReplace(c *C) { defer cleanup() defer hbStreams.Close() oc := schedule.NewOperatorController(tc.RaftCluster, hbStreams) - lb, err := schedule.CreateScheduler("balance-region", oc, tc.storage, nil) + lb, err := schedule.CreateScheduler("balance-region", oc, tc.storage, schedule.ConfigSliceDecoder("balance-region", []string{"", ""})) c.Assert(err, IsNil) c.Assert(tc.addRegionStore(4, 40), IsNil) @@ -957,7 +958,7 @@ func (s *testScheduleControllerSuite) TestController(c *C) { co := newCoordinator(tc.RaftCluster, hbStreams, namespace.DefaultClassifier) oc := co.opController - scheduler, err := schedule.CreateScheduler("balance-leader", oc, core.NewStorage(kv.NewMemoryKV()), nil) + scheduler, err := schedule.CreateScheduler("balance-leader", oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("balance-leader", []string{"", ""})) c.Assert(err, IsNil) lb := &mockLimitScheduler{ Scheduler: scheduler, @@ -1032,7 +1033,7 @@ func (s *testScheduleControllerSuite) TestInterval(c *C) { defer hbStreams.Close() co := newCoordinator(tc.RaftCluster, hbStreams, namespace.DefaultClassifier) - lb, err := schedule.CreateScheduler("balance-leader", co.opController, core.NewStorage(kv.NewMemoryKV()), nil) + lb, err := schedule.CreateScheduler("balance-leader", co.opController, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("balance-leader", []string{"", ""})) c.Assert(err, IsNil) sc := newScheduleController(co, lb) diff --git a/server/core/basic_cluster.go b/server/core/basic_cluster.go index f4f07683d426..fe16b664b26d 100644 --- a/server/core/basic_cluster.go +++ b/server/core/basic_cluster.go @@ -339,13 +339,13 @@ type StoreSetController interface { // KeyRange is a key range. type KeyRange struct { StartKey []byte `json:"start-key"` - EndKey []byte `json:"end-key"` + EndKey []byte `json:"end-key"` } // NewKeyRange create a KeyRange with the given start key and end key. func NewKeyRange(startKey, endKey string) KeyRange { - return KeyRange { + return KeyRange{ StartKey: []byte(startKey), - EndKey: []byte(endKey), + EndKey: []byte(endKey), } -} \ No newline at end of file +} diff --git a/server/core/region.go b/server/core/region.go index fc411b8ece3c..4a217fb4cc56 100644 --- a/server/core/region.go +++ b/server/core/region.go @@ -17,9 +17,9 @@ import ( "bytes" "encoding/hex" "fmt" + "math/rand" "reflect" "strings" - "math/rand" "github.com/gogo/protobuf/proto" "github.com/pingcap/kvproto/pkg/metapb" @@ -758,7 +758,7 @@ func (r *RegionsInfo) RandPendingRegion(storeID uint64, ranges []KeyRange, opts // RandLeaderRegion randomly gets a store's leader region. func (r *RegionsInfo) RandLeaderRegion(storeID uint64, ranges []KeyRange, opts ...RegionOption) *RegionInfo { - return randRegion(r.leaders[storeID],ranges, opts...) + return randRegion(r.leaders[storeID], ranges, opts...) } // RandFollowerRegion randomly gets a store's follower region. @@ -830,8 +830,8 @@ type RegionsContainer interface { func randRegion(regions RegionsContainer, ranges []KeyRange, opts ...RegionOption) *RegionInfo { for i := 0; i < randomRegionMaxRetry; i++ { - idx:=rand.Intn(len(ranges)) - r:=ranges[idx] + idx := rand.Intn(len(ranges)) + r := ranges[idx] region := regions.RandomRegion(r.StartKey, r.EndKey) if region == nil { return nil diff --git a/server/core/region_test.go b/server/core/region_test.go index fd140a4808cd..634136a26b54 100644 --- a/server/core/region_test.go +++ b/server/core/region_test.go @@ -148,7 +148,7 @@ func BenchmarkRandomRegion(b *testing.B) { } b.ResetTimer() for i := 0; i < b.N; i++ { - regions.RandRegion([]KeyRange{NewKeyRange("","")}) + regions.RandRegion([]KeyRange{NewKeyRange("", "")}) } } diff --git a/server/namespace_test.go b/server/namespace_test.go index fa82cae00216..6618757d49bf 100644 --- a/server/namespace_test.go +++ b/server/namespace_test.go @@ -133,7 +133,7 @@ func (s *testNamespaceSuite) TestSchedulerBalanceRegion(c *C) { s.opt.SetMaxReplicas(1) oc := schedule.NewOperatorController(nil, nil) - sched, _ := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), nil) + sched, _ := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("balance-region", []string{"", ""})) // Balance is limited within a namespace. c.Assert(s.tc.addLeaderRegion(1, 2), IsNil) @@ -174,7 +174,7 @@ func (s *testNamespaceSuite) TestSchedulerBalanceLeader(c *C) { s.classifier.setStore(4, "ns2") oc := schedule.NewOperatorController(nil, nil) - sched, _ := schedule.CreateScheduler("balance-leader", oc, core.NewStorage(kv.NewMemoryKV()), nil) + sched, _ := schedule.CreateScheduler("balance-leader", oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("balance-leader", []string{"", ""})) // Balance is limited within a namespace. c.Assert(s.tc.addLeaderRegion(1, 2, 1), IsNil) diff --git a/server/schedule/range_cluster.go b/server/schedule/range_cluster.go index 7c9da81b263e..9f818d8e6a08 100644 --- a/server/schedule/range_cluster.go +++ b/server/schedule/range_cluster.go @@ -107,7 +107,7 @@ func (r *RangeCluster) RandFollowerRegion(storeID uint64, ranges []core.KeyRange } // RandLeaderRegion returns a random region that has leader on the store. -func (r *RangeCluster) RandLeaderRegion(storeID uint64, ranges []core.KeyRange, opts ...core.RegionOption) *core.RegionInfo { +func (r *RangeCluster) RandLeaderRegion(storeID uint64, ranges []core.KeyRange, opts ...core.RegionOption) *core.RegionInfo { return r.regions.RandLeaderRegion(storeID, ranges, opts...) } diff --git a/server/schedulers/adjacent_region.go b/server/schedulers/adjacent_region.go index ce046357cfd1..6f5654f5e6f9 100644 --- a/server/schedulers/adjacent_region.go +++ b/server/schedulers/adjacent_region.go @@ -60,7 +60,7 @@ func init() { } conf.LeaderLimit = defaultAdjacentLeaderLimit conf.PeerLimit = defaultAdjacentPeerLimit - conf.Name=balanceAdjacentRegionName + conf.Name = balanceAdjacentRegionName return nil } }) @@ -78,7 +78,7 @@ func init() { } type balanceAdjacentRegionConfig struct { - Name string `json:"name"` + Name string `json:"name"` LeaderLimit uint64 `json:"leader-limit"` PeerLimit uint64 `json:"peer-limit"` } diff --git a/server/schedulers/balance_leader.go b/server/schedulers/balance_leader.go index fdcbf15d7042..748bc0266a7f 100644 --- a/server/schedulers/balance_leader.go +++ b/server/schedulers/balance_leader.go @@ -24,9 +24,15 @@ import ( "github.com/pingcap/pd/server/schedule/operator" "github.com/pingcap/pd/server/schedule/opt" "github.com/pingcap/pd/server/schedule/selector" + "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus" "go.uber.org/zap" - "github.com/pkg/errors" +) + +const ( + balanceLeaderName = "balance-leader-scheduler" + // balanceLeaderRetryLimit is the limit to retry schedule for selected source store and target store. + balanceLeaderRetryLimit = 10 ) func init() { @@ -36,12 +42,12 @@ func init() { if !ok { return ErrScheduleConfigNotExist } - ranges, err := getKeyRanges(args) + ranges, err := getKeyRanges(args) if err != nil { return errors.WithStack(err) } conf.Ranges = ranges - conf.Name=balanceRegionName + conf.Name = balanceLeaderName return nil } }) @@ -54,16 +60,13 @@ func init() { } type balanceLeaderSchedulerConfig struct { - Name string `json:"name"` + Name string `json:"name"` Ranges []core.KeyRange `json:"ranges"` } -// balanceLeaderRetryLimit is the limit to retry schedule for selected source store and target store. -const balanceLeaderRetryLimit = 10 - type balanceLeaderScheduler struct { *baseScheduler - conf *balanceLeaderSchedulerConfig + conf *balanceLeaderSchedulerConfig selector *selector.BalanceSelector taintStores *cache.TTLUint64 opController *schedule.OperatorController @@ -78,7 +81,7 @@ func newBalanceLeaderScheduler(opController *schedule.OperatorController, conf * s := &balanceLeaderScheduler{ baseScheduler: base, - conf: conf, + conf: conf, taintStores: taintStores, opController: opController, counter: balanceLeaderCounter, @@ -113,6 +116,9 @@ func WithBalanceLeaderName(name string) BalanceLeaderCreateOption { } func (l *balanceLeaderScheduler) GetName() string { + if l.conf.Name == "" { + return balanceLeaderName + } return l.conf.Name } diff --git a/server/schedulers/balance_region.go b/server/schedulers/balance_region.go index 5c7de40d78f9..bec3e2f6143b 100644 --- a/server/schedulers/balance_region.go +++ b/server/schedulers/balance_region.go @@ -27,9 +27,9 @@ import ( "github.com/pingcap/pd/server/schedule/operator" "github.com/pingcap/pd/server/schedule/opt" "github.com/pingcap/pd/server/schedule/selector" + "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus" "go.uber.org/zap" - "github.com/pkg/errors" ) func init() { @@ -39,12 +39,12 @@ func init() { if !ok { return ErrScheduleConfigNotExist } - ranges, err := getKeyRanges(args) + ranges, err := getKeyRanges(args) if err != nil { return errors.WithStack(err) } conf.Ranges = ranges - conf.Name=balanceRegionName + conf.Name = balanceRegionName return nil } }) @@ -70,13 +70,13 @@ const ( ) type balanceRegionSchedulerConfig struct { - Name string `json:"name"` + Name string `json:"name"` Ranges []core.KeyRange `json:"ranges"` } type balanceRegionScheduler struct { *baseScheduler - conf *balanceRegionSchedulerConfig + conf *balanceRegionSchedulerConfig selector *selector.BalanceSelector opController *schedule.OperatorController hitsCounter *hitsStoreBuilder @@ -89,7 +89,7 @@ func newBalanceRegionScheduler(opController *schedule.OperatorController, conf * base := newBaseScheduler(opController) s := &balanceRegionScheduler{ baseScheduler: base, - conf: conf, + conf: conf, opController: opController, hitsCounter: newHitsStoreBuilder(hitsStoreTTL, hitsStoreCountThreshold), counter: balanceRegionCounter, @@ -123,6 +123,9 @@ func WithBalanceRegionName(name string) BalanceRegionCreateOption { } func (s *balanceRegionScheduler) GetName() string { + if s.conf.Name == "" { + return balanceRegionName + } return s.conf.Name } diff --git a/server/schedulers/balance_test.go b/server/schedulers/balance_test.go index 0c685ec98689..82c859da9bea 100644 --- a/server/schedulers/balance_test.go +++ b/server/schedulers/balance_test.go @@ -163,7 +163,7 @@ func (s *testBalanceLeaderSchedulerSuite) SetUpTest(c *C) { opt := mockoption.NewScheduleOptions() s.tc = mockcluster.NewCluster(opt) s.oc = schedule.NewOperatorController(nil, nil) - lb, err := schedule.CreateScheduler("balance-leader", s.oc, core.NewStorage(kv.NewMemoryKV()), nil) + lb, err := schedule.CreateScheduler("balance-leader", s.oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("balance-leader", []string{"", ""})) c.Assert(err, IsNil) s.lb = lb } @@ -421,7 +421,7 @@ func (s *testBalanceRegionSchedulerSuite) TestBalance(c *C) { tc := mockcluster.NewCluster(opt) oc := schedule.NewOperatorController(nil, nil) - sb, err := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), nil) + sb, err := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("balance-region", []string{"", ""})) c.Assert(err, IsNil) opt.SetMaxReplicas(1) @@ -456,7 +456,7 @@ func (s *testBalanceRegionSchedulerSuite) TestReplicas3(c *C) { newTestReplication(opt, 3, "zone", "rack", "host") - sb, err := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), nil) + sb, err := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("balance-region", []string{"", ""})) c.Assert(err, IsNil) // Store 1 has the largest region score, so the balancer try to replace peer in store 1. @@ -525,7 +525,7 @@ func (s *testBalanceRegionSchedulerSuite) TestReplicas5(c *C) { newTestReplication(opt, 5, "zone", "rack", "host") - sb, err := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), nil) + sb, err := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("balance-region", []string{"", ""})) c.Assert(err, IsNil) tc.AddLabelsStore(1, 4, map[string]string{"zone": "z1", "rack": "r1", "host": "h1"}) @@ -580,7 +580,7 @@ func (s *testBalanceRegionSchedulerSuite) TestBalance1(c *C) { opt.TolerantSizeRatio = 1 - sb, err := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), nil) + sb, err := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("balance-region", []string{"", ""})) c.Assert(err, IsNil) tc.AddRegionStore(1, 11) @@ -620,7 +620,7 @@ func (s *testBalanceRegionSchedulerSuite) TestStoreWeight(c *C) { tc := mockcluster.NewCluster(opt) oc := schedule.NewOperatorController(nil, nil) - sb, err := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), nil) + sb, err := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("balance-region", []string{"", ""})) c.Assert(err, IsNil) opt.SetMaxReplicas(1) @@ -647,7 +647,7 @@ func (s *testBalanceRegionSchedulerSuite) TestReplacePendingRegion(c *C) { newTestReplication(opt, 3, "zone", "rack", "host") - sb, err := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), nil) + sb, err := schedule.CreateScheduler("balance-region", oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("balance-region", []string{"", ""})) c.Assert(err, IsNil) // Store 1 has the largest region score, so the balancer try to replace peer in store 1. @@ -1004,7 +1004,7 @@ func (s *testRandomMergeSchedulerSuite) TestMerge(c *C) { hb := mockhbstream.NewHeartbeatStreams(tc.ID) oc := schedule.NewOperatorController(tc, hb) - mb, err := schedule.CreateScheduler("random-merge", oc, core.NewStorage(kv.NewMemoryKV()), nil) + mb, err := schedule.CreateScheduler("random-merge", oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("random-merge", []string{"", ""})) c.Assert(err, IsNil) tc.AddRegionStore(1, 4) diff --git a/server/schedulers/evict_leader.go b/server/schedulers/evict_leader.go index 8c2dd32350c1..00da1e50a99a 100644 --- a/server/schedulers/evict_leader.go +++ b/server/schedulers/evict_leader.go @@ -41,14 +41,14 @@ func init() { if err != nil { return errors.WithStack(err) } - ranges, err:=getKeyRanges(args[1:]) + ranges, err := getKeyRanges(args[1:]) if err != nil { - return errors.WithStack(err) + return errors.WithStack(err) } name := fmt.Sprintf("evict-leader-scheduler-%d", id) conf.StoreID = id conf.Name = name - conf.Ranges=ranges + conf.Ranges = ranges return nil } @@ -62,9 +62,9 @@ func init() { } type evictLeaderSchedulerConfig struct { - Name string `json:"name"` - StoreID uint64 `json:"store-id"` - Ranges []core.KeyRange `json:"ranges"` + Name string `json:"name"` + StoreID uint64 `json:"store-id"` + Ranges []core.KeyRange `json:"ranges"` } type evictLeaderScheduler struct { diff --git a/server/schedulers/grant_leader.go b/server/schedulers/grant_leader.go index 91a6e27e0a6e..721ea066c510 100644 --- a/server/schedulers/grant_leader.go +++ b/server/schedulers/grant_leader.go @@ -40,7 +40,7 @@ func init() { if err != nil { return errors.WithStack(err) } - ranges, err := getKeyRanges(args[1:]) + ranges, err := getKeyRanges(args[1:]) if err != nil { return errors.WithStack(err) } @@ -59,15 +59,15 @@ func init() { } type grandLeaderConfig struct { - Name string `json:"name"` - StoreID uint64 `json:"store-id"` + Name string `json:"name"` + StoreID uint64 `json:"store-id"` Ranges []core.KeyRange `json:"ranges"` } // grantLeaderScheduler transfers all leaders to peers in the store. type grantLeaderScheduler struct { *baseScheduler - conf *grandLeaderConfig + conf *grandLeaderConfig } // newGrantLeaderScheduler creates an admin scheduler that transfers all leaders diff --git a/server/schedulers/label.go b/server/schedulers/label.go index 5157a8f18a0c..1ccc2bdb3a64 100644 --- a/server/schedulers/label.go +++ b/server/schedulers/label.go @@ -21,8 +21,8 @@ import ( "github.com/pingcap/pd/server/schedule/operator" "github.com/pingcap/pd/server/schedule/opt" "github.com/pingcap/pd/server/schedule/selector" - "go.uber.org/zap" "github.com/pkg/errors" + "go.uber.org/zap" ) const labelSchedulerName = "label-scheduler" @@ -34,12 +34,12 @@ func init() { if !ok { return ErrScheduleConfigNotExist } - ranges, err := getKeyRanges(args) + ranges, err := getKeyRanges(args) if err != nil { return errors.WithStack(err) } conf.Ranges = ranges - conf.Name=labelSchedulerName + conf.Name = labelSchedulerName return nil } }) @@ -52,14 +52,13 @@ func init() { } type labelSchedulerConfig struct { - Name string `json:"name"` + Name string `json:"name"` Ranges []core.KeyRange `json:"ranges"` } - type labelScheduler struct { *baseScheduler - conf *labelSchedulerConfig + conf *labelSchedulerConfig selector *selector.BalanceSelector } @@ -73,7 +72,7 @@ func newLabelScheduler(opController *schedule.OperatorController, conf *labelSch kind := core.NewScheduleKind(core.LeaderKind, core.ByCount) return &labelScheduler{ baseScheduler: newBaseScheduler(opController), - conf: conf, + conf: conf, selector: selector.NewBalanceSelector(kind, filters), } } diff --git a/server/schedulers/random_merge.go b/server/schedulers/random_merge.go index ccfcc6bee088..7033d306d2cf 100644 --- a/server/schedulers/random_merge.go +++ b/server/schedulers/random_merge.go @@ -30,16 +30,16 @@ const randomMergeName = "random-merge-scheduler" func init() { schedule.RegisterSliceDecoderBuilder("random-merge", func(args []string) schedule.ConfigDecoder { return func(v interface{}) error { - conf, ok := v.(*shuffleLeaderSchedulerConfig) + conf, ok := v.(*randomMergeSchedulerConfig) if !ok { return ErrScheduleConfigNotExist } - ranges, err := getKeyRanges(args) + ranges, err := getKeyRanges(args) if err != nil { return errors.WithStack(err) } conf.Ranges = ranges - conf.Name=randomMergeName + conf.Name = randomMergeName return nil } }) @@ -51,13 +51,13 @@ func init() { } type randomMergeSchedulerConfig struct { - Name string `json:"name"` + Name string `json:"name"` Ranges []core.KeyRange `json:"ranges"` } type randomMergeScheduler struct { *baseScheduler - conf *randomMergeSchedulerConfig + conf *randomMergeSchedulerConfig selector *selector.RandomSelector } @@ -70,7 +70,7 @@ func newRandomMergeScheduler(opController *schedule.OperatorController, conf *ra base := newBaseScheduler(opController) return &randomMergeScheduler{ baseScheduler: base, - conf: conf, + conf: conf, selector: selector.NewRandomSelector(filters), } } diff --git a/server/schedulers/scatter_range.go b/server/schedulers/scatter_range.go index 43dc9b502259..166ebd9a41d2 100644 --- a/server/schedulers/scatter_range.go +++ b/server/schedulers/scatter_range.go @@ -29,7 +29,6 @@ import ( ) func init() { - // args: [start-key, end-key, range-name]. schedule.RegisterSliceDecoderBuilder("scatter-range", func(args []string) schedule.ConfigDecoder { return func(v interface{}) error { @@ -154,13 +153,13 @@ func newScatterRangeScheduler(opController *schedule.OperatorController, storage name: name, balanceLeader: newBalanceLeaderScheduler( opController, - []string{"", ""}, + &balanceLeaderSchedulerConfig{Ranges: []core.KeyRange{core.NewKeyRange("", "")}}, WithBalanceLeaderName("scatter-range-leader"), WithBalanceLeaderCounter(scatterRangeLeaderCounter), ), balanceRegion: newBalanceRegionScheduler( opController, - []string{"", ""}, + &balanceRegionSchedulerConfig{Ranges: []core.KeyRange{core.NewKeyRange("", "")}}, WithBalanceRegionName("scatter-range-region"), WithBalanceRegionCounter(scatterRangeRegionCounter), ), diff --git a/server/schedulers/scheduler_test.go b/server/schedulers/scheduler_test.go index 0f9515bdce0f..9279f789969a 100644 --- a/server/schedulers/scheduler_test.go +++ b/server/schedulers/scheduler_test.go @@ -37,7 +37,7 @@ func (s *testShuffleLeaderSuite) TestShuffle(c *C) { opt := mockoption.NewScheduleOptions() tc := mockcluster.NewCluster(opt) - sl, err := schedule.CreateScheduler("shuffle-leader", schedule.NewOperatorController(nil, nil), core.NewStorage(kv.NewMemoryKV()), nil) + sl, err := schedule.CreateScheduler("shuffle-leader", schedule.NewOperatorController(nil, nil), core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("shuffle-leader", []string{"", ""})) c.Assert(err, IsNil) c.Assert(sl.Schedule(tc), IsNil) @@ -276,7 +276,7 @@ func (s *testRejectLeaderSuite) TestRejectLeader(c *C) { // The label scheduler transfers leader out of store1. oc := schedule.NewOperatorController(nil, nil) - sl, err := schedule.CreateScheduler("label", oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigJSONDecoder(nil)) + sl, err := schedule.CreateScheduler("label", oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("label", []string{"", ""})) c.Assert(err, IsNil) op := sl.Schedule(tc) testutil.CheckTransferLeader(c, op[0], operator.OpLeader, 1, 3) @@ -288,7 +288,7 @@ func (s *testRejectLeaderSuite) TestRejectLeader(c *C) { // As store3 is disconnected, store1 rejects leader. Balancer will not create // any operators. - bs, err := schedule.CreateScheduler("balance-leader", oc, core.NewStorage(kv.NewMemoryKV()), nil) + bs, err := schedule.CreateScheduler("balance-leader", oc, core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("balance-leader", []string{"", ""})) c.Assert(err, IsNil) op = bs.Schedule(tc) c.Assert(op, IsNil) @@ -424,7 +424,7 @@ func (s *testShuffleRegionSuite) TestShuffle(c *C) { opt := mockoption.NewScheduleOptions() tc := mockcluster.NewCluster(opt) - sl, err := schedule.CreateScheduler("shuffle-region", schedule.NewOperatorController(nil, nil), core.NewStorage(kv.NewMemoryKV()), nil) + sl, err := schedule.CreateScheduler("shuffle-region", schedule.NewOperatorController(nil, nil), core.NewStorage(kv.NewMemoryKV()), schedule.ConfigSliceDecoder("shuffle-region", []string{"", ""})) c.Assert(err, IsNil) c.Assert(sl.IsScheduleAllowed(tc), IsTrue) c.Assert(sl.Schedule(tc), IsNil) diff --git a/server/schedulers/shuffle_hot_region.go b/server/schedulers/shuffle_hot_region.go index 4f3044bfce65..a2595ea1090f 100644 --- a/server/schedulers/shuffle_hot_region.go +++ b/server/schedulers/shuffle_hot_region.go @@ -28,7 +28,7 @@ import ( "go.uber.org/zap" ) -const shuffleHotRegionName= "shuffle-hot-region-scheduler" +const shuffleHotRegionName = "shuffle-hot-region-scheduler" func init() { schedule.RegisterSliceDecoderBuilder("shuffle-hot-region", func(args []string) schedule.ConfigDecoder { @@ -45,7 +45,7 @@ func init() { } conf.Limit = limit } - conf.Name=shuffleHotRegionName + conf.Name = shuffleHotRegionName return nil } }) @@ -58,7 +58,7 @@ func init() { } type shuffleHotRegionSchedulerConfig struct { - Name string `json:"name"` + Name string `json:"name"` Limit uint64 `json:"limit"` } diff --git a/server/schedulers/shuffle_leader.go b/server/schedulers/shuffle_leader.go index 548cef64b7d7..5fbef3a7651b 100644 --- a/server/schedulers/shuffle_leader.go +++ b/server/schedulers/shuffle_leader.go @@ -32,12 +32,12 @@ func init() { if !ok { return ErrScheduleConfigNotExist } - ranges, err := getKeyRanges(args) + ranges, err := getKeyRanges(args) if err != nil { return errors.WithStack(err) } conf.Ranges = ranges - conf.Name=shuffleLeaderName + conf.Name = shuffleLeaderName return nil } }) @@ -50,13 +50,13 @@ func init() { } type shuffleLeaderSchedulerConfig struct { - Name string `json:"name"` + Name string `json:"name"` Ranges []core.KeyRange `json:"ranges"` } type shuffleLeaderScheduler struct { *baseScheduler - conf *shuffleLeaderSchedulerConfig + conf *shuffleLeaderSchedulerConfig selector *selector.RandomSelector } @@ -69,7 +69,7 @@ func newShuffleLeaderScheduler(opController *schedule.OperatorController, conf * base := newBaseScheduler(opController) return &shuffleLeaderScheduler{ baseScheduler: base, - conf: conf, + conf: conf, selector: selector.NewRandomSelector(filters), } } diff --git a/server/schedulers/shuffle_region.go b/server/schedulers/shuffle_region.go index 9aa05275eb6f..b30a5d3e8e73 100644 --- a/server/schedulers/shuffle_region.go +++ b/server/schedulers/shuffle_region.go @@ -22,26 +22,25 @@ import ( "github.com/pingcap/pd/server/schedule/operator" "github.com/pingcap/pd/server/schedule/opt" "github.com/pingcap/pd/server/schedule/selector" - "go.uber.org/zap" "github.com/pkg/errors" + "go.uber.org/zap" ) const shuffleRegionName = "shuffle-region-scheduler" - func init() { schedule.RegisterSliceDecoderBuilder("shuffle-region", func(args []string) schedule.ConfigDecoder { return func(v interface{}) error { - conf, ok := v.(*balanceLeaderSchedulerConfig) + conf, ok := v.(*shuffleRegionSchedulerConfig) if !ok { return ErrScheduleConfigNotExist } - ranges, err := getKeyRanges(args) + ranges, err := getKeyRanges(args) if err != nil { return errors.WithStack(err) } conf.Ranges = ranges - conf.Name=shuffleRegionName + conf.Name = shuffleRegionName return nil } }) @@ -53,13 +52,13 @@ func init() { } type shuffleRegionSchedulerConfig struct { - Name string `json:"name"` + Name string `json:"name"` Ranges []core.KeyRange `json:"ranges"` } type shuffleRegionScheduler struct { *baseScheduler - conf *shuffleRegionSchedulerConfig + conf *shuffleRegionSchedulerConfig selector *selector.RandomSelector } diff --git a/server/schedulers/utils.go b/server/schedulers/utils.go index 637812f0b458..721105f27e47 100644 --- a/server/schedulers/utils.go +++ b/server/schedulers/utils.go @@ -163,11 +163,11 @@ func getKeyRanges(args []string) ([]core.KeyRange, error) { if err != nil { return nil, err } - args= args[2:] - ranges=append(ranges, core.NewKeyRange(startKey, endKey)) + args = args[2:] + ranges = append(ranges, core.NewKeyRange(startKey, endKey)) } - if len(ranges)==0 { + if len(ranges) == 0 { return []core.KeyRange{core.NewKeyRange(startKey, endKey)}, nil } - return ranges,nil + return ranges, nil }