diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java index 599e649..2c99e6b 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java @@ -664,8 +664,24 @@ public class RegionStates { deleteRegion(hri); return; } + + /* + * One tricky case, if region here is a replica region and its parent is at + * SPLIT state, its newState should be same as its parent, not OFFLINE. + */ State newState = - expectedState == null ? State.OFFLINE : expectedState; + expectedState == null ? State.OFFLINE : expectedState; + if ((expectedState == null) && !RegionReplicaUtil.isDefaultReplica(hri)) { + RegionState primateState = getRegionState( + RegionReplicaUtil.getRegionInfoForDefaultReplica(hri)); + if ((primateState != null) && (primateState.getState() == State.SPLIT)) { + if (LOG.isDebugEnabled()) { + LOG.debug("Update region " + hri + "to SPLIT, from primary region " + + RegionReplicaUtil.getRegionInfoForDefaultReplica(hri)); + } + newState = State.SPLIT; + } + } updateRegionState(hri, newState); String encodedName = hri.getEncodedName(); synchronized (this) {