You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ra...@apache.org on 2013/06/22 13:38:10 UTC

svn commit: r1495705 - /hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java

Author: ramkrishna
Date: Sat Jun 22 11:38:09 2013
New Revision: 1495705

URL: http://svn.apache.org/r1495705
Log:
HBASE-8705-RS holding META when restarted in a single node setup may hang infinitely without META assignment (Ram)


Modified:
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java?rev=1495705&r1=1495704&r2=1495705&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java Sat Jun 22 11:38:09 2013
@@ -134,6 +134,12 @@ public class AssignmentManager extends Z
    * See below in {@link #assign()} and {@link #unassign()}.
    */
   private final int maximumAttempts;
+  
+  /**
+   * The sleep time for which the assignment will wait before retrying in case of META assignment
+   * failure due to lack of availability of region plan
+   */
+  private final long sleepTimeBeforeRetryingMetaAssignment;
 
   /** Plans for region movement. Key is the encoded version of a region name*/
   // TODO: When do plans get cleaned out?  Ever? In server open and in server
@@ -246,6 +252,8 @@ public class AssignmentManager extends Z
     this.zkTable = new ZKTable(this.watcher);
     this.maximumAttempts =
       this.server.getConfiguration().getInt("hbase.assignment.maximum.attempts", 10);
+    this.sleepTimeBeforeRetryingMetaAssignment = this.server.getConfiguration().getLong(
+        "hbase.meta.assignment.retry.sleeptime", 1000l);
     this.balancer = balancer;
     int maxThreads = conf.getInt("hbase.assignment.threads.max", 30);
     this.threadPoolExecutorService = Threads.getBoundedCachedThreadPool(
@@ -1769,6 +1777,19 @@ public class AssignmentManager extends Z
         if (tomActivated){
           this.timeoutMonitor.setAllRegionServersOffline(true);
         } else {
+          if (region.isMetaRegion()) {
+            try {
+              if (i != maximumAttempts) {
+                Thread.sleep(this.sleepTimeBeforeRetryingMetaAssignment);
+                continue;
+              }
+              // TODO : Ensure HBCK fixes this
+              LOG.error("Unable to determine a plan to assign META even after repeated attempts. Run HBCK to fix this");
+            } catch (InterruptedException e) {
+              LOG.error("Got exception while waiting for META assignment");
+              Thread.currentThread().interrupt();
+            }
+          }
           regionStates.updateRegionState(region, RegionState.State.FAILED_OPEN);
         }
         return;