diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java index 4a1e71f..cbe054d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java @@ -1354,7 +1354,7 @@ public class AssignmentManager { public boolean waitForAssignment(HRegionInfo regionInfo) throws InterruptedException { while (!regionStates.isRegionOnline(regionInfo)) { - if (regionStates.isRegionInState(regionInfo, State.FAILED_OPEN) + if (regionStates.isRegionInState(regionInfo, State.FAILED_OPEN, State.SPLIT, State.MERGED) || this.server.isStopped()) { return false; } @@ -1453,6 +1453,7 @@ public class AssignmentManager { LOG.trace("Not using bulk assignment since we are assigning only " + regions + " region(s) to " + servers + " server(s)"); } + // invoke assignment (async) for (Map.Entry> plan: bulkPlan.entrySet()) { if (!assign(plan.getKey(), plan.getValue()) && !server.isStopped()) { for (HRegionInfo region: plan.getValue()) { @@ -1462,6 +1463,14 @@ public class AssignmentManager { } } } + // wait for assignment completion + for (Map.Entry> plan: bulkPlan.entrySet()) { + for (HRegionInfo region: plan.getValue()) { + if (!region.getTable().isSystemTable()) { + waitForAssignment(region); + } + } + } } else { LOG.info("Bulk assigning " + regions + " region(s) across " + totalServers + " server(s), " + message);