Skip to content

Commit

Permalink
balance: avoid remove leader peer. (#672)
Browse files Browse the repository at this point in the history
  • Loading branch information
disksing committed Jul 4, 2017
1 parent ce8db87 commit 9e7cb96
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 15 deletions.
8 changes: 4 additions & 4 deletions server/balancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ func (s *balanceRegionScheduler) transferPeer(cluster *clusterInfo, region *Regi
}
s.limit = adjustBalanceLimit(cluster, s.GetResourceKind())

return newTransferPeer(region, oldPeer, newPeer)
return newTransferPeer(region, RegionKind, oldPeer, newPeer)
}

// replicaChecker ensures region has the best replicas.
Expand Down Expand Up @@ -372,7 +372,7 @@ func (r *replicaChecker) checkOfflinePeer(region *RegionInfo) Operator {
if newPeer == nil {
return nil
}
return newTransferPeer(region, peer, newPeer)
return newTransferPeer(region, RegionKind, peer, newPeer)
}

return nil
Expand All @@ -391,7 +391,7 @@ func (r *replicaChecker) checkBestReplacement(region *RegionInfo) Operator {
if newScore <= oldScore {
return nil
}
return newTransferPeer(region, oldPeer, newPeer)
return newTransferPeer(region, RegionKind, oldPeer, newPeer)
}

// RegionStat records each hot region's statistics
Expand Down Expand Up @@ -467,7 +467,7 @@ func (h *balanceHotRegionScheduler) Schedule(cluster *clusterInfo) Operator {
// balance by peer
srcRegion, srcPeer, destPeer := h.balanceByPeer(cluster)
if srcRegion != nil {
return newPriorityTransferPeer(srcRegion, srcPeer, destPeer)
return newTransferPeer(srcRegion, PriorityKind, srcPeer, destPeer)
}

// balance by leader
Expand Down
9 changes: 8 additions & 1 deletion server/balancer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -785,6 +785,13 @@ func checkTransferPeer(c *C, bop Operator, sourceID, targetID uint64) {
}
}

func checkTransferPeerWithLeaderTransfer(c *C, bop Operator, sourceID, targetID uint64) {
op := bop.(*regionOperator)
c.Assert(op, NotNil)
c.Assert(op.Ops, HasLen, 3)
checkTransferPeer(c, bop, sourceID, targetID)
}

func checkTransferLeader(c *C, bop Operator, sourceID, targetID uint64) {
var op *transferLeaderOperator
switch t := bop.(type) {
Expand Down Expand Up @@ -848,7 +855,7 @@ func (s *testBalanceHotRegionSchedulerSuite) TestBalance(c *C) {

// Will transfer a hot region from store 1 to store 5, because the total count of peers
// which is hot for store 1 is more larger than other stores.
checkTransferPeer(c, hb.Schedule(cluster), 1, 5)
checkTransferPeerWithLeaderTransfer(c, hb.Schedule(cluster), 1, 5)

// After transfer a hot region from store 1 to store 5
//| region_id | leader_sotre | follower_store | follower_store | written_bytes |
Expand Down
14 changes: 4 additions & 10 deletions server/scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ func (s *shuffleRegionScheduler) Schedule(cluster *clusterInfo) Operator {
return nil
}

return newTransferPeer(region, oldPeer, newPeer)
return newTransferPeer(region, RegionKind, oldPeer, newPeer)
}

func newAddPeer(region *RegionInfo, peer *metapb.Peer) Operator {
Expand All @@ -254,7 +254,7 @@ func newRemovePeer(region *RegionInfo, peer *metapb.Peer) Operator {
return newRegionOperator(region, RegionKind, removePeer)
}

func newTransferPeer(region *RegionInfo, oldPeer, newPeer *metapb.Peer) Operator {
func newTransferPeer(region *RegionInfo, kind ResourceKind, oldPeer, newPeer *metapb.Peer) Operator {
addPeer := newAddPeerOperator(region.GetId(), newPeer)
removePeer := newRemovePeerOperator(region.GetId(), oldPeer)
if region.Leader != nil && region.Leader.GetId() == oldPeer.GetId() {
Expand All @@ -263,15 +263,9 @@ func newTransferPeer(region *RegionInfo, oldPeer, newPeer *metapb.Peer) Operator
newLeader = follower
}
transferLeader := newTransferLeaderOperator(region.GetId(), region.Leader, newLeader)
return newRegionOperator(region, RegionKind, addPeer, transferLeader, removePeer)
return newRegionOperator(region, kind, addPeer, transferLeader, removePeer)
}
return newRegionOperator(region, RegionKind, addPeer, removePeer)
}

func newPriorityTransferPeer(region *RegionInfo, oldPeer, newPeer *metapb.Peer) Operator {
addPeer := newAddPeerOperator(region.GetId(), newPeer)
removePeer := newRemovePeerOperator(region.GetId(), oldPeer)
return newRegionOperator(region, PriorityKind, addPeer, removePeer)
return newRegionOperator(region, kind, addPeer, removePeer)
}

func newPriorityTransferLeader(region *RegionInfo, newLeader *metapb.Peer) Operator {
Expand Down

0 comments on commit 9e7cb96

Please sign in to comment.