Skip to content

Commit f204416

Browse files
authored
statistic: fix offline stats statistic after merge offline peer (#3614)
* fix offline Signed-off-by: lhy1024 <admin@liudos.us> * fix lint Signed-off-by: lhy1024 <admin@liudos.us>
1 parent 30b430f commit f204416

File tree

3 files changed

+69
-1
lines changed

3 files changed

+69
-1
lines changed

server/cluster/cluster_test.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
"github.com/tikv/pd/server/kv"
3535
"github.com/tikv/pd/server/schedule/opt"
3636
"github.com/tikv/pd/server/schedule/placement"
37+
"github.com/tikv/pd/server/statistics"
3738
"github.com/tikv/pd/server/versioninfo"
3839
)
3940

@@ -651,6 +652,68 @@ func (s *testClusterInfoSuite) TestRegionSplitAndMerge(c *C) {
651652
}
652653
}
653654

655+
func (s *testClusterInfoSuite) TestOfflineAndMerge(c *C) {
656+
_, opt, err := newTestScheduleConfig()
657+
c.Assert(err, IsNil)
658+
cluster := newTestRaftCluster(mockid.NewIDAllocator(), opt, core.NewStorage(kv.NewMemoryKV()), core.NewBasicCluster())
659+
660+
storage := core.NewStorage(kv.NewMemoryKV())
661+
cluster.ruleManager = placement.NewRuleManager(storage, cluster)
662+
if opt.IsPlacementRulesEnabled() {
663+
err := cluster.ruleManager.Initialize(opt.GetMaxReplicas(), opt.GetLocationLabels())
664+
if err != nil {
665+
panic(err)
666+
}
667+
}
668+
cluster.regionStats = statistics.NewRegionStatistics(cluster.GetOpts(), cluster.ruleManager)
669+
670+
// Put 3 stores.
671+
for _, store := range newTestStores(4, "5.0.0") {
672+
c.Assert(cluster.PutStore(store.GetMeta()), IsNil)
673+
}
674+
675+
peers := []*metapb.Peer{
676+
{
677+
Id: 4,
678+
StoreId: 1,
679+
}, {
680+
Id: 5,
681+
StoreId: 2,
682+
}, {
683+
Id: 6,
684+
StoreId: 3,
685+
},
686+
}
687+
origin := core.NewRegionInfo(
688+
&metapb.Region{
689+
StartKey: []byte{},
690+
EndKey: []byte{},
691+
RegionEpoch: &metapb.RegionEpoch{ConfVer: 2, Version: 2},
692+
Id: 1,
693+
Peers: peers}, peers[0])
694+
regions := []*core.RegionInfo{origin}
695+
696+
// store 1: up -> offline
697+
c.Assert(cluster.RemoveStore(1, false), IsNil)
698+
store := cluster.GetStore(1)
699+
c.Assert(store.IsOffline(), IsTrue)
700+
701+
// Split.
702+
n := 7
703+
for i := 0; i < n; i++ {
704+
regions = core.SplitRegions(regions)
705+
}
706+
heartbeatRegions(c, cluster, regions)
707+
c.Assert(cluster.GetOfflineRegionStatsByType(statistics.OfflinePeer), HasLen, len(regions))
708+
709+
// Merge.
710+
for i := 0; i < n; i++ {
711+
regions = core.MergeRegions(regions)
712+
heartbeatRegions(c, cluster, regions)
713+
c.Assert(cluster.GetOfflineRegionStatsByType(statistics.OfflinePeer), HasLen, len(regions))
714+
}
715+
}
716+
654717
func (s *testClusterInfoSuite) TestUpdateStorePendingPeerCount(c *C) {
655718
_, opt, err := newTestScheduleConfig()
656719
c.Assert(err, IsNil)

server/core/test_util.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,18 @@ func MergeRegions(regions []*RegionInfo) []*RegionInfo {
5555
right = regions[i+1]
5656
}
5757
region := &RegionInfo{meta: &metapb.Region{
58-
Id: left.GetID() + uint64(len(regions)),
58+
Id: left.GetID(),
5959
StartKey: left.GetStartKey(),
6060
EndKey: right.GetEndKey(),
61+
Peers: left.meta.Peers,
6162
}}
6263
if left.GetRegionEpoch().GetVersion() > right.GetRegionEpoch().GetVersion() {
6364
region.meta.RegionEpoch = left.GetRegionEpoch()
6465
} else {
6566
region.meta.RegionEpoch = right.GetRegionEpoch()
6667
}
6768
region.meta.RegionEpoch.Version++
69+
region.leader = left.leader
6870
results = append(results, region)
6971
}
7072
return results

server/statistics/region_collection.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,9 @@ func (r *RegionStatistics) ClearDefunctRegion(regionID uint64) {
218218
if oldIndex, ok := r.index[regionID]; ok {
219219
r.deleteEntry(oldIndex, regionID)
220220
}
221+
if oldIndex, ok := r.offlineIndex[regionID]; ok {
222+
r.deleteOfflineEntry(oldIndex, regionID)
223+
}
221224
}
222225

223226
// Collect collects the metrics of the regions' status.

0 commit comments

Comments
 (0)