diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java index af0b0be..3ab17b6 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java @@ -985,7 +985,8 @@ public class AssignmentManager extends ZooKeeperListener { return; } // Handle OPENED by removing from transition and deleted zk node - regionState = regionStates.updateRegionState(rt, State.OPEN); + regionState = + regionStates.transitionOpenFromPendingOpenOrOpeningOnServer(rt,regionState, sn); if (regionState != null) { failedOpenTracker.remove(encodedName); // reset the count, if any new OpenedRegionHandler( 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 1293828..29b2b8b 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 @@ -329,6 +329,17 @@ public class RegionStates { return updateRegionState(regionInfo, state, transition.getServerName()); } + + /** + * Transition a region state to OPEN from OPENING/PENDING_OPEN + */ + public synchronized RegionState transitionOpenFromPendingOpenOrOpeningOnServer( + final RegionTransition transition, final RegionState fromState, final ServerName sn) { + if(fromState.isPendingOpenOrOpeningOnServer(sn)){ + return updateRegionState(transition, State.OPEN); + } + return null; + } /** * Update a region state. It will be put in transition if not already there.