@@ -1125,6 +1125,7 @@ func TestRegionLabelIsolationLevel(t *testing.T) {
11251125 opt .SetReplicationConfig (cfg )
11261126 re .NoError (err )
11271127 cluster := newTestRaftCluster (ctx , mockid .NewIDAllocator (), opt , storage .NewStorageWithMemoryBackend ())
1128+ cluster .coordinator = schedule .NewCoordinator (ctx , cluster , nil )
11281129
11291130 for i := uint64 (1 ); i <= 4 ; i ++ {
11301131 var labels []* metapb.StoreLabel
@@ -1159,13 +1160,42 @@ func TestRegionLabelIsolationLevel(t *testing.T) {
11591160 StartKey : []byte {byte (1 )},
11601161 EndKey : []byte {byte (2 )},
11611162 }
1162- r := core .NewRegionInfo (region , peers [0 ])
1163- re .NoError (cluster .putRegion (r ))
1163+ r1 := core .NewRegionInfo (region , peers [0 ])
1164+ re .NoError (cluster .putRegion (r1 ))
11641165
1165- cluster .UpdateRegionsLabelLevelStats ([]* core.RegionInfo {r })
1166+ cluster .UpdateRegionsLabelLevelStats ([]* core.RegionInfo {r1 })
11661167 counter := cluster .labelStats .GetLabelCounter ()
11671168 re .Equal (0 , counter ["none" ])
11681169 re .Equal (1 , counter ["zone" ])
1170+
1171+ region = & metapb.Region {
1172+ Id : 10 ,
1173+ Peers : peers ,
1174+ StartKey : []byte {byte (2 )},
1175+ EndKey : []byte {byte (3 )},
1176+ }
1177+ r2 := core .NewRegionInfo (region , peers [0 ])
1178+ re .NoError (cluster .putRegion (r2 ))
1179+
1180+ cluster .UpdateRegionsLabelLevelStats ([]* core.RegionInfo {r2 })
1181+ counter = cluster .labelStats .GetLabelCounter ()
1182+ re .Equal (0 , counter ["none" ])
1183+ re .Equal (2 , counter ["zone" ])
1184+
1185+ // issue: https://github.com/tikv/pd/issues/8700
1186+ // step1: heartbeat a overlap region, which is used to simulate the case that the region is merged.
1187+ // step2: update region 9 and region 10, which is used to simulate the case that patrol is triggered.
1188+ // We should only count region 9.
1189+ overlapRegion := r1 .Clone (
1190+ core .WithStartKey (r1 .GetStartKey ()),
1191+ core .WithEndKey (r2 .GetEndKey ()),
1192+ core .WithLeader (r2 .GetPeer (8 )),
1193+ )
1194+ re .NoError (cluster .HandleRegionHeartbeat (overlapRegion ))
1195+ cluster .UpdateRegionsLabelLevelStats ([]* core.RegionInfo {r1 , r2 })
1196+ counter = cluster .labelStats .GetLabelCounter ()
1197+ re .Equal (0 , counter ["none" ])
1198+ re .Equal (1 , counter ["zone" ])
11691199}
11701200
11711201func heartbeatRegions (re * require.Assertions , cluster * RaftCluster , regions []* core.RegionInfo ) {
0 commit comments