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 54cb1cadc0e..0b23f47eada 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 @@ -480,6 +480,15 @@ public class AssignmentManager implements ServerListener { synchronized (checkIfShouldMoveSystemRegionLock) { List plans = new ArrayList<>(); for (ServerName server : getExcludedServersForSystemTable()) { + if (master.getServerManager().isServerDead(server)) { + // TODO: See HBASE-18494 and HBASE-18495. Though getExcludedServersForSystemTable() + // considers only online servers, the server could be queued for dead server + // processing. As region assignments for crashed server is handled by + // ServerCrashProcedure, do NOT handle them here. The goal is to handle this through + // regular flow of LoadBalancer as a favored node and not to have this special + // handling. + continue; + } List regionsShouldMove = getCarryingSystemTables(server); if (!regionsShouldMove.isEmpty()) { for (HRegionInfo regionInfo : regionsShouldMove) {