diff --git a/pkg/schedule/schedulers/balance_key_range.go b/pkg/schedule/schedulers/balance_key_range.go index dea00f45e9e..aace3cc057b 100644 --- a/pkg/schedule/schedulers/balance_key_range.go +++ b/pkg/schedule/schedulers/balance_key_range.go @@ -5,9 +5,10 @@ import ( "time" "github.com/gorilla/mux" - "github.com/pingcap/log" "github.com/unrolled/render" + "github.com/pingcap/log" + "github.com/tikv/pd/pkg/core" "github.com/tikv/pd/pkg/core/constant" "github.com/tikv/pd/pkg/errs" @@ -19,6 +20,7 @@ import ( ) const ( + // DefaultTimeout is the default balance key range scheduler timeout. DefaultTimeout = 1 * time.Hour ) @@ -38,7 +40,7 @@ func newBalanceKeyRangeHandler(conf *balanceKeyRangeSchedulerConfig) http.Handle return router } -func (handler *balanceKeyRangeSchedulerHandler) updateConfig(w http.ResponseWriter, r *http.Request) { +func (handler *balanceKeyRangeSchedulerHandler) updateConfig(w http.ResponseWriter, _ *http.Request) { handler.rd.JSON(w, http.StatusBadRequest, "update config is not supported") } @@ -80,11 +82,24 @@ func (conf *balanceKeyRangeSchedulerConfig) clone() *balanceKeyRangeSchedulerPar } } +// EncodeConfig serializes the config. func (s *balanceKeyRangeScheduler) EncodeConfig() ([]byte, error) { return s.conf.encodeConfig() } +// ReloadConfig reloads the config. func (s *balanceKeyRangeScheduler) ReloadConfig() error { + s.conf.Lock() + defer s.conf.Unlock() + + newCfg := &balanceKeyRangeSchedulerConfig{} + if err := s.conf.load(newCfg); err != nil { + return err + } + s.conf.Ranges = newCfg.Ranges + s.conf.Timeout = newCfg.Timeout + s.conf.Role = newCfg.Role + s.conf.Engine = newCfg.Engine return nil } @@ -101,11 +116,13 @@ func (s *balanceKeyRangeScheduler) ServeHTTP(w http.ResponseWriter, r *http.Requ s.handler.ServeHTTP(w, r) } -func (s *balanceKeyRangeScheduler) Schedule(_cluster sche.SchedulerCluster, _dryRun bool) ([]*operator.Operator, []plan.Plan) { +// Schedule schedules the balance key range operator. +func (*balanceKeyRangeScheduler) Schedule(_cluster sche.SchedulerCluster, _dryRun bool) ([]*operator.Operator, []plan.Plan) { log.Debug("balance key range scheduler is scheduling, need to implement") return nil, nil } +// IsScheduleAllowed checks if the scheduler is allowed to schedule new operators. func (s *balanceKeyRangeScheduler) IsScheduleAllowed(cluster sche.SchedulerCluster) bool { allowed := s.OpController.OperatorCount(operator.OpKeyRange) < cluster.GetSchedulerConfig().GetRegionScheduleLimit() if !allowed { @@ -114,6 +131,7 @@ func (s *balanceKeyRangeScheduler) IsScheduleAllowed(cluster sche.SchedulerClust return allowed } +// BalanceKeyRangeCreateOption is used to create a scheduler with an option. type BalanceKeyRangeCreateOption func(s *balanceKeyRangeScheduler) // newBalanceKeyRangeScheduler creates a scheduler that tends to keep given peer role on diff --git a/pkg/schedule/schedulers/balance_key_range_test.go b/pkg/schedule/schedulers/balance_key_range_test.go deleted file mode 100644 index f0a402d108a..00000000000 --- a/pkg/schedule/schedulers/balance_key_range_test.go +++ /dev/null @@ -1,7 +0,0 @@ -package schedulers - -import "testing" - -func TestHttpApi(t *testing.T) { - -} diff --git a/pkg/schedule/schedulers/init.go b/pkg/schedule/schedulers/init.go index f9b296ee6d8..4734b162203 100644 --- a/pkg/schedule/schedulers/init.go +++ b/pkg/schedule/schedulers/init.go @@ -590,5 +590,4 @@ func schedulersRegister() { conf.init(sche.GetName(), storage, conf) return sche, nil }) - } diff --git a/server/cluster/cluster_test.go b/server/cluster/cluster_test.go index c62fb64fc80..1fdac79f539 100644 --- a/server/cluster/cluster_test.go +++ b/server/cluster/cluster_test.go @@ -3209,7 +3209,7 @@ func TestAddScheduler(t *testing.T) { re.NoError(err) re.NoError(controller.AddScheduler(gls)) - gls, err = schedulers.CreateScheduler(types.BalanceKeyRangeScheduler, oc, storage.NewStorageWithMemoryBackend(), schedulers.ConfigSliceDecoder(types.BalanceKeyRangeScheduler, []string{}), controller.RemoveScheduler) + _, err = schedulers.CreateScheduler(types.BalanceKeyRangeScheduler, oc, storage.NewStorageWithMemoryBackend(), schedulers.ConfigSliceDecoder(types.BalanceKeyRangeScheduler, []string{}), controller.RemoveScheduler) re.Error(err) gls, err = schedulers.CreateScheduler(types.BalanceKeyRangeScheduler, oc, storage.NewStorageWithMemoryBackend(), schedulers.ConfigSliceDecoder(types.BalanceKeyRangeScheduler, []string{"leaner", "tiflash", "100", "200"}), controller.RemoveScheduler) diff --git a/tools/pd-ctl/pdctl/command/scheduler.go b/tools/pd-ctl/pdctl/command/scheduler.go index 48e8d9ecf2d..9a5993dd8cf 100644 --- a/tools/pd-ctl/pdctl/command/scheduler.go +++ b/tools/pd-ctl/pdctl/command/scheduler.go @@ -375,6 +375,7 @@ func NewBalanceWitnessSchedulerCommand() *cobra.Command { return c } +// NewBalanceKeyRangeSchedulerCommand returns a command to add a balance-key-range-scheduler. func NewBalanceKeyRangeSchedulerCommand() *cobra.Command { c := &cobra.Command{ Use: "balance-key-range-scheduler [--format=raw|encode|hex] ", diff --git a/tools/pd-ctl/tests/scheduler/scheduler_test.go b/tools/pd-ctl/tests/scheduler/scheduler_test.go index 50237d8303c..e5575677cb6 100644 --- a/tools/pd-ctl/tests/scheduler/scheduler_test.go +++ b/tools/pd-ctl/tests/scheduler/scheduler_test.go @@ -551,7 +551,7 @@ func (suite *schedulerTestSuite) checkSchedulerConfig(cluster *pdTests.TestClust mustExec(re, cmd, []string{"-u", pdAddr, "scheduler", "config", "balance-key-range-scheduler", "show"}, &conf) re.Equal("learner", conf["role"]) re.Equal("tiflash", conf["engine"]) - ranges := conf["ranges"].([]interface{})[0].(map[string]interface{}) + ranges := conf["ranges"].([]any)[0].(map[string]any) re.Equal(base64.StdEncoding.EncodeToString([]byte("a")), ranges["start-key"]) re.Equal(base64.StdEncoding.EncodeToString([]byte("b")), ranges["end-key"])