From 17117228f8a96747766241d88f17138118b8aafe Mon Sep 17 00:00:00 2001 From: HunDunDM Date: Mon, 5 Jul 2021 20:43:56 +0800 Subject: [PATCH 1/2] scheduler: simplify the limit judgment of hot-region-scheduler Signed-off-by: HunDunDM --- server/schedulers/hot_region.go | 33 +-------------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/server/schedulers/hot_region.go b/server/schedulers/hot_region.go index e46f3018c72..cc6ef31ebcd 100644 --- a/server/schedulers/hot_region.go +++ b/server/schedulers/hot_region.go @@ -129,22 +129,6 @@ func (h *hotScheduler) GetNextInterval(interval time.Duration) time.Duration { } func (h *hotScheduler) IsScheduleAllowed(cluster opt.Cluster) bool { - return h.allowBalanceLeader(cluster) || h.allowBalanceRegion(cluster) -} - -func (h *hotScheduler) allowBalanceLeader(cluster opt.Cluster) bool { - hotRegionAllowed := h.OpController.OperatorCount(operator.OpHotRegion) < cluster.GetOpts().GetHotRegionScheduleLimit() - leaderAllowed := h.OpController.OperatorCount(operator.OpLeader) < cluster.GetOpts().GetLeaderScheduleLimit() - if !hotRegionAllowed { - operator.OperatorLimitCounter.WithLabelValues(h.GetType(), operator.OpHotRegion.String()).Inc() - } - if !leaderAllowed { - operator.OperatorLimitCounter.WithLabelValues(h.GetType(), operator.OpLeader.String()).Inc() - } - return hotRegionAllowed && leaderAllowed -} - -func (h *hotScheduler) allowBalanceRegion(cluster opt.Cluster) bool { allowed := h.OpController.OperatorCount(operator.OpHotRegion) < cluster.GetOpts().GetHotRegionScheduleLimit() if !allowed { operator.OperatorLimitCounter.WithLabelValues(h.GetType(), operator.OpHotRegion.String()).Inc() @@ -507,7 +491,7 @@ func (bs *balanceSolver) isValid() bool { // solve travels all the src stores, hot peers, dst stores and select each one of them to make a best scheduling solution. // The comparing between solutions is based on calcProgressiveRank. func (bs *balanceSolver) solve() []*operator.Operator { - if !bs.isValid() || !bs.allowBalance() { + if !bs.isValid() { return nil } bs.cur = &solution{} @@ -548,18 +532,6 @@ func (bs *balanceSolver) solve() []*operator.Operator { return []*operator.Operator{op} } -// allowBalance check whether the operator count have exceed the hot region limit by type -func (bs *balanceSolver) allowBalance() bool { - switch bs.opTy { - case movePeer: - return bs.sche.allowBalanceRegion(bs.cluster) - case transferLeader: - return bs.sche.allowBalanceLeader(bs.cluster) - default: - return false - } -} - // filterSrcStores compare the min rate and the ratio * expectation rate, if both key and byte rate is greater than // its expectation * ratio, the store would be selected as hot source store func (bs *balanceSolver) filterSrcStores() map[uint64]*storeLoadDetail { @@ -1012,9 +984,6 @@ func (bs *balanceSolver) buildOperator() (op *operator.Operator, infl *Influence dstPeer := &metapb.Peer{StoreId: bs.cur.dstStoreID, Role: srcPeer.Role} typ := "move-peer" if bs.rwTy == read && bs.cur.region.GetLeader().StoreId == bs.cur.srcStoreID { // move read leader - if !bs.sche.allowBalanceLeader(bs.cluster) { - return nil, nil - } op, err = operator.CreateMoveLeaderOperator( "move-hot-read-leader", bs.cluster, From 20690c371cb1656626adde3958d19282ace27779 Mon Sep 17 00:00:00 2001 From: HunDunDM Date: Mon, 5 Jul 2021 21:57:40 +0800 Subject: [PATCH 2/2] fix unit test Signed-off-by: HunDunDM --- server/schedulers/hot_region_test.go | 9 +++------ server/schedulers/scheduler_test.go | 4 ++-- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/server/schedulers/hot_region_test.go b/server/schedulers/hot_region_test.go index 891ad998d45..24448bc310f 100644 --- a/server/schedulers/hot_region_test.go +++ b/server/schedulers/hot_region_test.go @@ -230,12 +230,10 @@ func (s *testHotWriteRegionSchedulerSuite) checkByteRateOnly(c *C, tc *mockclust // hot region scheduler is restricted by `hot-region-schedule-limit`. tc.SetHotRegionScheduleLimit(0) - c.Assert(hb.Schedule(tc), HasLen, 0) + c.Assert(hb.IsScheduleAllowed(tc), IsFalse) hb.(*hotScheduler).clearPendingInfluence() tc.SetHotRegionScheduleLimit(int(config.NewTestOptions().GetScheduleConfig().HotRegionScheduleLimit)) - // hot region scheduler is restricted by schedule limit. - tc.SetLeaderScheduleLimit(0) for i := 0; i < 20; i++ { op := hb.Schedule(tc)[0] hb.(*hotScheduler).clearPendingInfluence() @@ -248,7 +246,6 @@ func (s *testHotWriteRegionSchedulerSuite) checkByteRateOnly(c *C, tc *mockclust testutil.CheckTransferPeerWithLeaderTransfer(c, op, operator.OpHotRegion, 1, 6) } } - tc.SetLeaderScheduleLimit(int(config.NewTestOptions().GetScheduleConfig().LeaderScheduleLimit)) // hot region scheduler is not affect by `balance-region-schedule-limit`. tc.SetRegionScheduleLimit(0) @@ -299,7 +296,7 @@ func (s *testHotWriteRegionSchedulerSuite) checkByteRateOnly(c *C, tc *mockclust // Region 1 and 2 are the same, cannot move peer to store 5 due to the label. // Region 3 can only move peer to store 5. // Region 5 can only move peer to store 6. - tc.SetLeaderScheduleLimit(0) + tc.SetHotRegionScheduleLimit(0) for i := 0; i < 30; i++ { op := hb.Schedule(tc)[0] hb.(*hotScheduler).clearPendingInfluence() @@ -532,7 +529,7 @@ func (s *testHotWriteRegionSchedulerSuite) TestWithPendingInfluence(c *C) { // 1: key rate tc := mockcluster.NewCluster(ctx, opt) tc.SetHotRegionCacheHitsThreshold(0) - tc.SetLeaderScheduleLimit(0) + tc.SetHotRegionScheduleLimit(0) tc.DisableFeature(versioninfo.JointConsensus) tc.AddRegionStore(1, 20) tc.AddRegionStore(2, 20) diff --git a/server/schedulers/scheduler_test.go b/server/schedulers/scheduler_test.go index 7d8e88e389d..9afae5a34d0 100644 --- a/server/schedulers/scheduler_test.go +++ b/server/schedulers/scheduler_test.go @@ -219,7 +219,7 @@ func (s *testHotRegionSchedulerSuite) TestAbnormalReplica(c *C) { defer cancel() opt := config.NewTestOptions() tc := mockcluster.NewCluster(ctx, opt) - tc.SetLeaderScheduleLimit(0) + tc.SetHotRegionScheduleLimit(0) hb, err := schedule.CreateScheduler(HotReadRegionType, schedule.NewOperatorController(ctx, nil, nil), core.NewStorage(kv.NewMemoryKV()), nil) c.Assert(err, IsNil) @@ -237,7 +237,7 @@ func (s *testHotRegionSchedulerSuite) TestAbnormalReplica(c *C) { tc.AddRegionWithReadInfo(3, 1, 512*KB*statistics.ReadReportInterval, 0, statistics.ReadReportInterval, []uint64{2, 3}) tc.SetHotRegionCacheHitsThreshold(0) c.Assert(tc.IsRegionHot(tc.GetRegion(1)), IsTrue) - c.Assert(hb.Schedule(tc), IsNil) + c.Assert(hb.IsScheduleAllowed(tc), IsFalse) } var _ = Suite(&testEvictLeaderSuite{})