Author: jdcryans
Date: Tue Jul  7 16:33:41 2009
New Revision: 791901

URL: http://svn.apache.org/viewvc?rev=791901&view=rev
Log:
HBASE-1575  HMaster does not handle ZK session expiration

Modified:
    hadoop/hbase/trunk/CHANGES.txt
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java
    
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java

Modified: hadoop/hbase/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=791901&r1=791900&r2=791901&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Tue Jul  7 16:33:41 2009
@@ -442,6 +442,7 @@
                like new LruBlockCache (Jon Gray via Stack)
    HBASE-1218  Implement in-memory column (Jon Gray via Stack)
    HBASE-1606  Remove zoo.cfg, put config options into hbase-site.xml
+   HBASE-1575  HMaster does not handle ZK session expiration
 
   OPTIMIZATIONS
    HBASE-1412  Change values for delete column and column family in KeyValue

Modified: 
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java?rev=791901&r1=791900&r2=791901&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java 
(original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java Tue 
Jul  7 16:33:41 2009
@@ -90,6 +90,8 @@
 import org.apache.hadoop.util.StringUtils;
 import org.apache.zookeeper.WatchedEvent;
 import org.apache.zookeeper.Watcher;
+import org.apache.zookeeper.Watcher.Event.EventType;
+import org.apache.zookeeper.Watcher.Event.KeeperState;
 
 /**
  * HMaster is the "master server" for a HBase.
@@ -227,11 +229,10 @@
     this.maxRegionOpenTime =
       conf.getLong("hbase.hbasemaster.maxregionopen", 120 * 1000);
     this.leaseTimeout = conf.getInt("hbase.master.lease.period", 120 * 1000);
-    
     this.server = HBaseRPC.getServer(this, address.getBindAddress(),
         address.getPort(), conf.getInt("hbase.regionserver.handler.count", 10),
         false, conf);
-
+         
     //  The rpc-server port can be ephemeral... ensure we have the correct info
     this.address = new HServerAddress(server.getListenerAddress());
 
@@ -248,9 +249,9 @@
     zkMasterAddressWatcher = new ZKMasterAddressWatcher(this);
     serverManager = new ServerManager(this);
     regionManager = new RegionManager(this);
-
+    
     writeAddressToZooKeeper();
-
+    
     // We're almost open for business
     this.closed.set(false);
     LOG.info("HMaster initialized on " + this.address.toString());
@@ -265,6 +266,8 @@
         return;
       } else if(zooKeeperWrapper.writeMasterAddress(address)) {
         zooKeeperWrapper.setClusterState(true);
+        // Watch our own node
+        zooKeeperWrapper.readMasterAddress(this);
         return;
       }
     }
@@ -1090,6 +1093,24 @@
   public ZooKeeperWrapper getZooKeeperWrapper() {
     return zooKeeperWrapper;
   }
+  
+  /**
+   * @see 
org.apache.zookeeper.Watcher#process(org.apache.zookeeper.WatchedEvent)
+   */
+  @Override
+  public void process(WatchedEvent event) {
+    LOG.debug(("Got event " + event.getType() + 
+        " with path " + event.getPath()));
+    // Master should kill itself if its session expired or if its 
+    // znode was deleted manually (usually for testing purposes)
+    if(event.getState() == KeeperState.Expired || 
+        (event.getType().equals(EventType.NodeDeleted) && 
+            event.getPath().equals(
+                this.zooKeeperWrapper.getMasterElectionZNode()))) {
+      LOG.error("Master lost its znode, killing itself now");
+      System.exit(1);
+    }
+  }
    
   /*
    * Main program
@@ -1171,11 +1192,4 @@
     doMain(args, HMaster.class);
   }
 
-  /**
-   * @see 
org.apache.zookeeper.Watcher#process(org.apache.zookeeper.WatchedEvent)
-   */
-  @Override
-  public void process(WatchedEvent event) {
-    // TODO: Write me to handle session expired events.
-  }
 }

Modified: 
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java?rev=791901&r1=791900&r2=791901&view=diff
==============================================================================
--- 
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
 (original)
+++ 
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
 Tue Jul  7 16:33:41 2009
@@ -620,4 +620,14 @@
   private String joinPath(String parent, String child) {
     return parent + ZNODE_PATH_SEPARATOR + child;
   }
+
+  /**
+   * Get the path of the masterElectionZNode
+   * @return the path to masterElectionZNode
+   */
+  public String getMasterElectionZNode() {
+    return masterElectionZNode;
+  }
+  
+  
 }


Reply via email to