Skip to content

Commit

Permalink
server: add shuffle-region-scheduler
Browse files Browse the repository at this point in the history
Add a scheduler to random add/remove region peers, for test.
  • Loading branch information
huachaohuang committed Feb 22, 2017
1 parent c306fe8 commit 92b3cef
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 0 deletions.
5 changes: 5 additions & 0 deletions server/api/scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,11 @@ func (h *schedulerHandler) Post(w http.ResponseWriter, r *http.Request) {
h.r.JSON(w, http.StatusInternalServerError, err.Error())
return
}
case "shuffle-region-scheduler":
if err := h.AddShuffleRegionScheduler(); err != nil {
h.r.JSON(w, http.StatusInternalServerError, err.Error())
return
}
}

h.r.JSON(w, http.StatusOK, nil)
Expand Down
5 changes: 5 additions & 0 deletions server/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,8 @@ func (h *Handler) AddEvictLeaderScheduler(storeID uint64) error {
func (h *Handler) AddShuffleLeaderScheduler() error {
return h.AddScheduler(newShuffleLeaderScheduler(h.opt))
}

// AddShuffleRegionScheduler adds a shuffle-region-scheduler.
func (h *Handler) AddShuffleRegionScheduler() error {
return h.AddScheduler(newShuffleRegionScheduler(h.opt))
}
47 changes: 47 additions & 0 deletions server/scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,53 @@ func (s *shuffleLeaderScheduler) Schedule(cluster *clusterInfo) Operator {
return newTransferLeader(region, region.GetStorePeer(storeID))
}

type shuffleRegionScheduler struct {
opt *scheduleOption
selector Selector
}

func newShuffleRegionScheduler(opt *scheduleOption) *shuffleRegionScheduler {
var filters []Filter
filters = append(filters, newStateFilter(opt))
filters = append(filters, newHealthFilter(opt))

return &shuffleRegionScheduler{
opt: opt,
selector: newRandomSelector(filters),
}
}

func (s *shuffleRegionScheduler) GetName() string {
return "shuffle-region-scheduler"
}

func (s *shuffleRegionScheduler) GetResourceKind() ResourceKind {
return regionKind
}

func (s *shuffleRegionScheduler) GetResourceLimit() uint64 {
return s.opt.GetRegionScheduleLimit()
}

func (s *shuffleRegionScheduler) Prepare(cluster *clusterInfo) error { return nil }

func (s *shuffleRegionScheduler) Cleanup(cluster *clusterInfo) {}

func (s *shuffleRegionScheduler) Schedule(cluster *clusterInfo) Operator {
region, oldPeer := scheduleRemovePeer(cluster, s.selector)
if region == nil {
return nil
}

excludedFilter := newExcludedFilter(nil, region.GetStoreIds())
newPeer := scheduleAddPeer(cluster, s.selector, excludedFilter)
if newPeer == nil {
return nil
}

return newTransferPeer(region, oldPeer, newPeer)
}

func newAddPeer(region *regionInfo, peer *metapb.Peer) Operator {
addPeer := newAddPeerOperator(region.GetId(), peer)
return newRegionOperator(region, addPeer)
Expand Down

0 comments on commit 92b3cef

Please sign in to comment.