You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by nk...@apache.org on 2013/03/07 11:08:57 UTC

svn commit: r1453755 - in /hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase: master/AssignmentManager.java master/HMaster.java regionserver/handler/OpenRegionHandler.java

Author: nkeywal
Date: Thu Mar  7 10:08:57 2013
New Revision: 1453755

URL: http://svn.apache.org/r1453755
Log:
HBASE-8002  Make TimeOut Management for Assignment optional in master and regionservers

Modified:
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.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=1453755&r1=1453754&r2=1453755&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 Thu Mar  7 10:08:57 2013
@@ -39,6 +39,7 @@ import java.util.concurrent.atomic.Atomi
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
+import com.google.common.base.Preconditions;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.classification.InterfaceAudience;
@@ -106,9 +107,9 @@ public class AssignmentManager extends Z
 
   private CatalogTracker catalogTracker;
 
-  final TimeoutMonitor timeoutMonitor;
+  protected final TimeoutMonitor timeoutMonitor;
 
-  private TimerUpdater timerUpdater;
+  private final TimerUpdater timerUpdater;
 
   private LoadBalancer balancer;
 
@@ -141,8 +142,7 @@ public class AssignmentManager extends Z
    * Contains the server which need to update timer, these servers will be
    * handled by {@link TimerUpdater}
    */
-  private final ConcurrentSkipListSet<ServerName> serversInUpdatingTimer =
-    new ConcurrentSkipListSet<ServerName>();
+  private final ConcurrentSkipListSet<ServerName> serversInUpdatingTimer;
 
   private final ExecutorService executorService;
 
@@ -182,6 +182,9 @@ public class AssignmentManager extends Z
    */
   protected final AtomicBoolean failoverCleanupDone = new AtomicBoolean(false);
 
