Skip to content

Commit

Permalink
Merge branch 'master' into RawKV_GC_API_storage
Browse files Browse the repository at this point in the history
  • Loading branch information
ti-chi-bot committed May 26, 2022
2 parents 769a40b + 4a9d7c0 commit d8dd130
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 19 deletions.
27 changes: 15 additions & 12 deletions server/cluster/coordinator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -656,10 +656,11 @@ func (s *testCoordinatorSuite) TestAddScheduler(c *C) {
tc, co, cleanup := prepare(nil, nil, func(co *coordinator) { co.run() }, c)
defer cleanup()

c.Assert(co.schedulers, HasLen, 3)
c.Assert(co.schedulers, HasLen, len(config.DefaultSchedulers))
c.Assert(co.removeScheduler(schedulers.BalanceLeaderName), IsNil)
c.Assert(co.removeScheduler(schedulers.BalanceRegionName), IsNil)
c.Assert(co.removeScheduler(schedulers.HotRegionName), IsNil)
c.Assert(co.removeScheduler(schedulers.SplitBucketName), IsNil)
c.Assert(co.schedulers, HasLen, 0)

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

c.Assert(co.schedulers, HasLen, 3)
c.Assert(co.schedulers, HasLen, 4)
oc := co.opController
storage := tc.RaftCluster.storage

Expand All @@ -732,13 +733,14 @@ func (s *testCoordinatorSuite) TestPersistScheduler(c *C) {
evict, err := schedule.CreateScheduler(schedulers.EvictLeaderType, oc, storage, schedule.ConfigSliceDecoder(schedulers.EvictLeaderType, []string{"2"}))
c.Assert(err, IsNil)
c.Assert(co.addScheduler(evict, "2"), IsNil)
c.Assert(co.schedulers, HasLen, 5)
c.Assert(co.schedulers, HasLen, 6)
sches, _, err := storage.LoadAllScheduleConfig()
c.Assert(err, IsNil)
c.Assert(sches, HasLen, 5)
c.Assert(sches, HasLen, 6)
c.Assert(co.removeScheduler(schedulers.BalanceLeaderName), IsNil)
c.Assert(co.removeScheduler(schedulers.BalanceRegionName), IsNil)
c.Assert(co.removeScheduler(schedulers.HotRegionName), IsNil)
c.Assert(co.removeScheduler(schedulers.SplitBucketName), IsNil)
c.Assert(co.schedulers, HasLen, 2)
c.Assert(co.cluster.opt.Persist(storage), IsNil)
co.stop()
Expand All @@ -754,15 +756,15 @@ func (s *testCoordinatorSuite) TestPersistScheduler(c *C) {
defer func() {
config.DefaultSchedulers = config.DefaultSchedulers[:len(config.DefaultSchedulers)-1]
}()
c.Assert(newOpt.GetSchedulers(), HasLen, 3)
c.Assert(newOpt.GetSchedulers(), HasLen, 4)
c.Assert(newOpt.Reload(storage), IsNil)
// only remains 3 items with independent config.
sches, _, err = storage.LoadAllScheduleConfig()
c.Assert(err, IsNil)
c.Assert(sches, HasLen, 3)

// option have 6 items because the default scheduler do not remove.
c.Assert(newOpt.GetSchedulers(), HasLen, 6)
c.Assert(newOpt.GetSchedulers(), HasLen, 7)
c.Assert(newOpt.Persist(storage), IsNil)
tc.RaftCluster.opt = newOpt

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

// the scheduler option should contain 6 items
// the `hot scheduler` are disabled
c.Assert(co.cluster.opt.GetSchedulers(), HasLen, 6)
c.Assert(co.cluster.opt.GetSchedulers(), HasLen, 7)
c.Assert(co.removeScheduler(schedulers.GrantLeaderName), IsNil)
// the scheduler that is not enable by default will be completely deleted
c.Assert(co.cluster.opt.GetSchedulers(), HasLen, 5)
c.Assert(co.cluster.opt.GetSchedulers(), HasLen, 6)
c.Assert(co.schedulers, HasLen, 4)
c.Assert(co.cluster.opt.Persist(co.cluster.storage), IsNil)
co.stop()
Expand Down Expand Up @@ -820,23 +822,24 @@ func (s *testCoordinatorSuite) TestRemoveScheduler(c *C) {
c.Assert(tc.addLeaderStore(1, 1), IsNil)
c.Assert(tc.addLeaderStore(2, 1), IsNil)

c.Assert(co.schedulers, HasLen, 3)
c.Assert(co.schedulers, HasLen, 4)
oc := co.opController
storage := tc.RaftCluster.storage

gls1, err := schedule.CreateScheduler(schedulers.GrantLeaderType, oc, storage, schedule.ConfigSliceDecoder(schedulers.GrantLeaderType, []string{"1"}))
c.Assert(err, IsNil)
c.Assert(co.addScheduler(gls1, "1"), IsNil)
c.Assert(co.schedulers, HasLen, 4)
c.Assert(co.schedulers, HasLen, 5)
sches, _, err := storage.LoadAllScheduleConfig()
c.Assert(err, IsNil)
c.Assert(sches, HasLen, 4)
c.Assert(sches, HasLen, 5)

// remove all schedulers
c.Assert(co.removeScheduler(schedulers.BalanceLeaderName), IsNil)
c.Assert(co.removeScheduler(schedulers.BalanceRegionName), IsNil)
c.Assert(co.removeScheduler(schedulers.HotRegionName), IsNil)
c.Assert(co.removeScheduler(schedulers.GrantLeaderName), IsNil)
c.Assert(co.removeScheduler(schedulers.SplitBucketName), IsNil)
// all removed
sches, _, err = storage.LoadAllScheduleConfig()
c.Assert(err, IsNil)
Expand All @@ -855,7 +858,7 @@ func (s *testCoordinatorSuite) TestRemoveScheduler(c *C) {
co.run()
c.Assert(co.schedulers, HasLen, 0)
// the option remains default scheduler
c.Assert(co.cluster.opt.GetSchedulers(), HasLen, 3)
c.Assert(co.cluster.opt.GetSchedulers(), HasLen, 4)
co.stop()
co.wg.Wait()
}
Expand Down
1 change: 1 addition & 0 deletions server/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -1017,6 +1017,7 @@ var DefaultSchedulers = SchedulerConfigs{
{Type: "balance-region"},
{Type: "balance-leader"},
{Type: "hot-region"},
{Type: "split-bucket"},
}

// IsDefaultScheduler checks whether the scheduler is enable by default.
Expand Down
2 changes: 1 addition & 1 deletion server/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ func (s *testConfigSuite) TestReloadConfig(c *C) {
c.Assert(err, IsNil)
c.Assert(newOpt.Reload(storage), IsNil)
schedulers := newOpt.GetSchedulers()
c.Assert(schedulers, HasLen, 4)
c.Assert(schedulers, HasLen, len(DefaultSchedulers))
c.Assert(newOpt.IsUseRegionStorage(), IsTrue)
for i, s := range schedulers {
c.Assert(s.Type, Equals, DefaultSchedulers[i].Type)
Expand Down
15 changes: 12 additions & 3 deletions server/config/store_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,10 @@ type Coprocessor struct {
// split by RegionSplitSize.
RegionMaxSize string `json:"region-max-size"`
// RegionSplitSize is the split size of a region, region will according to this value to split.
RegionSplitSize string `json:"region-split-size"`
RegionMaxKeys int `json:"region-max-keys"`
RegionSplitKeys int `json:"region-split-keys"`
RegionSplitSize string `json:"region-split-size"`
RegionMaxKeys int `json:"region-max-keys"`
RegionSplitKeys int `json:"region-split-keys"`
EnableRegionBucket bool `json:"enable-region-bucket"`
}

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

// EnableRegionBucket return ture if the region bucket is enabled.
func (c *StoreConfig) EnableRegionBucket() bool {
if c == nil {
return false
}
return c.Coprocessor.EnableRegionBucket
}

// GetRegionMaxSize returns the max region size in MB
func (c *StoreConfig) GetRegionMaxSize() uint64 {
if c == nil || len(c.Coprocessor.RegionMaxSize) == 0 {
Expand Down
5 changes: 4 additions & 1 deletion server/schedulers/split_bucket.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,10 @@ func (s *splitBucketScheduler) ServeHTTP(w http.ResponseWriter, r *http.Request)
}

// IsScheduleAllowed return true if the sum of executing opSplit operator is less .
func (s *splitBucketScheduler) IsScheduleAllowed(_ schedule.Cluster) bool {
func (s *splitBucketScheduler) IsScheduleAllowed(cluster schedule.Cluster) bool {
if !cluster.GetStoreConfig().EnableRegionBucket() {
schedulerCounter.WithLabelValues(s.GetName(), "bucket-disable").Inc()
}
allowed := s.BaseScheduler.OpController.OperatorCount(operator.OpSplit) < s.conf.SplitLimit
if !allowed {
operator.OperatorLimitCounter.WithLabelValues(s.GetType(), operator.OpSplit.String()).Inc()
Expand Down
13 changes: 11 additions & 2 deletions tests/pdctl/scheduler/scheduler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
"balance-region-scheduler": true,
"balance-leader-scheduler": true,
"balance-hot-region-scheduler": true,
"split-bucket-scheduler": true,
}
checkSchedulerCommand(nil, expected)

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

Expand All @@ -154,6 +156,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
expected = map[string]bool{
"balance-leader-scheduler": true,
"balance-hot-region-scheduler": true,
"split-bucket-scheduler": true,
schedulers[idx]: true,
}
checkSchedulerCommand(args, expected)
Expand All @@ -168,6 +171,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
expected = map[string]bool{
"balance-leader-scheduler": true,
"balance-hot-region-scheduler": true,
"split-bucket-scheduler": true,
schedulers[idx]: true,
}
checkSchedulerCommand(args, expected)
Expand All @@ -181,6 +185,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
expected = map[string]bool{
"balance-leader-scheduler": true,
"balance-hot-region-scheduler": true,
"split-bucket-scheduler": true,
}
checkSchedulerCommand(args, expected)

Expand All @@ -190,6 +195,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
expected = map[string]bool{
"balance-leader-scheduler": true,
"balance-hot-region-scheduler": true,
"split-bucket-scheduler": true,
schedulers[idx]: true,
}
checkSchedulerCommand(args, expected)
Expand All @@ -199,6 +205,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
expected = map[string]bool{
"balance-leader-scheduler": true,
"balance-hot-region-scheduler": true,
"split-bucket-scheduler": true,
schedulers[idx]: true,
}
checkSchedulerCommand(args, expected)
Expand All @@ -212,6 +219,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
expected = map[string]bool{
"balance-leader-scheduler": true,
"balance-hot-region-scheduler": true,
"split-bucket-scheduler": true,
schedulers[idx]: true,
}
checkSchedulerCommand(args, expected)
Expand All @@ -225,6 +233,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
expected = map[string]bool{
"balance-leader-scheduler": true,
"balance-hot-region-scheduler": true,
"split-bucket-scheduler": true,
}
checkSchedulerCommand(args, expected)
}
Expand All @@ -233,6 +242,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
checkSchedulerCommand([]string{"-u", pdAddr, "scheduler", "add", "shuffle-region-scheduler"}, map[string]bool{
"balance-leader-scheduler": true,
"balance-hot-region-scheduler": true,
"split-bucket-scheduler": true,
"shuffle-region-scheduler": true,
})
var roles []string
Expand All @@ -248,6 +258,7 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
checkSchedulerCommand([]string{"-u", pdAddr, "scheduler", "add", "grant-hot-region-scheduler", "1", "1,2,3"}, map[string]bool{
"balance-leader-scheduler": true,
"balance-hot-region-scheduler": true,
"split-bucket-scheduler": true,
"shuffle-region-scheduler": true,
"grant-hot-region-scheduler": true,
})
Expand Down Expand Up @@ -422,8 +433,6 @@ func (s *schedulerTestSuite) TestScheduler(c *C) {
checkSchedulerWithStatusCommand(nil, "disabled", nil)

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

0 comments on commit d8dd130

Please sign in to comment.