Index: src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (revision 1204807) +++ src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (working copy) @@ -966,16 +966,35 @@ ZKAssign.getRegionName(this.master.getZooKeeper(), path); RegionState rs = this.regionsInTransition.get(regionName); if (rs != null) { + HRegionInfo regionInfo = rs.getRegion(); if (rs.isSplitting() || rs.isSplit()) { LOG.debug("Ephemeral node deleted, regionserver crashed?, " + "clearing from RIT; rs=" + rs); clearRegionFromTransition(rs.getRegion()); } else { - LOG.warn("Node deleted but still in RIT: " + rs); + LOG.debug("Node deleted but still in RIT: " + rs); + makeRegionOnline(rs, regionInfo); } } } } + + private void makeRegionOnline(RegionState rs, HRegionInfo regionInfo) { + if (rs.getState().equals(RegionState.State.OPEN)) { + regionOnline(regionInfo, rs.serverName); + LOG.info("The master has opened the region " + + regionInfo.getRegionNameAsString() + " that was online on " + + rs.serverName); + if (this.getZKTable().isDisablingOrDisabledTable( + regionInfo.getTableNameAsString())) { + debugLog(regionInfo, "Opened region " + + regionInfo.getRegionNameAsString() + " but " + + "this table is disabled, triggering close of region"); + unassign(regionInfo); + } + } + } + /** * New unassigned node has been created. Index: src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java (revision 1180783) +++ src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java (working copy) @@ -98,14 +98,13 @@ // Code to defend against case where we get SPLIT before region open // processing completes; temporary till we make SPLITs go via zk -- 0.92. RegionState regionState = this.assignmentManager.isRegionInTransition(regionInfo); + boolean deleteOpenedNode = false; if (regionState != null && regionState.getState().equals(RegionState.State.OPEN)) { - if (deleteOpenedNode(expectedVersion)) { - // Remove region from in-memory transition and unassigned node from ZK - this.assignmentManager.regionOnline(regionInfo, this.sn); - debugLog(regionInfo, "The master has opened the region " + - regionInfo.getRegionNameAsString() + " that was online on " + - this.sn.toString()); + deleteOpenedNode = deleteOpenedNode(expectedVersion); + if (deleteOpenedNode) { + debugLog(regionInfo, "The znode of region " + + regionInfo.getRegionNameAsString() + " has been deleted."); } else { LOG.error("The znode of region " + regionInfo.getRegionNameAsString() + " could not be deleted."); @@ -114,12 +113,14 @@ LOG.warn("Skipping the onlining of " + regionInfo.getRegionNameAsString() + " because regions is NOT in RIT -- presuming this is because it SPLIT"); } - if (this.assignmentManager.getZKTable().isDisablingOrDisabledTable( - regionInfo.getTableNameAsString())) { - debugLog(regionInfo, - "Opened region " + regionInfo.getRegionNameAsString() + " but " - + "this table is disabled, triggering close of region"); - assignmentManager.unassign(regionInfo); + if (!deleteOpenedNode) { + if (this.assignmentManager.getZKTable().isDisablingOrDisabledTable( + regionInfo.getTableNameAsString())) { + debugLog(regionInfo, "Opened region " + + regionInfo.getRegionNameAsString() + " but " + + "this table is disabled, triggering close of region"); + assignmentManager.unassign(regionInfo); + } } }