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;
+ }
+
+
}