Index: src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (revision 1082341) +++ src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (working copy) @@ -35,6 +35,7 @@ import java.util.TreeMap; import java.util.TreeSet; import java.util.concurrent.ConcurrentSkipListMap; +import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.atomic.AtomicInteger; import org.apache.commons.logging.Log; @@ -1730,6 +1722,7 @@ protected void chore() { // If bulkAssign in progress, suspend checks if (this.bulkAssign) return; + ConcurrentLinkedQueue hriPendingClose = new ConcurrentLinkedQueue(); synchronized (regionsInTransition) { // Iterate all regions in transition checking for time outs long now = System.currentTimeMillis(); @@ -1819,7 +1812,7 @@ if (!ZKUtil.watchAndCheckExists(watcher, ZKAssign.getNodeName(watcher, regionInfo.getEncodedName()))) { - unassign(regionInfo, true); + hriPendingClose.add(regionInfo); } } catch (NoNodeException e) { LOG.debug("Node no longer existed so not forcing another " + @@ -1838,6 +1831,12 @@ } } } + // finish the work for regions in PENDING_CLOSE state + if (hriPendingClose.size() > 0) { + for (HRegionInfo hri : hriPendingClose) { + unassign(hri, true); + } + } } }