Skip to content

Commit

Permalink
api: update evict-leader-scheduler&grant-leader-scheduler to return t…
Browse files Browse the repository at this point in the history
…he same success message (#7802)

ref #7672

Signed-off-by: husharp <jinhao.hu@pingcap.com>

Co-authored-by: ti-chi-bot[bot] <108142056+ti-chi-bot[bot]@users.noreply.github.com>
  • Loading branch information
HuSharp and ti-chi-bot[bot] committed Feb 5, 2024
1 parent 4975890 commit 12d75c7
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 24 deletions.
33 changes: 17 additions & 16 deletions server/api/scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,10 +142,23 @@ func (h *schedulerHandler) CreateScheduler(w http.ResponseWriter, r *http.Reques
return
}

case schedulers.GrantLeaderName:
h.addEvictOrGrant(w, input, schedulers.GrantLeaderName)
case schedulers.EvictLeaderName:
h.addEvictOrGrant(w, input, schedulers.EvictLeaderName)
case schedulers.GrantLeaderName, schedulers.EvictLeaderName:
storeID, ok := input["store_id"].(float64)
if !ok {
h.r.JSON(w, http.StatusBadRequest, "missing store id")
return
}
exist, err := h.AddEvictOrGrant(storeID, name)
if err != nil {
h.r.JSON(w, http.StatusInternalServerError, err.Error())
return
}
// we should ensure whether it is the first time to create evict-leader-scheduler
// or just update the evict-leader.
if exist {
h.r.JSON(w, http.StatusOK, "The scheduler has been applied to the store.")
return
}
case schedulers.ShuffleLeaderName:
if err := h.AddShuffleLeaderScheduler(); err != nil {
h.r.JSON(w, http.StatusInternalServerError, err.Error())
Expand Down Expand Up @@ -204,18 +217,6 @@ func (h *schedulerHandler) CreateScheduler(w http.ResponseWriter, r *http.Reques
h.r.JSON(w, http.StatusOK, "The scheduler is created.")
}

func (h *schedulerHandler) addEvictOrGrant(w http.ResponseWriter, input map[string]any, name string) {
storeID, ok := input["store_id"].(float64)
if !ok {
h.r.JSON(w, http.StatusBadRequest, "missing store id")
return
}
err := h.AddEvictOrGrant(storeID, name)
if err != nil {
h.r.JSON(w, http.StatusInternalServerError, err.Error())
}
}

// @Tags scheduler
// @Summary Delete a scheduler.
// @Param name path string true "The name of the scheduler."
Expand Down
13 changes: 7 additions & 6 deletions server/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -583,10 +583,10 @@ func (h *Handler) redirectSchedulerUpdate(name string, storeID float64) error {
}

// AddEvictOrGrant add evict leader scheduler or grant leader scheduler.
func (h *Handler) AddEvictOrGrant(storeID float64, name string) error {
if exist, err := h.IsSchedulerExisted(name); !exist {
func (h *Handler) AddEvictOrGrant(storeID float64, name string) (exist bool, err error) {
if exist, err = h.IsSchedulerExisted(name); !exist {
if err != nil && !errors.ErrorEqual(err, errs.ErrSchedulerNotFound.FastGenByArgs()) {
return err
return exist, err
}
switch name {
case schedulers.EvictLeaderName:
Expand All @@ -595,13 +595,14 @@ func (h *Handler) AddEvictOrGrant(storeID float64, name string) error {
err = h.AddGrantLeaderScheduler(uint64(storeID))
}
if err != nil {
return err
return exist, err
}
} else {
if err := h.redirectSchedulerUpdate(name, storeID); err != nil {
return err
return exist, err
}
log.Info("update scheduler", zap.String("scheduler-name", name), zap.Uint64("store-id", uint64(storeID)))
return exist, nil
}
return nil
return exist, nil
}
10 changes: 8 additions & 2 deletions tools/pd-ctl/tests/scheduler/scheduler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,10 @@ func (suite *schedulerTestSuite) TearDownTest() {
}

func (suite *schedulerTestSuite) TestScheduler() {
suite.env.RunTestInTwoModes(suite.checkScheduler)
// use a new environment to avoid affecting other tests
env := pdTests.NewSchedulingTestEnvironment(suite.T())
env.RunTestInTwoModes(suite.checkScheduler)
env.Cleanup()
}

func (suite *schedulerTestSuite) checkScheduler(cluster *pdTests.TestCluster) {
Expand Down Expand Up @@ -633,7 +636,10 @@ func (suite *schedulerTestSuite) checkScheduler(cluster *pdTests.TestCluster) {
}

func (suite *schedulerTestSuite) TestSchedulerDiagnostic() {
suite.env.RunTestInTwoModes(suite.checkSchedulerDiagnostic)
// use a new environment to avoid affecting other tests
env := pdTests.NewSchedulingTestEnvironment(suite.T())
env.RunTestInTwoModes(suite.checkSchedulerDiagnostic)
env.Cleanup()
}

func (suite *schedulerTestSuite) checkSchedulerDiagnostic(cluster *pdTests.TestCluster) {
Expand Down

0 comments on commit 12d75c7

Please sign in to comment.