Repository: hbase
Updated Branches:
  refs/heads/branch-1 d038b762a -> 6dbc8ebec
  refs/heads/branch-1.3 be2252d08 -> 07b8f79f7
  refs/heads/master a27504c70 -> d34f5d4b9


HBASE-15864 Reuse the testing helper to wait regions in transition


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/7a84ee26
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/7a84ee26
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/7a84ee26

Branch: refs/heads/master
Commit: 7a84ee262f5a0630009d3a9f9157e64aa1e910f2
Parents: a27504c
Author: Matteo Bertozzi <matteo.berto...@cloudera.com>
Authored: Fri May 20 06:18:34 2016 -0700
Committer: Matteo Bertozzi <matteo.berto...@cloudera.com>
Committed: Fri May 20 06:48:38 2016 -0700

----------------------------------------------------------------------
 .../hadoop/hbase/HBaseTestingUtility.java       | 13 ++++++--
 .../hadoop/hbase/TestRegionRebalancing.java     | 21 ++++++-------
 .../org/apache/hadoop/hbase/client/TestHCM.java | 18 +++--------
 .../hbase/coprocessor/TestMasterObserver.java   | 21 ++-----------
 .../hbase/mapreduce/TestHFileOutputFormat2.java |  7 ++---
 .../handler/TestTableDeleteFamilyHandler.java   | 13 ++------
 .../TestSplitTransactionOnCluster.java          | 33 +++-----------------
 .../hadoop/hbase/util/TestHBaseFsckOneRS.java   |  3 +-
 .../util/hbck/TestOfflineMetaRebuildHole.java   |  9 ------
 .../hbck/TestOfflineMetaRebuildOverlap.java     |  8 -----
 10 files changed, 37 insertions(+), 109 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/7a84ee26/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java
