Skip to content

Commit

Permalink
Merge branch 'master' into RunInTxn
Browse files Browse the repository at this point in the history
  • Loading branch information
AmoebaProtozoa authored Jan 10, 2023
2 parents 4a0c34a + ba81088 commit d60e299
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 1 deletion.
5 changes: 5 additions & 0 deletions server/api/scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,11 @@ func (h *schedulerHandler) CreateScheduler(w http.ResponseWriter, r *http.Reques
h.r.JSON(w, http.StatusInternalServerError, err.Error())
return
}
case schedulers.TransferWitnessLeaderName:
if err := h.AddTransferWitnessLeaderScheduler(); err != nil {
h.r.JSON(w, http.StatusInternalServerError, err.Error())
return
}
case schedulers.HotRegionName:
if err := h.AddBalanceHotRegionScheduler(); err != nil {
h.r.JSON(w, http.StatusInternalServerError, err.Error())
Expand Down
50 changes: 50 additions & 0 deletions server/api/scheduler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,56 @@ func (suite *scheduleTestSuite) TestAPI() {
{name: "balance-region-scheduler"},
{name: "shuffle-leader-scheduler"},
{name: "shuffle-region-scheduler"},
{name: "transfer-witness-leader-scheduler"},
{
name: "balance-witness-scheduler",
extraTestFunc: func(name string) {
resp := make(map[string]interface{})
listURL := fmt.Sprintf("%s%s%s/%s/list", suite.svr.GetAddr(), apiPrefix, server.SchedulerConfigHandlerPath, name)
suite.NoError(tu.ReadGetJSON(re, testDialClient, listURL, &resp))
suite.Equal(4.0, resp["batch"])
dataMap := make(map[string]interface{})
dataMap["batch"] = 3
updateURL := fmt.Sprintf("%s%s%s/%s/config", suite.svr.GetAddr(), apiPrefix, server.SchedulerConfigHandlerPath, name)
body, err := json.Marshal(dataMap)
suite.NoError(err)
suite.NoError(tu.CheckPostJSON(testDialClient, updateURL, body, tu.StatusOK(re)))
resp = make(map[string]interface{})
suite.NoError(tu.ReadGetJSON(re, testDialClient, listURL, &resp))
suite.Equal(3.0, resp["batch"])
// update again
err = tu.CheckPostJSON(testDialClient, updateURL, body,
tu.StatusOK(re),
tu.StringEqual(re, "\"no changed\"\n"))
suite.NoError(err)
// update invalidate batch
dataMap = map[string]interface{}{}
dataMap["batch"] = 100
body, err = json.Marshal(dataMap)
suite.NoError(err)
err = tu.CheckPostJSON(testDialClient, updateURL, body,
tu.Status(re, http.StatusBadRequest),
tu.StringEqual(re, "\"invalid batch size which should be an integer between 1 and 10\"\n"))
suite.NoError(err)
resp = make(map[string]interface{})
suite.NoError(tu.ReadGetJSON(re, testDialClient, listURL, &resp))
suite.Equal(3.0, resp["batch"])
// empty body
err = tu.CheckPostJSON(testDialClient, updateURL, nil,
tu.Status(re, http.StatusInternalServerError),
tu.StringEqual(re, "\"unexpected end of JSON input\"\n"))
suite.NoError(err)
// config item not found
dataMap = map[string]interface{}{}
dataMap["error"] = 3
body, err = json.Marshal(dataMap)
suite.NoError(err)
err = tu.CheckPostJSON(testDialClient, updateURL, body,
tu.Status(re, http.StatusBadRequest),
tu.StringEqual(re, "\"config item not found\"\n"))
suite.NoError(err)
},
},
{
name: "grant-leader-scheduler",
createdName: "grant-leader-scheduler",
Expand Down
2 changes: 1 addition & 1 deletion server/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -809,7 +809,7 @@ const (
defaultMaxStoreDownTime = 30 * time.Minute
defaultLeaderScheduleLimit = 4
defaultRegionScheduleLimit = 2048
defaultWitnessScheduleLimit = 2048
defaultWitnessScheduleLimit = 4
defaultReplicaScheduleLimit = 64
defaultMergeScheduleLimit = 8
defaultHotRegionScheduleLimit = 4
Expand Down
5 changes: 5 additions & 0 deletions server/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,11 @@ func (h *Handler) AddBalanceWitnessScheduler() error {
return h.AddScheduler(schedulers.BalanceWitnessType)
}

// AddTransferWitnessLeaderScheduler adds a transfer-witness-leader-scheduler.
func (h *Handler) AddTransferWitnessLeaderScheduler() error {
return h.AddScheduler(schedulers.TransferWitnessLeaderType)
}

// AddBalanceRegionScheduler adds a balance-region-scheduler.
func (h *Handler) AddBalanceRegionScheduler() error {
return h.AddScheduler(schedulers.BalanceRegionType)
Expand Down
22 changes: 22 additions & 0 deletions tools/pd-ctl/pdctl/command/scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,8 @@ func NewAddSchedulerCommand() *cobra.Command {
c.AddCommand(NewEvictSlowStoreSchedulerCommand())
c.AddCommand(NewGrantHotRegionSchedulerCommand())
c.AddCommand(NewSplitBucketSchedulerCommand())
c.AddCommand(NewBalanceWitnessSchedulerCommand())
c.AddCommand(NewTransferWitnessLeaderSchedulerCommand())
return c
}

Expand Down Expand Up @@ -352,6 +354,26 @@ func NewGrantHotRegionSchedulerCommand() *cobra.Command {
return c
}

// NewBalanceWitnessSchedulerCommand returns a command to add a balance-witness-scheduler.
func NewBalanceWitnessSchedulerCommand() *cobra.Command {
c := &cobra.Command{
Use: "balance-witness-scheduler",
Short: "add a scheduler to balance witness",
Run: addSchedulerCommandFunc,
}
return c
}

// NewTransferWitnessLeaderSchedulerCommand returns a command to add a transfer-witness-leader-shceudler.
func NewTransferWitnessLeaderSchedulerCommand() *cobra.Command {
c := &cobra.Command{
Use: "transfer-witness-leader-scheduler",
Short: "add a scheduler to transfer witness leader",
Run: addSchedulerCommandFunc,
}
return c
}

func addSchedulerForSplitBucketCommandFunc(cmd *cobra.Command, args []string) {
input := make(map[string]interface{})
input["name"] = cmd.Name()
Expand Down

0 comments on commit d60e299

Please sign in to comment.