You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2012/04/10 20:29:32 UTC

svn commit: r1311910 - in /hbase/trunk/src/main/java/org/apache/hadoop/hbase: regionserver/HRegionServer.java zookeeper/MasterAddressTracker.java

Author: stack
Date: Tue Apr 10 18:29:31 2012
New Revision: 1311910

URL: http://svn.apache.org/viewvc?rev=1311910&view=rev
Log:
HBASE-5755 Region sever looking for master forever with cached stale data

Modified:
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=1311910&r1=1311909&r2=1311910&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Tue Apr 10 18:29:31 2012
@@ -1774,8 +1774,9 @@ public class HRegionServer implements HR
     ServerName masterServerName = null;
     long previousLogTime = 0;
     HMasterRegionInterface master = null;
+    boolean refresh = false; // for the first time, use cached data
     while (keepLooping() && master == null) {
-      masterServerName = this.masterAddressManager.getMasterAddress();
+      masterServerName = this.masterAddressManager.getMasterAddress(refresh);
       if (masterServerName == null) {
         if (!keepLooping()) {
           // give up with no connection.
@@ -1784,6 +1785,7 @@ public class HRegionServer implements HR
         }
         LOG.debug("No master found; retry");
         previousLogTime = System.currentTimeMillis();
+        refresh = true; // let's try pull it from ZK directly
 
         sleeper.sleep();
         continue;

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java?rev=1311910&r1=1311909&r2=1311910&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java Tue Apr 10 18:29:31 2012
@@ -68,7 +68,19 @@ public class MasterAddressTracker extend
    * @return Server name or null if timed out.
    */
   public ServerName getMasterAddress() {
-    return ZKUtil.znodeContentToServerName(super.getData(false));
+    return getMasterAddress(false);
+  }
+
+  /**
+   * Get the address of the current master if one is available.  Returns null
+   * if no current master. If refresh is set, try to load the data from ZK again,
+   * otherwise, cached data will be used.
+   *
+   * @param refresh whether to refresh the data by calling ZK directly.
+   * @return Server name or null if timed out.
+   */
+  public ServerName getMasterAddress(final boolean refresh) {
+    return ZKUtil.znodeContentToServerName(super.getData(refresh));
   }
 
   /**