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 7ac3d58..8554741 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 @@ -168,7 +168,7 @@ public class AssignmentManager extends ZooKeeperListener { /** * The sleep time for which the assignment will wait before retrying in case of hbase:meta assignment - * failure due to lack of availability of region plan + * failure due to lack of availability of region plan or bad region plan */ private final long sleepTimeBeforeRetryingMetaAssignment; @@ -2005,16 +2005,14 @@ public class AssignmentManager extends ZooKeeperListener { } if (plan == null) { LOG.warn("Unable to determine a plan to assign " + region); + + // For meta region, we have to keep retrying until succeeding if (region.isMetaRegion()) { - try { - Thread.sleep(this.sleepTimeBeforeRetryingMetaAssignment); - if (i == maximumAttempts) i = 1; - continue; - } catch (InterruptedException e) { - LOG.error("Got exception while waiting for hbase:meta assignment"); - Thread.currentThread().interrupt(); - } + i = 0; // re-set attempt count to 0 for at least 1 retry + waitingForRetryingMetaAssignment(); + continue; } + regionStates.updateRegionState(region, State.FAILED_OPEN); return; } @@ -2148,9 +2146,16 @@ public class AssignmentManager extends ZooKeeperListener { } if (i == this.maximumAttempts) { - // Don't reset the region state or get a new plan any more. - // This is the last try. - continue; + // For meta region, we have to keep retrying until succeeding + if (region.isMetaRegion()) { + i = 0; // re-set attempt count to 0 for at least 1 retry + waitingForRetryingMetaAssignment(); + } + else { + // Don't reset the region state or get a new plan any more. + // This is the last try. + continue; + } } // If region opened on destination of present plan, reassigning to new @@ -2229,6 +2234,18 @@ public class AssignmentManager extends ZooKeeperListener { } /** + * Wait for some time before retrying meta table region assignment + */ + private void waitingForRetryingMetaAssignment() { + try { + Thread.sleep(this.sleepTimeBeforeRetryingMetaAssignment); + } catch (InterruptedException e) { + LOG.error("Got exception while waiting for hbase:meta assignment"); + Thread.currentThread().interrupt(); + } + } + + /** * Set region as OFFLINED up in zookeeper * * @param state