@@ -607,9 +607,14 @@ func TestRegionHasLearner(t *testing.T) {
607607 checkLeader (scatterer .ordinaryEngine .selectedLeader )
608608}
609609
610- // TestSelectedStores tests if the peer count has changed due to the picking strategy.
610+ // TestSelectedStoresTooFewPeers tests if the peer count has changed due to the picking strategy.
611611// Ref https://github.com/tikv/pd/issues/4565
612+ << << << < HEAD
612613func (s * testScatterRegionSuite ) TestSelectedStores (c * C ) {
614+ == == == =
615+ func TestSelectedStoresTooFewPeers (t * testing .T ) {
616+ re := require .New (t )
617+ >> >> >> > f5b5391c0 (region_scatterer : fix the bug that could generate schedule with too many peers (#5920 ))
613618 ctx , cancel := context .WithCancel (context .Background ())
614619 defer cancel ()
615620 opt := config .NewTestOptions ()
@@ -643,6 +648,43 @@ func (s *testScatterRegionSuite) TestSelectedStores(c *C) {
643648 }
644649}
645650
651+ // TestSelectedStoresTooManyPeers tests if the peer count has changed due to the picking strategy.
652+ // Ref https://github.com/tikv/pd/issues/5909
653+ func TestSelectedStoresTooManyPeers (t * testing.T ) {
654+ re := require .New (t )
655+ ctx , cancel := context .WithCancel (context .Background ())
656+ defer cancel ()
657+ opt := config .NewTestOptions ()
658+ tc := mockcluster .NewCluster (ctx , opt )
659+ stream := hbstream .NewTestHeartbeatStreams (ctx , tc .ID , tc , false )
660+ oc := NewOperatorController (ctx , tc , stream )
661+ // Add 4 stores.
662+ for i := uint64 (1 ); i <= 5 ; i ++ {
663+ tc .AddRegionStore (i , 0 )
664+ // prevent store from being disconnected
665+ tc .SetStoreLastHeartbeatInterval (i , - 10 * time .Minute )
666+ }
667+ group := "group"
668+ scatterer := NewRegionScatterer (ctx , tc , oc )
669+ // priority 4 > 1 > 5 > 2 == 3
670+ for i := 0 ; i < 1200 ; i ++ {
671+ scatterer .ordinaryEngine .selectedPeer .Put (2 , group )
672+ scatterer .ordinaryEngine .selectedPeer .Put (3 , group )
673+ }
674+ for i := 0 ; i < 800 ; i ++ {
675+ scatterer .ordinaryEngine .selectedPeer .Put (5 , group )
676+ }
677+ for i := 0 ; i < 400 ; i ++ {
678+ scatterer .ordinaryEngine .selectedPeer .Put (1 , group )
679+ }
680+ // test region with peer 1 2 3
681+ for i := uint64 (1 ); i < 20 ; i ++ {
682+ region := tc .AddLeaderRegion (i + 200 , i % 3 + 1 , (i + 1 )% 3 + 1 , (i + 2 )% 3 + 1 )
683+ op := scatterer .scatterRegion (region , group )
684+ re .False (isPeerCountChanged (op ))
685+ }
686+ }
687+
646688func isPeerCountChanged (op * operator.Operator ) bool {
647689 if op == nil {
648690 return false
0 commit comments