Index: src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (revision 1354329) +++ src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (working copy) @@ -412,6 +412,13 @@ nodes.removeAll(regionsInTransition.keySet()); } + // If some dead servers are processed by ServerShutdownHandler, we shouldn't + // assign all user regions( some would be assigned by + // ServerShutdownHandler), consider it as a failover + if (!this.serverManager.getDeadServers().isEmpty()) { + this.failover = true; + } + // If we found user regions out on cluster, its a failover. if (this.failover) { LOG.info("Found regions out on cluster or in RIT; failover"); @@ -2671,6 +2678,9 @@ // skip regions of dead servers because SSH will process regions during rs expiration. // see HBASE-5916 if (actualDeadServers.contains(deadServer.getKey())) { + for (Pair deadRegion : deadServer.getValue()) { + nodes.remove(deadRegion.getFirst().getEncodedName()); + } continue; } List> regions = deadServer.getValue();