Index: hbase-server/src/test/java/org/apache/hadoop/hbase/TestFullLogReconstruction.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/TestFullLogReconstruction.java (revision 1519090) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/TestFullLogReconstruction.java (working copy) @@ -55,7 +55,7 @@ c.setInt("ipc.client.connect.max.retries", 1); c.setInt("dfs.client.block.recovery.retries", 1); c.setInt(HConstants.ZK_SESSION_TIMEOUT, 1000); - TEST_UTIL.startMiniCluster(2); + TEST_UTIL.startMiniCluster(3); } /** Index: hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestOpenRegionHandler.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestOpenRegionHandler.java (revision 1519090) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestOpenRegionHandler.java (working copy) @@ -127,6 +127,11 @@ } finally { HRegion.closeHRegion(region); } + // Region server is expected to abort due to the znode disappearing underneath it + // This was corresponding to the second handler.process() call above. + // The disappearance of znode is different from master removing it on successful open + // because OpenRegionHandler didn't have a chance to update the znode with OPENED state + assertTrue("region server should have aborted", rss.isAborted()); } @Test Index: hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java (revision 1519090) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java (working copy) @@ -55,6 +55,7 @@ private ZooKeeperWatcher zkw = null; private ServerName serverName = null; private RpcServerInterface rpcServer = null; + private volatile boolean abortRequested; MockRegionServerServices(ZooKeeperWatcher zkw) { this.zkw = zkw; @@ -154,7 +155,8 @@ @Override public void abort(String why, Throwable e) { - //no-op + this.abortRequested = true; + stop(why); } @Override @@ -169,7 +171,7 @@ @Override public boolean isAborted() { - return false; + return this.abortRequested; } @Override Index: hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java (revision 1519090) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java (working copy) @@ -401,9 +401,10 @@ EventType.RS_ZK_REGION_OPENING, EventType.RS_ZK_REGION_FAILED_OPEN, this.version) == -1) { - LOG.warn("Unable to mark region " + hri + " as FAILED_OPEN. " + + String warnMsg = "Unable to mark region " + hri + " as FAILED_OPEN. " + "It's likely that the master already timed out this open " + - "attempt, and thus another RS already has the region."); + "attempt, and thus another RS already has the region."; + rsServices.abort(warnMsg, null); } else { result = true; }