You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mb...@apache.org on 2012/08/28 22:55:19 UTC

svn commit: r1378332 - in /hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase: master/RegionManager.java zookeeper/LegacyRootZNodeUpdater.java

Author: mbautin
Date: Tue Aug 28 20:55:18 2012
New Revision: 1378332

URL: http://svn.apache.org/viewvc?rev=1378332&view=rev
Log:
[master] [89-fb] HMaster shouldn't read /hbase/root-region-server-complete every second

Author: avf

Summary:
After the new master failover design, LegacyRootZNodeUpdater in
HMaster would read /hbase/root-region-server-complete every
second. This is not necessary, as the only place where it is updated
is in RegionManager: simply reading it once at start and then waking
the LegacyRootZNodeUpdater thread up only if RegionManager updates
/hbase/root-region-server-complete should suffice.

Test Plan:
Unit test, test master failover

Revert Plan:

Reviewers: kannan, kranganathan, mbautin, pkhemani

Reviewed By: kannan

CC: hbase-eng@, aaiyer

Differential Revision: https://phabricator.fb.com/D549793

Task ID: 1383655

Modified:
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/LegacyRootZNodeUpdater.java

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java?rev=1378332&r1=1378331&r2=1378332&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java Tue Aug 28 20:55:18 2012
@@ -69,7 +69,7 @@ import org.apache.hadoop.io.Text;
 public class RegionManager {
   protected static final Log LOG = LogFactory.getLog(RegionManager.class);
 
-  private AtomicReference<HServerInfo> rootRegionLocation =
+  private final AtomicReference<HServerInfo> rootRegionLocation =
     new AtomicReference<HServerInfo>(null);
 
   private final RootScanner rootScannerThread;
@@ -226,7 +226,10 @@ public class RegionManager {
 
   void unsetRootRegion() {
     synchronized (regionsInTransition) {
-      rootRegionLocation.set(null);
+      synchronized (rootRegionLocation) {
+        rootRegionLocation.set(null);        
+        rootRegionLocation.notifyAll();
+      }
       regionsInTransition.remove(
           HRegionInfo.ROOT_REGIONINFO.getRegionNameAsString());
       LOG.info("-ROOT- region unset (but not set to be reassigned)");

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/LegacyRootZNodeUpdater.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/LegacyRootZNodeUpdater.java?rev=1378332&r1=1378331&r2=1378332&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/LegacyRootZNodeUpdater.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/LegacyRootZNodeUpdater.java Tue Aug 28 20:55:18 2012
@@ -20,22 +20,24 @@ import org.apache.hadoop.hbase.HServerIn
 import org.apache.hadoop.hbase.StopStatus;
 import org.apache.hadoop.hbase.util.HasThread;
 
+import java.util.concurrent.atomic.AtomicReference;
+
 /**
- * A background thread that wakes up frequently and writes the legacy root region location znode
- * (host:port only, no server start code).
+ * A background thread that wakes up frequently and writes the legacy root 
+ * region location znode (host:port only, no server start code).
  */
 public class LegacyRootZNodeUpdater extends HasThread {
 
   private static final int WAIT_MS = 1000;
-
+  
   private ZooKeeperWrapper zkw;
   private StopStatus stopped;
-  private Object waitOn;
+  private final AtomicReference<HServerInfo> rootRegionServerInfo;
 
   public LegacyRootZNodeUpdater(ZooKeeperWrapper zkw, StopStatus stopped,
-      Object waitOn) {
+      AtomicReference<HServerInfo> rootRegionServerInfo) {
     this.zkw = zkw;
-    this.waitOn = waitOn;
+    this.rootRegionServerInfo = rootRegionServerInfo;
     this.stopped = stopped;
   }
 
@@ -44,8 +46,8 @@ public class LegacyRootZNodeUpdater exte
     Thread.currentThread().setName(LegacyRootZNodeUpdater.class.getName());
     HServerInfo prevRootLocation = null;
     boolean firstUpdate = true;
-    while (!stopped.isStopped()) {
-      HServerInfo rootLocation = zkw.readRootRegionServerInfo();
+    while (!stopped.isStopped()) { 
+      HServerInfo rootLocation = rootRegionServerInfo.get();
       if (firstUpdate ||
           (prevRootLocation != rootLocation &&  // check that they are not both null
            (rootLocation == null ||  // this means prevRootLocation != null, so they are different
@@ -53,11 +55,11 @@ public class LegacyRootZNodeUpdater exte
         zkw.writeLegacyRootRegionLocation(rootLocation);
         prevRootLocation = rootLocation;
       }
-      try {
-        synchronized (waitOn) {
-          waitOn.wait(WAIT_MS);
-        }
-      } catch (InterruptedException ex) {
+        try {
+          synchronized (rootRegionServerInfo) {
+            rootRegionServerInfo.wait(WAIT_MS);
+          }
+        } catch (InterruptedException ex) {
         // Ignore. We will only stop if the master is shutting down.
       }
       firstUpdate = false;