You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mb...@apache.org on 2016/05/20 14:17:35 UTC
[3/6] hbase git commit: HBASE-15864 Reuse the testing helper to wait
regions in transition
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/f9aff84d
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/f9aff84d
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/f9aff84d
Branch: refs/heads/branch-1.3
Commit: f9aff84dee46cdb2f7df2e654689c4a60adcdd8a
Parents: be2252d
Author: Matteo Bertozzi <ma...@cloudera.com>
Authored: Fri May 20 06:49:14 2016 -0700
Committer: Matteo Bertozzi <ma...@cloudera.com>
Committed: Fri May 20 07:01:25 2016 -0700
----------------------------------------------------------------------
.../hadoop/hbase/HBaseTestingUtility.java | 13 ++++++--
.../hadoop/hbase/TestRegionRebalancing.java | 21 ++++++------
.../org/apache/hadoop/hbase/client/TestHCM.java | 20 +++---------
.../hbase/coprocessor/TestMasterObserver.java | 23 ++-----------
.../hbase/mapreduce/TestHFileOutputFormat2.java | 7 ++--
.../handler/TestTableDeleteFamilyHandler.java | 12 ++-----
.../TestSplitTransactionOnCluster.java | 34 +++-----------------
.../util/hbck/TestOfflineMetaRebuildHole.java | 9 +-----
.../hbck/TestOfflineMetaRebuildOverlap.java | 8 -----
9 files changed, 38 insertions(+), 109 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/f9aff84d/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 b341082..2870593 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
@@ -4092,14 +4092,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/f9aff84d/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 bd9d7d7..f10d872 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
@@ -102,39 +102,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());
@@ -252,10 +252,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/f9aff84d/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 e592fa8..0d9efa2 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
@@ -260,19 +260,13 @@ public class TestHCM {
HTable 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 HConnectionImplementation hci = (HConnectionImplementation)t.getConnection();
while (t.getRegionLocation(rk).getPort() != sn.getPort()){
TEST_UTIL.getHBaseAdmin().move(t.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);
@@ -753,9 +747,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();
@@ -1132,7 +1124,7 @@ public class TestHCM {
@Test
public void testMulti() throws Exception {
HTable table = TEST_UTIL.createMultiRegionTable(TABLE_NAME3, FAM_NAM);
- try {
+ try {
ConnectionManager.HConnectionImplementation conn =
( ConnectionManager.HConnectionImplementation)table.getConnection();
@@ -1145,9 +1137,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.add(FAM_NAM, ROW_X, ROW_X);
http://git-wip-us.apache.org/repos/asf/hbase/blob/f9aff84d/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 a7a80b3..e0d4afb 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.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.RegionLocator;
-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;
@@ -1680,18 +1678,13 @@ public class TestMasterObserver {
master.balanceSwitch(false);
// wait for assignments to finish, if any
- AssignmentManager mgr = master.getAssignmentManager();
- Collection<RegionState> transRegions =
- mgr.getRegionStates().getRegionsInTransition().values();
- 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++) {
@@ -1702,7 +1695,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();
@@ -1715,16 +1708,6 @@ public class TestMasterObserver {
}
}
- private void waitForRITtoBeZero(HMaster master) throws Exception {
- // wait for assignments to finish
- AssignmentManager mgr = master.getAssignmentManager();
- Collection<RegionState> transRegions =
- mgr.getRegionStates().getRegionsInTransition().values();
- 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/f9aff84d/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 a0507df..aefe8cf 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
@@ -510,11 +510,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/f9aff84d/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 3ab91ca..a730deb 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
@@ -81,16 +81,10 @@ public class TestTableDeleteFamilyHandler {
public void setup() throws IOException, InterruptedException {
// Create a table of three families. This will assign a region.
TEST_UTIL.createTable(TABLENAME, FAMILIES);
+
HTable t = new HTable(TEST_UTIL.getConfiguration(), 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/f9aff84d/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 751e109..35e2b5b 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
@@ -163,29 +163,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;
}
@@ -318,14 +301,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();
- Map<String, RegionState> rit = regionStates.getRegionsInTransition();
- return (rit.size() == 0);
- }
- });
+ TESTING_UTIL.waitUntilNoRegionsInTransition(60000);
} finally {
admin.setBalancerRunning(true, false);
cluster.getMaster().setCatalogJanitorEnabled(true);
http://git-wip-us.apache.org/repos/asf/hbase/blob/f9aff84d/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 c37f297..9425f91 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
@@ -80,14 +80,7 @@ public class TestOfflineMetaRebuildHole extends OfflineMetaRebuildTestCore {
LOG.info("Waiting for no more RIT");
ZKAssign.blockUntilNoRIT(zkw);
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);
- }
+ TEST_UTIL.waitUntilNoRegionsInTransition(60000);
// Meta still messed up.
assertEquals(1, scanMeta());
http://git-wip-us.apache.org/repos/asf/hbase/blob/f9aff84d/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 62a6914..d5d60ad 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
@@ -88,14 +88,6 @@ public class TestOfflineMetaRebuildOverlap extends OfflineMetaRebuildTestCore {
LOG.info("Waiting for no more RIT");
ZKAssign.blockUntilNoRIT(zkw);
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());