diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDistributedLogSplitting.java hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDistributedLogSplitting.java index 8b281e1..acfba4e 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDistributedLogSplitting.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDistributedLogSplitting.java @@ -775,7 +775,6 @@ public class TestDistributedLogSplitting { curConf.setBoolean(HConstants.DISALLOW_WRITES_IN_RECOVERING, true); startCluster(NUM_RS, curConf); final int NUM_REGIONS_TO_CREATE = 40; - final int NUM_LOG_LINES = 30000; // turn off load balancing to prevent regions from moving around otherwise // they will consume recovered.edits master.balanceSwitch(false); @@ -783,33 +782,40 @@ public class TestDistributedLogSplitting { List rsts = cluster.getLiveRegionServerThreads(); final ZooKeeperWatcher zkw = new ZooKeeperWatcher(conf, "table-creation", null); HTable ht = installTable(zkw, "table", "family", NUM_REGIONS_TO_CREATE); + final SplitLogManager slm = master.getMasterFileSystem().splitLogManager; - HRegionServer hrs = findRSToKill(false, "table"); - List regions = ProtobufUtil.getOnlineRegions(hrs); - makeHLog(hrs.getWAL(), regions, "table", "family", NUM_LOG_LINES, 100); - - // abort RS - LOG.info("Aborting region server: " + hrs.getServerName()); - hrs.abort("testing"); + Set regionSet = new HashSet(); + HRegionInfo region = null; + HRegionServer hrs = null; + HRegionServer dstRS = null; + for (int i = 0; i < NUM_RS; i++) { + hrs = rsts.get(i).getRegionServer(); + List regions = ProtobufUtil.getOnlineRegions(hrs); + if (regions.isEmpty()) continue; + region = regions.get(0); + regionSet.add(region); + dstRS = rsts.get((i+1) % NUM_RS).getRegionServer(); + break; + } - // wait for abort completes - TEST_UTIL.waitFor(120000, 200, new Waiter.Predicate() { + slm.markRegionsRecoveringInZK(hrs.getServerName(), regionSet); + // move region in order for the region opened in recovering state + final HRegionInfo hri = region; + final HRegionServer tmpRS = dstRS; + TEST_UTIL.getHBaseAdmin().move(region.getEncodedNameAsBytes(), + Bytes.toBytes(dstRS.getServerName().getServerName())); + // wait for region move completes + final RegionStates regionStates = + TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager().getRegionStates(); + TEST_UTIL.waitFor(45000, 200, new Waiter.Predicate() { @Override public boolean evaluate() throws Exception { - return (cluster.getLiveRegionServerThreads().size() <= (NUM_RS - 1)); + ServerName sn = regionStates.getRegionServerOfRegion(hri); + return (sn != null && sn.equals(tmpRS.getServerName())); } }); - // wait for regions come online - TEST_UTIL.waitFor(180000, 100, new Waiter.Predicate() { - @Override - public boolean evaluate() throws Exception { - return (getAllOnlineRegions(cluster).size() >= (NUM_REGIONS_TO_CREATE + 1)); - } - }); - try { - HRegionInfo region = regions.get(0); byte[] key = region.getStartKey(); if (key == null || key.length == 0) { key = new byte[] { 0, 0, 0, 0, 1 };