HBASE-8960: TestDistributedLogSplitting fails sometime - stablize testDisallowWritesInRecovering
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1516248 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d663f2baa1
commit
568bff8326
|
@ -775,7 +775,6 @@ public class TestDistributedLogSplitting {
|
||||||
curConf.setBoolean(HConstants.DISALLOW_WRITES_IN_RECOVERING, true);
|
curConf.setBoolean(HConstants.DISALLOW_WRITES_IN_RECOVERING, true);
|
||||||
startCluster(NUM_RS, curConf);
|
startCluster(NUM_RS, curConf);
|
||||||
final int NUM_REGIONS_TO_CREATE = 40;
|
final int NUM_REGIONS_TO_CREATE = 40;
|
||||||
final int NUM_LOG_LINES = 30000;
|
|
||||||
// turn off load balancing to prevent regions from moving around otherwise
|
// turn off load balancing to prevent regions from moving around otherwise
|
||||||
// they will consume recovered.edits
|
// they will consume recovered.edits
|
||||||
master.balanceSwitch(false);
|
master.balanceSwitch(false);
|
||||||
|
@ -783,33 +782,40 @@ public class TestDistributedLogSplitting {
|
||||||
List<RegionServerThread> rsts = cluster.getLiveRegionServerThreads();
|
List<RegionServerThread> rsts = cluster.getLiveRegionServerThreads();
|
||||||
final ZooKeeperWatcher zkw = new ZooKeeperWatcher(conf, "table-creation", null);
|
final ZooKeeperWatcher zkw = new ZooKeeperWatcher(conf, "table-creation", null);
|
||||||
HTable ht = installTable(zkw, "table", "family", NUM_REGIONS_TO_CREATE);
|
HTable ht = installTable(zkw, "table", "family", NUM_REGIONS_TO_CREATE);
|
||||||
|
final SplitLogManager slm = master.getMasterFileSystem().splitLogManager;
|
||||||
|
|
||||||
HRegionServer hrs = findRSToKill(false, "table");
|
Set<HRegionInfo> regionSet = new HashSet<HRegionInfo>();
|
||||||
List<HRegionInfo> regions = ProtobufUtil.getOnlineRegions(hrs);
|
HRegionInfo region = null;
|
||||||
makeHLog(hrs.getWAL(), regions, "table", "family", NUM_LOG_LINES, 100);
|
HRegionServer hrs = null;
|
||||||
|
HRegionServer dstRS = null;
|
||||||
|
for (int i = 0; i < NUM_RS; i++) {
|
||||||
|
hrs = rsts.get(i).getRegionServer();
|
||||||
|
List<HRegionInfo> regions = ProtobufUtil.getOnlineRegions(hrs);
|
||||||
|
if (regions.isEmpty()) continue;
|
||||||
|
region = regions.get(0);
|
||||||
|
regionSet.add(region);
|
||||||
|
dstRS = rsts.get((i+1) % NUM_RS).getRegionServer();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// abort RS
|
slm.markRegionsRecoveringInZK(hrs.getServerName(), regionSet);
|
||||||
LOG.info("Aborting region server: " + hrs.getServerName());
|
// move region in order for the region opened in recovering state
|
||||||
hrs.abort("testing");
|
final HRegionInfo hri = region;
|
||||||
|
final HRegionServer tmpRS = dstRS;
|
||||||
// wait for abort completes
|
TEST_UTIL.getHBaseAdmin().move(region.getEncodedNameAsBytes(),
|
||||||
TEST_UTIL.waitFor(120000, 200, new Waiter.Predicate<Exception>() {
|
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<Exception>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean evaluate() throws Exception {
|
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<Exception>() {
|
|
||||||
@Override
|
|
||||||
public boolean evaluate() throws Exception {
|
|
||||||
return (getAllOnlineRegions(cluster).size() >= (NUM_REGIONS_TO_CREATE + 1));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
HRegionInfo region = regions.get(0);
|
|
||||||
byte[] key = region.getStartKey();
|
byte[] key = region.getStartKey();
|
||||||
if (key == null || key.length == 0) {
|
if (key == null || key.length == 0) {
|
||||||
key = new byte[] { 0, 0, 0, 0, 1 };
|
key = new byte[] { 0, 0, 0, 0, 1 };
|
||||||
|
|
Loading…
Reference in New Issue