index 501075a..59b5bb3 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java
@@ -3887,14 +3887,21 @@ public class HBaseTestingUtility extends 
HBaseCommonTestingUtility {
   /**
    * Wait until no regions in transition.
    * @param timeout How long to wait.
-   * @throws Exception
+   * @throws IOException
    */
-  public void waitUntilNoRegionsInTransition(
-      final long timeout) throws Exception {
+  public void waitUntilNoRegionsInTransition(final long timeout) throws 
IOException {
     waitFor(timeout, predicateNoRegionsInTransition());
   }
 
   /**
+   * Wait until no regions in transition. (time limit 15min)
+   * @throws IOException
+   */
+  public void waitUntilNoRegionsInTransition() throws IOException {
+    waitUntilNoRegionsInTransition(15 * 60000);
+  }
+
+  /**
    * Wait until labels is ready in VisibilityLabelsCache.
    * @param timeoutMillis
    * @param labels

http://git-wip-us.apache.org/repos/asf/hbase/blob/7a84ee26/hbase-server/src/test/java/org/apache/hadoop/hbase/TestRegionRebalancing.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestRegionRebalancing.java 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestRegionRebalancing.java
index 4c4697d..532896a 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestRegionRebalancing.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestRegionRebalancing.java
@@ -103,39 +103,39 @@ public class TestRegionRebalancing {
       admin.createTable(this.desc, Arrays.copyOfRange(HBaseTestingUtility.KEYS,
           1, HBaseTestingUtility.KEYS.length));
       this.regionLocator = 
connection.getRegionLocator(this.desc.getTableName());
-  
+
       MetaTableAccessor.fullScanMetaAndPrint(admin.getConnection());
-  
+
       assertEquals("Test table should have right number of regions",
         HBaseTestingUtility.KEYS.length,
         this.regionLocator.getStartKeys().length);
-  
+
       // verify that the region assignments are balanced to start out
       assertRegionsAreBalanced();
-  
+
       // add a region server - total of 2
       LOG.info("Started second server=" +
         
UTIL.getHBaseCluster().startRegionServer().getRegionServer().getServerName());
       UTIL.getHBaseCluster().getMaster().balance();
       assertRegionsAreBalanced();
-  
+
       // On a balanced cluster, calling balance() should return true
       assert(UTIL.getHBaseCluster().getMaster().balance() == true);
-  
+
       // if we add a server, then the balance() call should return true
       // add a region server - total of 3
       LOG.info("Started third server=" +
           
UTIL.getHBaseCluster().startRegionServer().getRegionServer().getServerName());
       assert(UTIL.getHBaseCluster().getMaster().balance() == true);
       assertRegionsAreBalanced();
-  
+
       // kill a region server - total of 2
       LOG.info("Stopped third server=" + 
UTIL.getHBaseCluster().stopRegionServer(2, false));
       UTIL.getHBaseCluster().waitOnRegionServer(2);
       waitOnCrashProcessing();
       UTIL.getHBaseCluster().getMaster().balance();
       assertRegionsAreBalanced();
-  
+
       // start two more region servers - total of 4
       LOG.info("Readding third server=" +
           
UTIL.getHBaseCluster().startRegionServer().getRegionServer().getServerName());
@@ -253,10 +253,7 @@ public class TestRegionRebalancing {
         Thread.sleep(200);
       } catch (InterruptedException e) {}
     }
-    RegionStates regionStates = 
UTIL.getHBaseCluster().getMaster().getAssignmentManager().getRegionStates();
-    while (!regionStates.getRegionsInTransition().isEmpty()) {
-      Threads.sleep(100);
-    }
+    UTIL.waitUntilNoRegionsInTransition();
   }
 
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/7a84ee26/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java
index 289e6f2..8350b60 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java
@@ -250,20 +250,14 @@ public class TestHCM {
 
     Table t = TEST_UTIL.createTable(tn, cf);
     TEST_UTIL.waitTableAvailable(tn);
+    TEST_UTIL.waitUntilNoRegionsInTransition();
 
-    while(TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager().
-        getRegionStates().isRegionsInTransition()){
-      Thread.sleep(1);
-    }
     final ConnectionImplementation hci =  
(ConnectionImplementation)TEST_UTIL.getConnection();
     try (RegionLocator l = TEST_UTIL.getConnection().getRegionLocator(tn)) {
       while (l.getRegionLocation(rk).getPort() != sn.getPort()) {
         TEST_UTIL.getHBaseAdmin().move(l.getRegionLocation(rk).getRegionInfo().
             getEncodedNameAsBytes(), Bytes.toBytes(sn.toString()));
-        while (TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager().
-            getRegionStates().isRegionsInTransition()) {
-          Thread.sleep(1);
-        }
+        TEST_UTIL.waitUntilNoRegionsInTransition();
         hci.clearRegionCache(tn);
       }
       Assert.assertNotNull(hci.clusterStatusListener);
@@ -741,9 +735,7 @@ public class TestHCM {
     HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();
 
     // We can wait for all regions to be online, that makes log reading easier 
when debugging
-    while 
(master.getAssignmentManager().getRegionStates().isRegionsInTransition()) {
-      Thread.sleep(1);
-    }
+    TEST_UTIL.waitUntilNoRegionsInTransition();
 
     // Now moving the region to the second server
     HRegionLocation toMove = conn.getCachedLocation(TABLE_NAME, 
ROW).getRegionLocation();
@@ -1034,9 +1026,7 @@ public class TestHCM {
       HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();
 
       // We can wait for all regions to be online, that makes log reading 
easier when debugging
-      while 
(master.getAssignmentManager().getRegionStates().isRegionsInTransition()) {
-        Thread.sleep(1);
-      }
+      TEST_UTIL.waitUntilNoRegionsInTransition();
 
       Put put = new Put(ROW_X);
       put.addColumn(FAM_NAM, ROW_X, ROW_X);

http://git-wip-us.apache.org/repos/asf/hbase/blob/7a84ee26/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java
index e1c4a1f..b4e93bd 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java
@@ -51,11 +51,9 @@ import org.apache.hadoop.hbase.client.ConnectionFactory;
 import org.apache.hadoop.hbase.client.MasterSwitchType;
 import org.apache.hadoop.hbase.client.RegionLocator;
 import org.apache.hadoop.hbase.client.Table;
-import org.apache.hadoop.hbase.master.AssignmentManager;
 import org.apache.hadoop.hbase.master.HMaster;
 import org.apache.hadoop.hbase.master.MasterCoprocessorHost;
 import org.apache.hadoop.hbase.master.RegionPlan;
-import org.apache.hadoop.hbase.master.RegionState;
 import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
 import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
@@ -1915,17 +1913,13 @@ public class TestMasterObserver {
       master.balanceSwitch(false);
 
       // wait for assignments to finish, if any
-      AssignmentManager mgr = master.getAssignmentManager();
-      Set<RegionState> transRegions = 
mgr.getRegionStates().getRegionsInTransition();
-      for (RegionState state : transRegions) {
-        
mgr.getRegionStates().waitOnRegionToClearRegionsInTransition(state.getRegion());
-      }
+      UTIL.waitUntilNoRegionsInTransition();
 
       // move half the open regions from RS 0 to RS 1
       HRegionServer rs = cluster.getRegionServer(0);
       byte[] destRS = 
Bytes.toBytes(cluster.getRegionServer(1).getServerName().toString());
       //Make sure no regions are in transition now
-      waitForRITtoBeZero(master);
+      UTIL.waitUntilNoRegionsInTransition();
       List<HRegionInfo> openRegions = 
ProtobufUtil.getOnlineRegions(rs.getRSRpcServices());
       int moveCnt = openRegions.size()/2;
       for (int i=0; i<moveCnt; i++) {
@@ -1936,7 +1930,7 @@ public class TestMasterObserver {
         }
       }
       //Make sure no regions are in transition now
-      waitForRITtoBeZero(master);
+      UTIL.waitUntilNoRegionsInTransition();
       // now trigger a balance
       master.balanceSwitch(true);
       boolean balanceRun = master.balance();
@@ -1949,15 +1943,6 @@ public class TestMasterObserver {
     }
   }
 
-  private void waitForRITtoBeZero(HMaster master) throws Exception {
-    // wait for assignments to finish
-    AssignmentManager mgr = master.getAssignmentManager();
-    Set<RegionState> transRegions = 
mgr.getRegionStates().getRegionsInTransition();
-    for (RegionState state : transRegions) {
-      
mgr.getRegionStates().waitOnRegionToClearRegionsInTransition(state.getRegion());
-    }
-  }
-
   @Test (timeout=180000)
   public void testTableDescriptorsEnumeration() throws Exception {
     MiniHBaseCluster cluster = UTIL.getHBaseCluster();

http://git-wip-us.apache.org/repos/asf/hbase/blob/7a84ee26/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.java
index 4d92b8a..59173ad 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.java
@@ -515,11 +515,8 @@ public class TestHFileOutputFormat2  {
       if (shouldChangeRegions) {
         LOG.info("Changing regions in table");
         admin.disableTable(table.getName());
-        while(util.getMiniHBaseCluster().getMaster().getAssignmentManager().
-            getRegionStates().isRegionsInTransition()) {
-          Threads.sleep(200);
-          LOG.info("Waiting on table to finish disabling");
-        }
+        util.waitUntilNoRegionsInTransition();
+
         util.deleteTable(table.getName());
         byte[][] newSplitKeys = generateRandomSplitKeys(14);
         table = util.createTable(TABLE_NAME, FAMILIES, newSplitKeys);

http://git-wip-us.apache.org/repos/asf/hbase/blob/7a84ee26/hbase-server/src/test/java/org/apache/hadoop/hbase/master/handler/TestTableDeleteFamilyHandler.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/handler/TestTableDeleteFamilyHandler.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/handler/TestTableDeleteFamilyHandler.java
index 8a8c059..aa7c5e1 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/handler/TestTableDeleteFamilyHandler.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/handler/TestTableDeleteFamilyHandler.java
@@ -61,7 +61,7 @@ public class TestTableDeleteFamilyHandler {
 
   /**
    * Start up a mini cluster and put a small table of empty regions into it.
-   * 
+   *
    * @throws Exception
    */
   @BeforeClass
@@ -80,15 +80,8 @@ public class TestTableDeleteFamilyHandler {
     // Create a table of three families. This will assign a region.
     TEST_UTIL.createTable(TABLENAME, FAMILIES);
     Table t = TEST_UTIL.getConnection().getTable(TABLENAME);
-    while(TEST_UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager()
-        .getRegionStates().getRegionsInTransition().size() > 0) {
-      Thread.sleep(100);
-    }
-    // Create multiple regions in all the three column families
-    while(TEST_UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager()
-        .getRegionStates().getRegionsInTransition().size() > 0) {
-      Thread.sleep(100);
-    }
+    TEST_UTIL.waitUntilNoRegionsInTransition();
+
     // Load the table with data for all families
     TEST_UTIL.loadTable(t, FAMILIES);
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/7a84ee26/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
index e6578bb..7fbcfea 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
@@ -149,29 +149,12 @@ public class TestSplitTransactionOnCluster {
     this.admin.close();
   }
 
-  private HRegionInfo getAndCheckSingleTableRegion(final List<HRegion> 
regions) {
+  private HRegionInfo getAndCheckSingleTableRegion(final List<HRegion> regions)
+      throws IOException, InterruptedException {
     assertEquals(1, regions.size());
     HRegionInfo hri = regions.get(0).getRegionInfo();
-    return waitOnRIT(hri);
-  }
-
-  /**
-   * Often region has not yet fully opened.  If we try to use it -- do a move 
for instance -- it
-   * will fail silently if the region is not yet opened.
-   * @param hri Region to check if in Regions In Transition... wait until out 
of transition before
-   * returning
-   * @return Passed in <code>hri</code>
-   */
-  private HRegionInfo waitOnRIT(final HRegionInfo hri) {
-    // Close worked but we are going to open the region elsewhere.  Before 
going on, make sure
-    // this completes.
-    while (TESTING_UTIL.getHBaseCluster().getMaster().getAssignmentManager().
-        getRegionStates().isRegionInTransition(hri)) {
-      LOG.info("Waiting on region in transition: " +
-        
TESTING_UTIL.getHBaseCluster().getMaster().getAssignmentManager().getRegionStates().
-          getRegionTransitionState(hri));
-      Threads.sleep(10);
-    }
+    TESTING_UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager()
+      .waitOnRegionToClearRegionsInTransition(hri, 600000);
     return hri;
   }
 
@@ -210,13 +193,7 @@ public class TestSplitTransactionOnCluster {
       observer.latch.await();
 
       LOG.info("Waiting for region to come out of RIT");
-      TESTING_UTIL.waitFor(60000, 1000, new Waiter.Predicate<Exception>() {
-        @Override
-        public boolean evaluate() throws Exception {
-          RegionStates regionStates = 
cluster.getMaster().getAssignmentManager().getRegionStates();
-          return !regionStates.isRegionInTransition(hri.getEncodedName());
-        }
-      });
+      
cluster.getMaster().getAssignmentManager().waitOnRegionToClearRegionsInTransition(hri,
 60000);
     } finally {
       admin.setBalancerRunning(true, false);
       cluster.getMaster().setCatalogJanitorEnabled(true);

http://git-wip-us.apache.org/repos/asf/hbase/blob/7a84ee26/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.java
index 57bc77e..866a12d 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.java
@@ -1683,8 +1683,7 @@ public class TestHBaseFsckOneRS extends BaseTestHBaseFsck 
{
       st.prepare();
       st.stepsBeforePONR(regionServer, regionServer, false);
       AssignmentManager am = cluster.getMaster().getAssignmentManager();
-      Set<RegionState> regionsInTransition = 
am.getRegionStates().getRegionsInTransition();
-      for (RegionState state : regionsInTransition) {
+      for (RegionState state : am.getRegionStates().getRegionsInTransition()) {
         am.regionOffline(state.getRegion());
       }
       Map<HRegionInfo, ServerName> regionsMap = new HashMap<HRegionInfo, 
ServerName>();

http://git-wip-us.apache.org/repos/asf/hbase/blob/7a84ee26/hbase-server/src/test/java/org/apache/hadoop/hbase/util/hbck/TestOfflineMetaRebuildHole.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/hbck/TestOfflineMetaRebuildHole.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/hbck/TestOfflineMetaRebuildHole.java
index 615487d..b8565e3 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/hbck/TestOfflineMetaRebuildHole.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/hbck/TestOfflineMetaRebuildHole.java
@@ -75,15 +75,6 @@ public class TestOfflineMetaRebuildHole extends 
OfflineMetaRebuildTestCore {
 
     LOG.info("Waiting for no more RIT");
     TEST_UTIL.waitUntilNoRegionsInTransition(60000);
-    LOG.info("No more RIT in ZK, now doing final test verification");
-    int tries = 60;
-    while(TEST_UTIL.getHBaseCluster()
-        
.getMaster().getAssignmentManager().getRegionStates().getRegionsInTransition().size()
 > 0 &&
-        tries-- > 0) {
-      LOG.info("Waiting for RIT: "+TEST_UTIL.getHBaseCluster()
-              
.getMaster().getAssignmentManager().getRegionStates().getRegionsInTransition());
-      Thread.sleep(1000);
-    }
 
     // Meta still messed up.
     assertEquals(1, scanMeta());

http://git-wip-us.apache.org/repos/asf/hbase/blob/7a84ee26/hbase-server/src/test/java/org/apache/hadoop/hbase/util/hbck/TestOfflineMetaRebuildOverlap.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/hbck/TestOfflineMetaRebuildOverlap.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/hbck/TestOfflineMetaRebuildOverlap.java
index 40ba86a..ae72935 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/hbck/TestOfflineMetaRebuildOverlap.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/hbck/TestOfflineMetaRebuildOverlap.java
@@ -84,14 +84,6 @@ public class TestOfflineMetaRebuildOverlap extends 
OfflineMetaRebuildTestCore {
     LOG.info("Waiting for no more RIT");
     TEST_UTIL.waitUntilNoRegionsInTransition(60000);
     LOG.info("No more RIT in ZK, now doing final test verification");
-    int tries = 60;
-    while(TEST_UTIL.getHBaseCluster()
-        
.getMaster().getAssignmentManager().getRegionStates().getRegionsInTransition().size()
 > 0 &&
-        tries-- > 0) {
-      LOG.info("Waiting for RIT: "+TEST_UTIL.getHBaseCluster()
-              
.getMaster().getAssignmentManager().getRegionStates().getRegionsInTransition());
-      Thread.sleep(1000);
-    }
 
     // Meta still messed up.
     assertEquals(1, scanMeta());

Reply via email to