From 8f5c9d630ce96e526f5ba15a5ae065a2b73a67be Mon Sep 17 00:00:00 2001 From: HunDunDM Date: Fri, 13 Aug 2021 21:02:43 +0800 Subject: [PATCH] scheduler: simplify the limit judgment of hot-region-scheduler (#3834) Signed-off-by: HunDunDM --- server/schedulers/hot_region.go | 30 +---------------------------- server/schedulers/hot_test.go | 9 +++------ server/schedulers/scheduler_test.go | 4 ++-- 3 files changed, 6 insertions(+), 37 deletions(-) diff --git a/server/schedulers/hot_region.go b/server/schedulers/hot_region.go index b35de504822..19ce6a53d43 100644 --- a/server/schedulers/hot_region.go +++ b/server/schedulers/hot_region.go @@ -158,22 +158,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() @@ -531,7 +515,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{} @@ -574,18 +558,6 @@ func (bs *balanceSolver) solve() []*operator.Operator { return ops } -// 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 { diff --git a/server/schedulers/hot_test.go b/server/schedulers/hot_test.go index 909cfce314d..337ff485c32 100644 --- a/server/schedulers/hot_test.go +++ b/server/schedulers/hot_test.go @@ -209,12 +209,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() @@ -227,7 +225,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) @@ -278,7 +275,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() @@ -478,7 +475,7 @@ func (s *testHotWriteRegionSchedulerSuite) TestWithPendingInfluence(c *C) { // 1: key rate tc := mockcluster.NewCluster(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 535951e9e56..a22a7c5772b 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(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.AddLeaderRegionWithReadInfo(3, 1, 512*KB*statistics.RegionHeartBeatReportInterval, 0, statistics.RegionHeartBeatReportInterval, []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{})