Skip to content

Commit 4a9d7c0

Browse files
authored
config: add split-bucket to default schedulers (#5043)
close #5042 Signed-off-by: bufferflies <[email protected]>
1 parent 6dd8240 commit 4a9d7c0

File tree

6 files changed

+44
-19
lines changed

6 files changed

+44
-19
lines changed

server/cluster/coordinator_test.go

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -656,10 +656,11 @@ func (s *testCoordinatorSuite) TestAddScheduler(c *C) {
656656
tc, co, cleanup := prepare(nil, nil, func(co *coordinator) { co.run() }, c)
657657
defer cleanup()
658658

659-
c.Assert(co.schedulers, HasLen, 3)
659+
c.Assert(co.schedulers, HasLen, len(config.DefaultSchedulers))
660660
c.Assert(co.removeScheduler(schedulers.BalanceLeaderName), IsNil)
661661
c.Assert(co.removeScheduler(schedulers.BalanceRegionName), IsNil)
662662
c.Assert(co.removeScheduler(schedulers.HotRegionName), IsNil)
663+
c.Assert(co.removeScheduler(schedulers.SplitBucketName), IsNil)
663664
c.Assert(co.schedulers, HasLen, 0)
664665

665666
stream := mockhbstream.NewHeartbeatStream()
@@ -722,7 +723,7 @@ func (s *testCoordinatorSuite) TestPersistScheduler(c *C) {
722723
c.Assert(tc.addLeaderStore(1, 1), IsNil)
723724
c.Assert(tc.addLeaderStore(2, 1), IsNil)
724725

725-
c.Assert(co.schedulers, HasLen, 3)
726+
c.Assert(co.schedulers, HasLen, 4)
726727
oc := co.opController
727728
storage := tc.RaftCluster.storage
728729

@@ -732,13 +733,14 @@ func (s *testCoordinatorSuite) TestPersistScheduler(c *C) {
732733
evict, err := schedule.CreateScheduler(schedulers.EvictLeaderType, oc, storage, schedule.ConfigSliceDecoder(schedulers.EvictLeaderType, []string{"2"}))
733734
c.Assert(err, IsNil)
734735
c.Assert(co.addScheduler(evict, "2"), IsNil)
735-
c.Assert(co.schedulers, HasLen, 5)
736+
c.Assert(co.schedulers, HasLen, 6)
736737
sches, _, err := storage.LoadAllScheduleConfig()
737738
c.Assert(err, IsNil)
738-
c.Assert(sches, HasLen, 5)
739+
c.Assert(sches, HasLen, 6)
739740
c.Assert(co.removeScheduler(schedulers.BalanceLeaderName), IsNil)
740741
c.Assert(co.removeScheduler(schedulers.BalanceRegionName), IsNil)
741742
c.Assert(co.removeScheduler(schedulers.HotRegionName), IsNil)
743+
c.Assert(co.removeScheduler(schedulers.SplitBucketName), IsNil)
742744
c.Assert(co.schedulers, HasLen, 2)
743745
c.Assert(co.cluster.opt.Persist(storage), IsNil)
744746
co.stop()
@@ -754,15 +756,15 @@ func (s *testCoordinatorSuite) TestPersistScheduler(c *C) {
754756
defer func() {
755757
config.DefaultSchedulers = config.DefaultSchedulers[:len(config.DefaultSchedulers)-1]
756758
}()
757-
c.Assert(newOpt.GetSchedulers(), HasLen, 3)
759+
c.Assert(newOpt.GetSchedulers(), HasLen, 4)
758760
c.Assert(newOpt.Reload(storage), IsNil)
759761
// only remains 3 items with independent config.
760762
sches, _, err = storage.LoadAllScheduleConfig()
761763
c.Assert(err, IsNil)
762764
c.Assert(sches, HasLen, 3)
763765

764766
// option have 6 items because the default scheduler do not remove.
765-
c.Assert(newOpt.GetSchedulers(), HasLen, 6)
767+
c.Assert(newOpt.GetSchedulers(), HasLen, 7)
766768
c.Assert(newOpt.Persist(storage), IsNil)
767769
tc.RaftCluster.opt = newOpt
768770

@@ -789,10 +791,10 @@ func (s *testCoordinatorSuite) TestPersistScheduler(c *C) {
789791

790792
// the scheduler option should contain 6 items
791793
// the `hot scheduler` are disabled
792-
c.Assert(co.cluster.opt.GetSchedulers(), HasLen, 6)
794+
c.Assert(co.cluster.opt.GetSchedulers(), HasLen, 7)
793795
c.Assert(co.removeScheduler(schedulers.GrantLeaderName), IsNil)
794796
// the scheduler that is not enable by default will be completely deleted
795-
c.Assert(co.cluster.opt.GetSchedulers(), HasLen, 5)
797+
c.Assert(co.cluster.opt.GetSchedulers(), HasLen, 6)
796798
c.Assert(co.schedulers, HasLen, 4)
797799
c.Assert(co.cluster.opt.Persist(co.cluster.storage), IsNil)
798800
co.stop()
@@ -820,23 +822,24 @@ func (s *testCoordinatorSuite) TestRemoveScheduler(c *C) {
820822
c.Assert(tc.addLeaderStore(1, 1), IsNil)
821823
c.Assert(tc.addLeaderStore(2, 1), IsNil)
822824

823-
c.Assert(co.schedulers, HasLen, 3)
825+
c.Assert(co.schedulers, HasLen, 4)
824826
oc := co.opController
825827
storage := tc.RaftCluster.storage
826828

827829
gls1, err := schedule.CreateScheduler(schedulers.GrantLeaderType, oc, storage, schedule.ConfigSliceDecoder(schedulers.GrantLeaderType, []string{"1"}))
828830
c.Assert(err, IsNil)
829831
c.Assert(co.addScheduler(gls1, "1"), IsNil)
830-
c.Assert(co.schedulers, HasLen, 4)
832+
c.Assert(co.schedulers, HasLen, 5)
831833
sches, _, err := storage.LoadAllScheduleConfig()
832834
c.Assert(err, IsNil)
833-
c.Assert(sches, HasLen, 4)
835+
c.Assert(sches, HasLen, 5)
834836

835837
// remove all schedulers
836838
c.Assert(co.removeScheduler(schedulers.BalanceLeaderName), IsNil)
837839
c.Assert(co.removeScheduler(schedulers.BalanceRegionName), IsNil)
838840
c.Assert(co.removeScheduler(schedulers.HotRegionName), IsNil)
839841
c.Assert(co.removeScheduler(schedulers.GrantLeaderName), IsNil)
842+
c.Assert(co.removeScheduler(schedulers.SplitBucketName), IsNil)
840843
// all removed
841844
sches, _, err = storage.LoadAllScheduleConfig()
842845
c.Assert(err, IsNil)
@@ -855,7 +858,7 @@ func (s *testCoordinatorSuite) TestRemoveScheduler(c *C) {
855858
co.run()
856859
c.Assert(co.schedulers, HasLen, 0)
857860
// the option remains default scheduler
858-
c.Assert(co.cluster.opt.GetSchedulers(), HasLen, 3)
861+
c.Assert(co.cluster.opt.GetSchedulers(), HasLen, 4)
859862
co.stop()
860863
co.wg.Wait()
861864
}

server/config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,6 +1017,7 @@ var DefaultSchedulers = SchedulerConfigs{
10171017
{Type: "balance-region"},
10181018
{Type: "balance-leader"},
10191019
{Type: "hot-region"},
1020+
{Type: "split-bucket"},
10201021
}
10211022

10221023
// IsDefaultScheduler checks whether the scheduler is enable by default.

server/config/config_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func (s *testConfigSuite) TestReloadConfig(c *C) {
8383
c.Assert(err, IsNil)
8484
c.Assert(newOpt.Reload(storage), IsNil)
8585
schedulers := newOpt.GetSchedulers()
86-
c.Assert(schedulers, HasLen, 4)
86+
c.Assert(schedulers, HasLen, len(DefaultSchedulers))
8787
c.Assert(newOpt.IsUseRegionStorage(), IsTrue)
8888
for i, s := range schedulers {
8989
c.Assert(s.Type, Equals, DefaultSchedulers[i].Type)

server/config/store_config.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,10 @@ type Coprocessor struct {
5454
// split by RegionSplitSize.
5555
RegionMaxSize string `json:"region-max-size"`
5656
// RegionSplitSize is the split size of a region, region will according to this value to split.
57-
RegionSplitSize string `json:"region-split-size"`
58-
RegionMaxKeys int `json:"region-max-keys"`
59-
RegionSplitKeys int `json:"region-split-keys"`
57+
RegionSplitSize string `json:"region-split-size"`
58+
RegionMaxKeys int `json:"region-max-keys"`
59+
RegionSplitKeys int `json:"region-split-keys"`
60+
EnableRegionBucket bool `json:"enable-region-bucket"`
6061
}
6162

6263
// String implements fmt.Stringer interface.
@@ -68,6 +69,14 @@ func (c *StoreConfig) String() string {
6869
return string(data)
6970
}
7071

72+
// EnableRegionBucket return ture if the region bucket is enabled.
73+
func (c *StoreConfig) EnableRegionBucket() bool {
74+
if c == nil {
75+
return false
76+
}
77+
return c.Coprocessor.EnableRegionBucket
78+
}
79+
7180
// GetRegionMaxSize returns the max region size in MB
7281
func (c *StoreConfig) GetRegionMaxSize() uint64 {
7382
if c == nil || len(c.Coprocessor.RegionMaxSize) == 0 {

server/schedulers/split_bucket.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,10 @@ func (s *splitBucketScheduler) ServeHTTP(w http.ResponseWriter, r *http.Request)
168168
}
169169

170170
// IsScheduleAllowed return true if the sum of executing opSplit operator is less .
171-
func (s *splitBucketScheduler) IsScheduleAllowed(_ schedule.Cluster) bool {
171+
func (s *splitBucketScheduler) IsScheduleAllowed(cluster schedule.Cluster) bool {
172+
if !cluster.GetStoreConfig().EnableRegionBucket() {
173+
schedulerCounter.WithLabelValues(s.GetName(), "bucket-disable").Inc()
174+
}
172175
allowed := s.BaseScheduler.OpController.OperatorCount(operator.OpSplit) < s.conf.SplitLimit
173176
if !allowed {
174177
operator.OperatorLimitCounter.WithLabelValues(s.GetType(), operator.OpSplit.String()).Inc()

tests/pdctl/scheduler/scheduler_test.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
135135
"balance-region-scheduler": true,
136136
"balance-leader-scheduler": true,
137137
"balance-hot-region-scheduler": true,
138+
"split-bucket-scheduler": true,
138139
}
139140
checkSchedulerCommand(nil, expected)
140141

@@ -143,6 +144,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
143144
expected = map[string]bool{
144145
"balance-leader-scheduler": true,
145146
"balance-hot-region-scheduler": true,
147+
"split-bucket-scheduler": true,
146148
}
147149
checkSchedulerCommand(args, expected)
148150

@@ -154,6 +156,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
154156
expected = map[string]bool{
155157
"balance-leader-scheduler": true,
156158
"balance-hot-region-scheduler": true,
159+
"split-bucket-scheduler": true,
157160
schedulers[idx]: true,
158161
}
159162
checkSchedulerCommand(args, expected)
@@ -168,6 +171,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
168171
expected = map[string]bool{
169172
"balance-leader-scheduler": true,
170173
"balance-hot-region-scheduler": true,
174+
"split-bucket-scheduler": true,
171175
schedulers[idx]: true,
172176
}
173177
checkSchedulerCommand(args, expected)
@@ -181,6 +185,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
181185
expected = map[string]bool{
182186
"balance-leader-scheduler": true,
183187
"balance-hot-region-scheduler": true,
188+
"split-bucket-scheduler": true,
184189
}
185190
checkSchedulerCommand(args, expected)
186191

@@ -190,6 +195,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
190195
expected = map[string]bool{
191196
"balance-leader-scheduler": true,
192197
"balance-hot-region-scheduler": true,
198+
"split-bucket-scheduler": true,
193199
schedulers[idx]: true,
194200
}
195201
checkSchedulerCommand(args, expected)
@@ -199,6 +205,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
199205
expected = map[string]bool{
200206
"balance-leader-scheduler": true,
201207
"balance-hot-region-scheduler": true,
208+
"split-bucket-scheduler": true,
202209
schedulers[idx]: true,
203210
}
204211
checkSchedulerCommand(args, expected)
@@ -212,6 +219,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
212219
expected = map[string]bool{
213220
"balance-leader-scheduler": true,
214221
"balance-hot-region-scheduler": true,
222+
"split-bucket-scheduler": true,
215223
schedulers[idx]: true,
216224
}
217225
checkSchedulerCommand(args, expected)
@@ -225,6 +233,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
225233
expected = map[string]bool{
226234
"balance-leader-scheduler": true,
227235
"balance-hot-region-scheduler": true,
236+
"split-bucket-scheduler": true,
228237
}
229238
checkSchedulerCommand(args, expected)
230239
}
@@ -233,6 +242,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
233242
checkSchedulerCommand([]string{"-u", pdAddr, "scheduler", "add", "shuffle-region-scheduler"}, map[string]bool{
234243
"balance-leader-scheduler": true,
235244
"balance-hot-region-scheduler": true,
245+
"split-bucket-scheduler": true,
236246
"shuffle-region-scheduler": true,
237247
})
238248
var roles []string
@@ -248,6 +258,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
248258
checkSchedulerCommand([]string{"-u", pdAddr, "scheduler", "add", "grant-hot-region-scheduler", "1", "1,2,3"}, map[string]bool{
249259
"balance-leader-scheduler": true,
250260
"balance-hot-region-scheduler": true,
261+
"split-bucket-scheduler": true,
251262
"shuffle-region-scheduler": true,
252263
"grant-hot-region-scheduler": true,
253264
})
@@ -422,8 +433,6 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
422433
checkSchedulerWithStatusCommand(nil, "disabled", nil)
423434

424435
// test split bucket scheduler
425-
echo = mustExec([]string{"-u", pdAddr, "scheduler", "add", "split-bucket-scheduler"}, nil)
426-
c.Assert(strings.Contains(echo, "Success!"), IsTrue)
427436
echo = mustExec([]string{"-u", pdAddr, "scheduler", "config", "split-bucket-scheduler"}, nil)
428437
c.Assert(strings.Contains(echo, "\"degree\": 3"), IsTrue)
429438
echo = mustExec([]string{"-u", pdAddr, "scheduler", "config", "split-bucket-scheduler", "set", "degree", "10"}, nil)

0 commit comments

Comments
 (0)