Index: src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (revision 1453674) +++ src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (working copy) @@ -1692,10 +1692,16 @@ try { LOG.debug("Assigning region " + state.getRegion().getRegionNameAsString() + " to " + plan.getDestination().toString()); + long currentOfflineTimeStamp = state.getStamp(); RegionOpeningState regionOpenState = serverManager.sendRegionOpen(plan.getDestination(), state.getRegion(), versionOfOfflineNode); if (regionOpenState == RegionOpeningState.OPENED) { // Transition RegionState to PENDING_OPEN + // Check if already the offline state has been updated due to a + // failure in prev assign + if (state.isOffline() && currentOfflineTimeStamp != state.getStamp()) { + return; + } if (state.isOffline() && !state.isOpening()) { state.update(RegionState.State.PENDING_OPEN, System.currentTimeMillis(), plan.getDestination()); Index: src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java (revision 1453674) +++ src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java (working copy) @@ -100,6 +100,7 @@ region = openRegion(); if (region == null) { tryTransitionToFailedOpen(regionInfo); + transitionToFailedOpen = true; return; } boolean failed = true;