1717 */
1818package org .apache .hadoop .hbase .util ;
1919
20+ import java .io .IOException ;
2021import java .util .ArrayList ;
2122import java .util .List ;
2223import java .util .concurrent .TimeUnit ;
@@ -65,12 +66,12 @@ public class TestRegionMover2 {
6566 @ ClassRule
6667 public static final HBaseClassTestRule CLASS_RULE =
6768 HBaseClassTestRule .forClass (TestRegionMover2 .class );
69+ private static final String CF = "fam1" ;
6870
6971 @ Rule
7072 public TestName name = new TestName ();
7173
7274 private static final Logger LOG = LoggerFactory .getLogger (TestRegionMover2 .class );
73-
7475 private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility ();
7576
7677 @ BeforeClass
@@ -87,19 +88,54 @@ public static void tearDownAfterClass() throws Exception {
8788
8889 @ Before
8990 public void setUp () throws Exception {
91+ createTable (name .getMethodName ());
92+ }
93+
94+ @ After
95+ public void tearDown () throws Exception {
9096 final TableName tableName = TableName .valueOf (name .getMethodName ());
97+ TEST_UTIL .getAdmin ().disableTable (tableName );
98+ TEST_UTIL .getAdmin ().deleteTable (tableName );
99+ }
100+
101+ private TableName createTable (String name ) throws IOException {
102+ final TableName tableName = TableName .valueOf (name );
91103 TableDescriptor tableDesc = TableDescriptorBuilder .newBuilder (tableName )
92- .setColumnFamily (ColumnFamilyDescriptorBuilder .of ("fam1" )).build ();
104+ .setColumnFamily (ColumnFamilyDescriptorBuilder .of (CF )).build ();
93105 int startKey = 0 ;
94106 int endKey = 80000 ;
95107 TEST_UTIL .getAdmin ().createTable (tableDesc , Bytes .toBytes (startKey ), Bytes .toBytes (endKey ), 9 );
108+ return tableName ;
96109 }
97110
98- @ After
99- public void tearDown () throws Exception {
111+ @ Test
112+ public void testWithMergedRegions () throws Exception {
100113 final TableName tableName = TableName .valueOf (name .getMethodName ());
101- TEST_UTIL .getAdmin ().disableTable (tableName );
102- TEST_UTIL .getAdmin ().deleteTable (tableName );
114+ MiniHBaseCluster cluster = TEST_UTIL .getHBaseCluster ();
115+ Admin admin = TEST_UTIL .getAdmin ();
116+ Table table = TEST_UTIL .getConnection ().getTable (tableName );
117+ List <Put > puts = createPuts (10000 );
118+ table .put (puts );
119+ admin .flush (tableName );
120+ HRegionServer regionServer = cluster .getRegionServer (0 );
121+ String rsName = regionServer .getServerName ().getAddress ().toString ();
122+ int numRegions = regionServer .getNumberOfOnlineRegions ();
123+ List <HRegion > hRegions = regionServer .getRegions ().stream ()
124+ .filter (hRegion -> hRegion .getRegionInfo ().getTable ().equals (tableName ))
125+ .collect (Collectors .toList ());
126+ RegionMover .RegionMoverBuilder rmBuilder =
127+ new RegionMover .RegionMoverBuilder (rsName , TEST_UTIL .getConfiguration ()).ack (true )
128+ .maxthreads (8 );
129+ try (RegionMover rm = rmBuilder .build ()) {
130+ LOG .debug ("Unloading {}" , regionServer .getServerName ());
131+ rm .unload ();
132+ Assert .assertEquals (0 , regionServer .getNumberOfOnlineRegions ());
133+ LOG .debug ("Successfully Unloaded, now Loading" );
134+ admin .mergeRegionsAsync (new byte [][] { hRegions .get (0 ).getRegionInfo ().getRegionName (),
135+ hRegions .get (1 ).getRegionInfo ().getRegionName () }, true ).get (5 , TimeUnit .SECONDS );
136+ Assert .assertTrue (rm .load ());
137+ Assert .assertEquals (numRegions - 2 , regionServer .getNumberOfOnlineRegions ());
138+ }
103139 }
104140
105141 @ Test
@@ -108,11 +144,7 @@ public void testWithSplitRegions() throws Exception {
108144 MiniHBaseCluster cluster = TEST_UTIL .getHBaseCluster ();
109145 Admin admin = TEST_UTIL .getAdmin ();
110146 Table table = TEST_UTIL .getConnection ().getTable (tableName );
111- List <Put > puts = new ArrayList <>();
112- for (int i = 10 ; i < 50000 ; i ++) {
113- puts .add (new Put (Bytes .toBytes (i )).addColumn (Bytes .toBytes ("fam1" ), Bytes .toBytes ("q1" ),
114- Bytes .toBytes ("val_" + i )));
115- }
147+ List <Put > puts = createPuts (50000 );
116148 table .put (puts );
117149 admin .flush (tableName );
118150 admin .compact (tableName );
@@ -157,11 +189,7 @@ public void testFailedRegionMove() throws Exception {
157189 MiniHBaseCluster cluster = TEST_UTIL .getHBaseCluster ();
158190 Admin admin = TEST_UTIL .getAdmin ();
159191 Table table = TEST_UTIL .getConnection ().getTable (tableName );
160- List <Put > puts = new ArrayList <>();
161- for (int i = 0 ; i < 1000 ; i ++) {
162- puts .add (new Put (Bytes .toBytes ("rowkey_" + i )).addColumn (Bytes .toBytes ("fam1" ),
163- Bytes .toBytes ("q1" ), Bytes .toBytes ("val_" + i )));
164- }
192+ List <Put > puts = createPuts (1000 );
165193 table .put (puts );
166194 admin .flush (tableName );
167195 HRegionServer regionServer = cluster .getRegionServer (0 );
@@ -183,14 +211,30 @@ public void testFailedRegionMove() throws Exception {
183211 }
184212 }
185213
214+ @ Test
215+ public void testDeletedTable () throws Exception {
216+ TableName tableNameToDelete = createTable (name .getMethodName () + "ToDelete" );
217+ MiniHBaseCluster cluster = TEST_UTIL .getHBaseCluster ();
218+ HRegionServer regionServer = cluster .getRegionServer (0 );
219+ String rsName = regionServer .getServerName ().getAddress ().toString ();
220+ RegionMover .RegionMoverBuilder rmBuilder =
221+ new RegionMover .RegionMoverBuilder (rsName , TEST_UTIL .getConfiguration ()).ack (true )
222+ .maxthreads (8 );
223+ try (Admin admin = TEST_UTIL .getAdmin (); RegionMover rm = rmBuilder .build ()) {
224+ LOG .debug ("Unloading {}" , regionServer .getServerName ());
225+ rm .unload ();
226+ Assert .assertEquals (0 , regionServer .getNumberOfOnlineRegions ());
227+ LOG .debug ("Successfully Unloaded, now delete table" );
228+ admin .disableTable (tableNameToDelete );
229+ admin .deleteTable (tableNameToDelete );
230+ Assert .assertTrue (rm .load ());
231+ }
232+ }
233+
186234 public void loadDummyDataInTable (TableName tableName ) throws Exception {
187235 Admin admin = TEST_UTIL .getAdmin ();
188236 Table table = TEST_UTIL .getConnection ().getTable (tableName );
189- List <Put > puts = new ArrayList <>();
190- for (int i = 0 ; i < 1000 ; i ++) {
191- puts .add (new Put (Bytes .toBytes ("rowkey_" + i )).addColumn (Bytes .toBytes ("fam1" ),
192- Bytes .toBytes ("q1" ), Bytes .toBytes ("val_" + i )));
193- }
237+ List <Put > puts = createPuts (1000 );
194238 table .put (puts );
195239 admin .flush (tableName );
196240 }
@@ -263,6 +307,15 @@ public void testIsolateMetaAndRandomRegionOnTheRandomServer() throws Exception {
263307 regionIsolationOperation (randomSeverRegion , randomSeverRegion , 2 , true );
264308 }
265309
310+ private List <Put > createPuts (int count ) {
311+ List <Put > puts = new ArrayList <>();
312+ for (int i = 0 ; i < count ; i ++) {
313+ puts .add (new Put (Bytes .toBytes ("rowkey_" + i )).addColumn (Bytes .toBytes (CF ),
314+ Bytes .toBytes ("q1" ), Bytes .toBytes ("val_" + i )));
315+ }
316+ return puts ;
317+ }
318+
266319 public ServerName findMetaRSLocation () throws Exception {
267320 ZKWatcher zkWatcher = new ZKWatcher (TEST_UTIL .getConfiguration (), null , null );
268321 List <HRegionLocation > result = new ArrayList <>();
@@ -291,7 +344,7 @@ public ServerName findSourceServerName(TableName tableName) throws Exception {
291344 }
292345 if (sourceServer == null ) {
293346 throw new Exception (
294- "This shouln 't happen, No RS found with more than 2 regions of table : " + tableName );
347+ "This shouldn 't happen, No RS found with more than 2 regions of table : " + tableName );
295348 }
296349 return sourceServer ;
297350 }
@@ -338,7 +391,7 @@ public void regionIsolationOperation(ServerName sourceServerName,
338391 new RegionMover .RegionMoverBuilder (destinationRSName , TEST_UTIL .getConfiguration ()).ack (true )
339392 .maxthreads (8 ).isolateRegionIdArray (listOfRegionIDsToIsolate );
340393 try (RegionMover rm = rmBuilder .build ()) {
341- LOG .debug ("Unloading {} except regions : {}" , destinationRS .getServerName (),
394+ LOG .debug ("Unloading {} except regions: {}" , destinationRS .getServerName (),
342395 listOfRegionIDsToIsolate );
343396 rm .isolateRegions ();
344397 Assert .assertEquals (numRegionsToIsolate , destinationRS .getNumberOfOnlineRegions ());
@@ -347,8 +400,8 @@ public void regionIsolationOperation(ServerName sourceServerName,
347400 Assert .assertTrue (
348401 listOfRegionIDsToIsolate .contains (onlineRegions .get (i ).getRegionInfo ().getEncodedName ()));
349402 }
350- LOG .debug ("Successfully Isolated " + listOfRegionIDsToIsolate .size () + " regions : "
351- + listOfRegionIDsToIsolate + " on " + destinationRS .getServerName ());
403+ LOG .debug ("Successfully Isolated {} regions: {} on {}" , listOfRegionIDsToIsolate .size (),
404+ listOfRegionIDsToIsolate , destinationRS .getServerName ());
352405 } finally {
353406 admin .recommissionRegionServer (destinationRS .getServerName (), null );
354407 }
0 commit comments