+  /** Is the TimeOutManagement activated **/
+  private final boolean tomActivated;
+
   /**
    * Constructs a new assignment manager.
    *
@@ -204,14 +207,22 @@ public class AssignmentManager extends Z
     this.regionsToReopen = Collections.synchronizedMap
                            (new HashMap<String, HRegionInfo> ());
     Configuration conf = server.getConfiguration();
-    this.timeoutMonitor = new TimeoutMonitor(
-      conf.getInt("hbase.master.assignment.timeoutmonitor.period", 30000),
-      server, serverManager,
-      conf.getInt("hbase.master.assignment.timeoutmonitor.timeout", 600000));
-    this.timerUpdater = new TimerUpdater(conf.getInt(
-      "hbase.master.assignment.timerupdater.period", 10000), server);
-    Threads.setDaemonThreadRunning(timerUpdater.getThread(),
-      server.getServerName() + ".timerUpdater");
+    this.tomActivated = conf.getBoolean("hbase.assignment.timeout.management", false);
+    if (tomActivated){
+      this.serversInUpdatingTimer =  new ConcurrentSkipListSet<ServerName>();
+      this.timeoutMonitor = new TimeoutMonitor(
+        conf.getInt("hbase.master.assignment.timeoutmonitor.period", 30000),
+        server, serverManager,
+        conf.getInt("hbase.master.assignment.timeoutmonitor.timeout", 600000));
+      this.timerUpdater = new TimerUpdater(conf.getInt(
+        "hbase.master.assignment.timerupdater.period", 10000), server);
+      Threads.setDaemonThreadRunning(timerUpdater.getThread(),
+        server.getServerName() + ".timerUpdater");
+    } else {
+      this.serversInUpdatingTimer =  null;
+      this.timeoutMonitor = null;
+      this.timerUpdater = null;
+    }
     this.zkTable = new ZKTable(this.watcher);
     this.maximumAttempts =
       this.server.getConfiguration().getInt("hbase.assignment.maximum.attempts", 10);
@@ -235,8 +246,10 @@ public class AssignmentManager extends Z
   }
 
   void startTimeOutMonitor() {
-    Threads.setDaemonThreadRunning(timeoutMonitor.getThread(), server.getServerName()
-        + ".timeoutMonitor");
+    if (tomActivated) {
+      Threads.setDaemonThreadRunning(timeoutMonitor.getThread(), server.getServerName()
+          + ".timeoutMonitor");
+    }
   }
 
   /**
@@ -1215,7 +1228,9 @@ public class AssignmentManager extends Z
    * @param sn
    */
   private void addToServersInUpdatingTimer(final ServerName sn) {
-    this.serversInUpdatingTimer.add(sn);
+    if (tomActivated){
+      this.serversInUpdatingTimer.add(sn);
+    }
   }
 
   /**
@@ -1232,6 +1247,7 @@ public class AssignmentManager extends Z
    * @param sn
    */
   private void updateTimers(final ServerName sn) {
+    Preconditions.checkState(tomActivated);
     if (sn == null) return;
 
     // This loop could be expensive.
@@ -1619,8 +1635,10 @@ public class AssignmentManager extends Z
       }
       if (plan == null) {
         LOG.warn("Unable to determine a plan to assign " + region);
-        this.timeoutMonitor.setAllRegionServersOffline(true);
-        return; // Should get reassigned later when RIT times out.
+        if (tomActivated){
+          this.timeoutMonitor.setAllRegionServersOffline(true);
+        }
+        return;
       }
       if (setOfflineInZK && versionOfOfflineNode == -1) {
         // get the version of the znode after setting it to OFFLINE.
@@ -1752,7 +1770,9 @@ public class AssignmentManager extends Z
         RegionPlan newPlan = getRegionPlan(region, true);
 
         if (newPlan == null) {
-          this.timeoutMonitor.setAllRegionServersOffline(true);
+          if (tomActivated) {
+            this.timeoutMonitor.setAllRegionServersOffline(true);
+          }
           LOG.warn("Unable to find a viable location to assign region " +
               region.getRegionNameAsString());
           return;
@@ -2557,6 +2577,7 @@ public class AssignmentManager extends Z
 
     @Override
     protected void chore() {
+      Preconditions.checkState(tomActivated);
       ServerName serverToUpdateTimer = null;
       while (!serversInUpdatingTimer.isEmpty() && !stopper.isStopped()) {
         if (serverToUpdateTimer == null) {
@@ -2606,6 +2627,7 @@ public class AssignmentManager extends Z
 
     @Override
     protected void chore() {
+      Preconditions.checkState(tomActivated);
       boolean noRSAvailable = this.serverManager.createDestinationServersList().isEmpty();
 
       // Iterate all regions in transition checking for time outs
@@ -2861,8 +2883,10 @@ public class AssignmentManager extends Z
   }
 
   public void stop() {
-    this.timeoutMonitor.interrupt();
-    this.timerUpdater.interrupt();
+    if (tomActivated){
+      this.timeoutMonitor.interrupt();
+      this.timerUpdater.interrupt();
+    }
   }
 
   /**

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1453755&r1=1453754&r2=1453755&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Thu Mar  7 10:08:57 2013
@@ -343,6 +343,7 @@ Server {
   /** The health check chore. */
   private HealthCheckChore healthCheckChore;
 
+
   /**
    * Initializes the HMaster. The steps are as follows:
    * <p>

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java?rev=1453755&r1=1453754&r2=1453755&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java Thu Mar  7 10:08:57 2013
@@ -235,6 +235,8 @@ public class OpenRegionHandler extends E
     PostOpenDeployTasksThread t = new PostOpenDeployTasksThread(r,
       this.server, this.rsServices, signaller);
     t.start();
+    boolean tomActivated = this.server.getConfiguration().
+        getBoolean("hbase.assignment.timeout.management", false);
     int assignmentTimeout = this.server.getConfiguration().
       getInt("hbase.master.assignment.timeoutmonitor.period", 10000);
     // Total timeout for meta edit.  If we fail adding the edit then close out
@@ -249,11 +251,13 @@ public class OpenRegionHandler extends E
     boolean tickleOpening = true;
     while (!signaller.get() && t.isAlive() && !this.server.isStopped() &&
         !this.rsServices.isStopping() && (endTime > now)) {
-      long elapsed = now - lastUpdate;
-      if (elapsed > period) {
-        // Only tickle OPENING if postOpenDeployTasks is taking some time.
-        lastUpdate = now;
-        tickleOpening = tickleOpening("post_open_deploy");
+      if (tomActivated) {
+        long elapsed = now - lastUpdate;
+        if (elapsed > period) {
+          // Only tickle OPENING if postOpenDeployTasks is taking some time.
+          lastUpdate = now;
+          tickleOpening = tickleOpening("post_open_deploy");
+        }
       }
       synchronized (signaller) {
         try {