From e264a6143f6d8badde7783577c5fced5dcb2c39f Mon Sep 17 00:00:00 2001 From: Yongbo Jiang Date: Sun, 18 Feb 2024 15:00:00 +0800 Subject: [PATCH] cluster: don't collect region stats in API mode (#7817) close tikv/pd#7816 Signed-off-by: Cabinfever_B Co-authored-by: ti-chi-bot[bot] <108142056+ti-chi-bot[bot]@users.noreply.github.com> --- server/cluster/cluster.go | 7 ++++--- tests/server/api/region_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/server/cluster/cluster.go b/server/cluster/cluster.go index 075403b815ab..ccc1d7fc7b5d 100644 --- a/server/cluster/cluster.go +++ b/server/cluster/cluster.go @@ -1005,7 +1005,7 @@ func (c *RaftCluster) processRegionHeartbeat(region *core.RegionInfo) error { // Save to storage if meta is updated, except for flashback. // Save to cache if meta or leader is updated, or contains any down/pending peer. saveKV, saveCache, needSync := regionGuide(region, origin) - if !saveKV && !saveCache { + if !c.IsServiceIndependent(mcsutils.SchedulingServiceName) && !saveKV && !saveCache { // Due to some config changes need to update the region stats as well, // so we do some extra checks here. if hasRegionStats && c.regionStats.RegionStatsNeedUpdate(region) { @@ -1035,8 +1035,9 @@ func (c *RaftCluster) processRegionHeartbeat(region *core.RegionInfo) error { } regionUpdateCacheEventCounter.Inc() } - - cluster.Collect(c, region, c.GetRegionStores(region), hasRegionStats) + if !c.IsServiceIndependent(mcsutils.SchedulingServiceName) { + cluster.Collect(c, region, c.GetRegionStores(region), hasRegionStats) + } if c.storage != nil { // If there are concurrent heartbeats from the same region, the last write will win even if diff --git a/tests/server/api/region_test.go b/tests/server/api/region_test.go index 8c286dc12e2c..ccac726027c1 100644 --- a/tests/server/api/region_test.go +++ b/tests/server/api/region_test.go @@ -28,6 +28,7 @@ import ( "github.com/stretchr/testify/suite" "github.com/tikv/pd/pkg/core" "github.com/tikv/pd/pkg/schedule/placement" + "github.com/tikv/pd/pkg/statistics" tu "github.com/tikv/pd/pkg/utils/testutil" "github.com/tikv/pd/tests" ) @@ -172,6 +173,32 @@ func (suite *regionTestSuite) checkAccelerateRegionsScheduleInRange(cluster *tes re.Len(idList, 2, len(idList)) } +func (suite *regionTestSuite) TestRegionStats() { + env := tests.NewSchedulingTestEnvironment(suite.T()) + env.RunTestInAPIMode(suite.checkRegionStats) + env.Cleanup() +} + +func (suite *regionTestSuite) checkRegionStats(cluster *tests.TestCluster) { + re := suite.Require() + leader := cluster.GetLeaderServer() + rc := leader.GetRaftCluster() + re.NotNil(rc) + for i := 13; i <= 16; i++ { + s1 := &metapb.Store{ + Id: uint64(i), + State: metapb.StoreState_Up, + NodeState: metapb.NodeState_Serving, + } + tests.MustPutStore(re, cluster, s1) + } + r := core.NewTestRegionInfo(1001, 13, []byte("b1"), []byte("b2"), core.SetApproximateSize(0)) + r.GetMeta().Peers = append(r.GetMeta().Peers, &metapb.Peer{Id: 5, StoreId: 14}, &metapb.Peer{Id: 6, StoreId: 15}) + tests.MustPutRegionInfo(re, cluster, r) + suite.checkRegionCount(re, cluster, 1) + re.False(rc.GetRegionStats().IsRegionStatsType(1001, statistics.EmptyRegion)) +} + func (suite *regionTestSuite) TestAccelerateRegionsScheduleInRanges() { suite.env.RunTestInTwoModes(suite.checkAccelerateRegionsScheduleInRanges) }