@@ -83,23 +83,24 @@ private void deleteRegion(MasterServices services, RegionInfo ri) throws IOExcep
8383 services .getAssignmentManager ().getRegionStates ().deleteRegion (ri );
8484 }
8585
86- @ Test
87- public void testPlugsHoles () throws Exception {
88- TableName tn = TableName .valueOf (this .name .getMethodName ());
89- TEST_UTIL .createMultiRegionTable (tn , HConstants .CATALOG_FAMILY );
86+ private void testPlugsHolesWithReadReplicaInternal (final TableName tn , final int replicaCount )
87+ throws Exception {
88+ TEST_UTIL .createMultiRegionTable (tn , replicaCount , new byte [][] { HConstants .CATALOG_FAMILY });
9089 List <RegionInfo > ris = MetaTableAccessor .getTableRegions (TEST_UTIL .getConnection (), tn );
9190 MasterServices services = TEST_UTIL .getHBaseCluster ().getMaster ();
9291 int initialSize = services .getAssignmentManager ().getRegionStates ().getRegionStates ().size ();
9392 services .getCatalogJanitor ().scan ();
9493 CatalogJanitor .Report report = services .getCatalogJanitor ().getLastReport ();
9594 assertTrue (report .isEmpty ());
9695 int originalCount = ris .size ();
97- // Remove first, last and middle region. See if hole gets plugged. Table has 26 regions.
98- deleteRegion (services , ris .get (ris .size () -1 ));
99- deleteRegion (services , ris .get (3 ));
100- deleteRegion (services , ris .get (0 ));
101- assertEquals (initialSize - 3 ,
102- services .getAssignmentManager ().getRegionStates ().getRegionStates ().size ());
96+ // Remove first, last and middle region. See if hole gets plugged. Table has 26 * replicaCount regions.
97+ for (int i = 0 ; i < replicaCount ; i ++) {
98+ deleteRegion (services , ris .get (3 * replicaCount + i ));
99+ deleteRegion (services , ris .get (i ));
100+ deleteRegion (services , ris .get (ris .size () - 1 - i ));
101+ }
102+ assertEquals (initialSize - 3 * replicaCount ,
103+ services .getAssignmentManager ().getRegionStates ().getRegionStates ().size ());
103104 services .getCatalogJanitor ().scan ();
104105 report = services .getCatalogJanitor ().getLastReport ();
105106 assertEquals (report .toString (), 3 , report .getHoles ().size ());
@@ -109,17 +110,29 @@ public void testPlugsHoles() throws Exception {
109110 report = services .getCatalogJanitor ().getLastReport ();
110111 assertTrue (report .toString (), report .isEmpty ());
111112 assertEquals (initialSize ,
112- services .getAssignmentManager ().getRegionStates ().getRegionStates ().size ());
113+ services .getAssignmentManager ().getRegionStates ().getRegionStates ().size ());
113114
114115 // wait for RITs to settle -- those are the fixed regions being assigned -- or until the
115116 // watchdog TestRule terminates the test.
116117 HBaseTestingUtility .await (50 ,
117- () -> isNotEmpty ( services .getAssignmentManager ().getRegionsInTransition ()) );
118+ () -> services .getMasterProcedureExecutor ().getActiveProcIds (). size () == 0 );
118119
119120 ris = MetaTableAccessor .getTableRegions (TEST_UTIL .getConnection (), tn );
120121 assertEquals (originalCount , ris .size ());
121122 }
122123
124+ @ Test
125+ public void testPlugsHoles () throws Exception {
126+ TableName tn = TableName .valueOf (this .name .getMethodName ());
127+ testPlugsHolesWithReadReplicaInternal (tn , 1 );
128+ }
129+
130+ @ Test
131+ public void testPlugsHolesWithReadReplica () throws Exception {
132+ TableName tn = TableName .valueOf (this .name .getMethodName ());
133+ testPlugsHolesWithReadReplicaInternal (tn , 3 );
134+ }
135+
123136 /**
124137 * Just make sure running fixMeta does right thing for the case
125138 * of a single-region Table where the region gets dropped.
0 commit comments