diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java index a564ea925a..df26071a5a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java @@ -1300,7 +1300,10 @@ public class AssignmentManager { regionNode.setRegionLocation(regionLocation); regionNode.setOpenSeqNum(openSeqNum); - if (localState == State.OPEN) { + // Note: keep consistent with other methods, see region(Opening|Opened|Closing) + // RIT/ServerCrash handling should take care of the transitioning regions. + if (RegionStateNode.isStateIn(localState, + State.OPEN, State.OPENING, State.CLOSING, State.SPLITTING)) { assert regionLocation != null : "found null region location for " + regionNode; regionStates.addRegionToServer(regionNode); } else if (localState == State.OFFLINE || regionInfo.isOffline()) { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStateNode.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStateNode.java index 81e6f784e3..e84dedeef8 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStateNode.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStateNode.java @@ -147,10 +147,14 @@ public class RegionStateNode implements Comparable { } public boolean isInState(final State... expected) { + return isStateIn(getState(), expected); + } + + public static boolean isStateIn(State state, final State... expected) { if (expected != null && expected.length > 0) { boolean expectedState = false; for (int i = 0; i < expected.length; ++i) { - expectedState |= (getState() == expected[i]); + expectedState |= (state == expected[i]); } return expectedState; } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java index 075e06e029..4c7f4691c8 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java @@ -149,6 +149,9 @@ public class ServerCrashProcedure services.getAssignmentManager().getRegionsOnServer(serverName); // Where to go next? Depends on whether we should split logs at all or // if we should do distributed log splitting. + if (regionsOnCrashedServer != null && !regionsOnCrashedServer.isEmpty()) { + LOG.info("{} had {} regions", serverName, regionsOnCrashedServer.size()); + } if (!this.shouldSplitWal) { setNextState(ServerCrashState.SERVER_CRASH_ASSIGN); } else {