Index: src/test/java/org/apache/hadoop/hbase/util/hbck/TestOfflineMetaRebuildBase.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/util/hbck/TestOfflineMetaRebuildBase.java (revision 1206084) +++ src/test/java/org/apache/hadoop/hbase/util/hbck/TestOfflineMetaRebuildBase.java (working copy) @@ -24,14 +24,16 @@ import java.util.Arrays; +import org.apache.hadoop.hbase.Abortable; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.MediumTests; import org.apache.hadoop.hbase.client.HConnectionManager; import org.apache.hadoop.hbase.util.HBaseFsck; import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE; +import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.junit.Test; import org.junit.experimental.categories.Category; - +import org.apache.hadoop.hbase.zookeeper.ZKAssign; /** * This builds a table, removes info from meta, and then rebuilds meta. */ @@ -64,7 +66,28 @@ // bring up the minicluster TEST_UTIL.startMiniZKCluster(); // tables seem enabled by default TEST_UTIL.restartHBaseCluster(3); - + + // Create a ZKW to use in the test + ZooKeeperWatcher zkw = new ZooKeeperWatcher(TEST_UTIL.getConfiguration(), + "unittest", new Abortable() { + boolean aborted = false; + @Override + public void abort(String why, Throwable e) { + this.aborted = true; + throw new RuntimeException("Fatal ZK error, why=" + why, e); + } + + @Override + public boolean isAborted() { + return this.aborted; + } + + }); + + LOG.info("Waiting for no more RIT"); + ZKAssign.blockUntilNoRIT(zkw); + LOG.info("No more RIT in ZK, now doing final test verification"); + // everything is good again. assertEquals(4, scanMeta()); HTableDescriptor[] htbls = TEST_UTIL.getHBaseAdmin().listTables();