HBASE-7597 TestHBaseFsck#testRegionShouldNotBeDeployed seems to be flaky, v2
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1461228 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
130d95e78d
commit
1325cd776b
|
@ -34,7 +34,11 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.concurrent.*;
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||||
|
import java.util.concurrent.SynchronousQueue;
|
||||||
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
@ -69,6 +73,7 @@ import org.apache.hadoop.hbase.master.AssignmentManager;
|
||||||
import org.apache.hadoop.hbase.master.HMaster;
|
import org.apache.hadoop.hbase.master.HMaster;
|
||||||
import org.apache.hadoop.hbase.master.RegionStates;
|
import org.apache.hadoop.hbase.master.RegionStates;
|
||||||
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
|
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
|
||||||
|
import org.apache.hadoop.hbase.regionserver.HRegion;
|
||||||
import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;
|
import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;
|
||||||
import org.apache.hadoop.hbase.regionserver.HRegionServer;
|
import org.apache.hadoop.hbase.regionserver.HRegionServer;
|
||||||
import org.apache.hadoop.hbase.regionserver.TestEndToEndSplitTransaction;
|
import org.apache.hadoop.hbase.regionserver.TestEndToEndSplitTransaction;
|
||||||
|
@ -79,14 +84,11 @@ import org.apache.hadoop.hbase.util.HBaseFsck.PrintingErrorReporter;
|
||||||
import org.apache.hadoop.hbase.util.HBaseFsck.TableInfo;
|
import org.apache.hadoop.hbase.util.HBaseFsck.TableInfo;
|
||||||
import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;
|
import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;
|
||||||
import org.apache.hadoop.hbase.util.hbck.HbckTestingUtil;
|
import org.apache.hadoop.hbase.util.hbck.HbckTestingUtil;
|
||||||
import org.apache.hadoop.hbase.zookeeper.ZKAssign;
|
|
||||||
import org.apache.hadoop.hbase.zookeeper.ZKTable;
|
|
||||||
import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
|
|
||||||
import org.apache.zookeeper.KeeperException;
|
import org.apache.zookeeper.KeeperException;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
|
import org.junit.Test;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.experimental.categories.Category;
|
||||||
import org.junit.rules.TestName;
|
import org.junit.rules.TestName;
|
||||||
|
|
||||||
|
@ -1095,9 +1097,6 @@ public class TestHBaseFsck {
|
||||||
MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
|
MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
|
||||||
assertTrue(cluster.waitForActiveAndReadyMaster());
|
assertTrue(cluster.waitForActiveAndReadyMaster());
|
||||||
|
|
||||||
// Create a ZKW to use in the test
|
|
||||||
ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(TEST_UTIL);
|
|
||||||
|
|
||||||
FileSystem filesystem = FileSystem.get(conf);
|
FileSystem filesystem = FileSystem.get(conf);
|
||||||
Path rootdir = FSUtils.getRootDir(conf);
|
Path rootdir = FSUtils.getRootDir(conf);
|
||||||
|
|
||||||
|
@ -1114,52 +1113,26 @@ public class TestHBaseFsck {
|
||||||
|
|
||||||
// Let's just assign everything to first RS
|
// Let's just assign everything to first RS
|
||||||
HRegionServer hrs = cluster.getRegionServer(0);
|
HRegionServer hrs = cluster.getRegionServer(0);
|
||||||
ServerName serverName = hrs.getServerName();
|
|
||||||
|
|
||||||
// create region files.
|
// Create region files.
|
||||||
TEST_UTIL.getHBaseAdmin().disableTable(table);
|
TEST_UTIL.getHBaseAdmin().disableTable(table);
|
||||||
TEST_UTIL.getHBaseAdmin().enableTable(table);
|
TEST_UTIL.getHBaseAdmin().enableTable(table);
|
||||||
|
|
||||||
// Region of disable table was opened on RS
|
// Disable the table and close its regions
|
||||||
TEST_UTIL.getHBaseAdmin().disableTable(table);
|
TEST_UTIL.getHBaseAdmin().disableTable(table);
|
||||||
// Mess up ZKTable state, otherwise, can't open the region
|
|
||||||
ZKTable zkTable = cluster.getMaster().getAssignmentManager().getZKTable();
|
|
||||||
zkTable.setEnabledTable(table);
|
|
||||||
HRegionInfo region = disabledRegions.remove(0);
|
HRegionInfo region = disabledRegions.remove(0);
|
||||||
byte[] regionName = region.getRegionName();
|
byte[] regionName = region.getRegionName();
|
||||||
|
|
||||||
// The region should not be assigned currently
|
// The region should not be assigned currently
|
||||||
assertTrue(cluster.getServerWith(regionName) == -1);
|
assertTrue(cluster.getServerWith(regionName) == -1);
|
||||||
ZKAssign.createNodeOffline(zkw, region, serverName);
|
|
||||||
ProtobufUtil.openRegion(hrs, region);
|
|
||||||
|
|
||||||
int iTimes = 0;
|
// Directly open a region on a region server.
|
||||||
while (true) {
|
// If going through AM/ZK, the region won't be open.
|
||||||
if (cluster.getServerWith(regionName) != -1) {
|
// Even it is opened, AM will close it which causes
|
||||||
List<HRegionInfo> regions = ProtobufUtil.getOnlineRegions(hrs);
|
// flakiness of this test.
|
||||||
boolean found = false;
|
HRegion r = HRegion.openHRegion(
|
||||||
for (HRegionInfo hri: regions) {
|
region, htdDisabled, hrs.getWAL(region), conf);
|
||||||
if (Bytes.equals(hri.getRegionName(), regionName)) {
|
hrs.addToOnlineRegions(r);
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!found) {
|
|
||||||
LOG.info("Region was deployed but not in online " +
|
|
||||||
"region list. This should be transient. Waiting longer");
|
|
||||||
} else {
|
|
||||||
// Now, region is deployed, reset the table state back
|
|
||||||
zkTable.setDisabledTable(table);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Thread.sleep(100);
|
|
||||||
iTimes++;
|
|
||||||
if (iTimes >= REGION_ONLINE_TIMEOUT) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assertTrue(iTimes < REGION_ONLINE_TIMEOUT);
|
|
||||||
|
|
||||||
HBaseFsck hbck = doFsck(conf, false);
|
HBaseFsck hbck = doFsck(conf, false);
|
||||||
assertErrors(hbck, new ERROR_CODE[] { ERROR_CODE.SHOULD_NOT_BE_DEPLOYED });
|
assertErrors(hbck, new ERROR_CODE[] { ERROR_CODE.SHOULD_NOT_BE_DEPLOYED });
|
||||||
|
|
Loading…
Reference in New Issue