You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jd...@apache.org on 2009/01/31 22:05:35 UTC
svn commit: r739612 - in /hadoop/hbase/trunk: ./
src/java/org/apache/hadoop/hbase/ src/java/org/apache/hadoop/hbase/master/
src/java/org/apache/hadoop/hbase/regionserver/
src/java/org/apache/hadoop/hbase/zookeeper/
src/test/org/apache/hadoop/hbase/ src...
Author: jdcryans
Date: Sat Jan 31 21:05:35 2009
New Revision: 739612
URL: http://svn.apache.org/viewvc?rev=739612&view=rev
Log:
HBASE-1146 Replace the HRS leases with Zookeeper
Modified:
hadoop/hbase/trunk/CHANGES.txt
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HConstants.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/TestHBaseCluster.java
hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/filter/TestRowFilterAfterWrite.java
hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestLogRolling.java
Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=739612&r1=739611&r2=739612&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Sat Jan 31 21:05:35 2009
@@ -4,6 +4,7 @@
HBASE-1147 Modify the scripts to use Zookeeper
HBASE-1144 Store the ROOT region location in Zookeeper
(Nitay Joffe via Stack)
+ HBASE-1146 Replace the HRS leases with Zookeeper
BUG FIXES
HBASE-1140 "ant clean test" fails (Nitay Joffe via Stack)
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HConstants.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HConstants.java?rev=739612&r1=739611&r2=739612&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HConstants.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HConstants.java Sat Jan 31 21:05:35 2009
@@ -110,6 +110,11 @@
static final String ZOOKEEPER_SAFE_MODE_ZNODE = "zookeeper.znode.safemode";
/** Default ZooKeeper ZNode storing safe mode. */
static final String DEFAULT_ZOOKEEPER_SAFE_MODE_ZNODE = "safe-mode";
+
+ /** Parameter name for ZooKeeper ZNode storing safe mode. */
+ static final String ZOOKEEPER_RS_ZNODE = "zookeeper.znode.rs";
+ /** Default ZooKeeper ZNode storing safe mode. */
+ static final String DEFAULT_ZOOKEEPER_RS_ZNODE = "rs";
/** Parameter name for hbase.regionserver address. */
static final String REGIONSERVER_ADDRESS = "hbase.regionserver";
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=739612&r1=739611&r2=739612&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 Sat Jan 31 21:05:35 2009
@@ -73,6 +73,7 @@
import org.apache.hadoop.hbase.util.Pair;
import org.apache.hadoop.hbase.util.Sleeper;
import org.apache.hadoop.hbase.util.Writables;
+import org.apache.hadoop.hbase.zookeeper.ZooKeeperWrapper;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.protocol.FSConstants;
import org.apache.hadoop.io.MapWritable;
@@ -114,6 +115,7 @@
final int numRetries;
final long maxRegionOpenTime;
final int leaseTimeout;
+ private final ZooKeeperWrapper zooKeeperWrapper;
volatile DelayQueue<RegionServerOperation> delayedToDoQueue =
new DelayQueue<RegionServerOperation>();
@@ -239,7 +241,8 @@
conf.getInt("hbase.master.meta.thread.rescanfrequency", 60 * 1000);
this.sleeper = new Sleeper(this.threadWakeFrequency, this.closed);
-
+
+ zooKeeperWrapper = new ZooKeeperWrapper(conf);
serverManager = new ServerManager(this);
regionManager = new RegionManager(this);
@@ -396,7 +399,6 @@
}
}
server.stop(); // Stop server
- serverManager.stop();
regionManager.stop();
// Join up with all threads
@@ -498,7 +500,6 @@
this.metrics = new MasterMetrics();
try {
regionManager.start();
- serverManager.start();
// Put up info server.
int port = this.conf.getInt("hbase.master.info.port", 60010);
if (port >= 0) {
@@ -926,6 +927,14 @@
}
}
}
+
+ /**
+ * Get the ZK wrapper object
+ * @return
+ */
+ public ZooKeeperWrapper getZooKeeperWrapper() {
+ return zooKeeperWrapper;
+ }
/*
* Main program
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java?rev=739612&r1=739611&r2=739612&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java Sat Jan 31 21:05:35 2009
@@ -146,7 +146,7 @@
// Scans the meta table
metaScannerThread = new MetaScanner(master);
- zooKeeperWrapper = new ZooKeeperWrapper(conf);
+ zooKeeperWrapper = master.getZooKeeperWrapper();
zooKeeperNumRetries = conf.getInt(ZOOKEEPER_RETRIES, DEFAULT_ZOOKEEPER_RETRIES);
zooKeeperPause = conf.getInt(ZOOKEEPER_PAUSE, DEFAULT_ZOOKEEPER_PAUSE);
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java?rev=739612&r1=739611&r2=739612&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java Sat Jan 31 21:05:35 2009
@@ -39,12 +39,13 @@
import org.apache.hadoop.hbase.HServerAddress;
import org.apache.hadoop.hbase.HMsg;
import org.apache.hadoop.hbase.HRegionInfo;
-import org.apache.hadoop.hbase.LeaseException;
-import org.apache.hadoop.hbase.Leases;
-import org.apache.hadoop.hbase.LeaseListener;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HRegionLocation;
import org.apache.hadoop.hbase.HMsg.Type;
+import org.apache.hadoop.hbase.zookeeper.ZooKeeperWrapper;
+import org.apache.zookeeper.WatchedEvent;
+import org.apache.zookeeper.Watcher;
+import org.apache.zookeeper.Watcher.Event.EventType;
/**
* The ServerManager class manages info about region servers - HServerInfo,
@@ -62,13 +63,14 @@
private static final HMsg [] EMPTY_HMSG_ARRAY = new HMsg[0];
private final AtomicInteger quiescedServers = new AtomicInteger(0);
+ private final ZooKeeperWrapper zooKeeperWrapper;
/** The map of known server names to server info */
final Map<String, HServerInfo> serversToServerInfo =
new ConcurrentHashMap<String, HServerInfo>();
/**
- * Set of known dead servers. On lease expiration, servers are added here.
+ * Set of known dead servers. On znode expiration, servers are added here.
* Boolean holds whether its logs have been split or not. Initially set to
* false.
*/
@@ -84,7 +86,6 @@
new ConcurrentHashMap<String, HServerLoad>();
private HMaster master;
- private final Leases serverLeases;
// Last time we logged average load.
private volatile long lastLogOfAverageLaod = 0;
@@ -100,9 +101,7 @@
*/
public ServerManager(HMaster master) {
this.master = master;
- serverLeases = new Leases(master.leaseTimeout,
- master.getConfiguration().getInt("hbase.master.lease.thread.wakefrequency",
- 15 * 1000));
+ zooKeeperWrapper = master.getZooKeeperWrapper();
this.loggingPeriodForAverageLoad = master.getConfiguration().
getLong("hbase.master.avgload.logging.period", 60000);
this.nobalancingCount = master.getConfiguration().
@@ -111,8 +110,7 @@
/**
* Look to see if we have ghost references to this regionserver such as
- * still-existing leases or if regionserver is on the dead servers list
- * getting its logs processed.
+ * if regionserver is on the dead servers list getting its logs processed.
* @param serverInfo
* @return True if still ghost references and we have not been able to clear
* them or the server is shutting down.
@@ -120,7 +118,6 @@
private boolean checkForGhostReferences(final HServerInfo serverInfo) {
String s = serverInfo.getServerAddress().toString().trim();
boolean result = false;
- boolean lease = false;
for (long sleepTime = -1; !master.closed.get() && !result;) {
if (sleepTime != -1) {
try {
@@ -129,28 +126,12 @@
// Continue
}
}
- if (!lease) {
- try {
- this.serverLeases.createLease(s, new ServerExpirer(s));
- } catch (Leases.LeaseStillHeldException e) {
- LOG.debug("Waiting on current lease to expire for " + e.getName());
- sleepTime = this.master.leaseTimeout / 4;
- continue;
- }
- lease = true;
- }
// May be on list of dead servers. If so, wait till we've cleared it.
String addr = serverInfo.getServerAddress().toString();
if (isDead(addr)) {
LOG.debug("Waiting on " + addr + " removal from dead list before " +
"processing report-for-duty request");
sleepTime = this.master.threadWakeFrequency;
- try {
- // Keep up lease. May be here > lease expiration.
- this.serverLeases.renewLease(s);
- } catch (LeaseException e) {
- LOG.warn("Failed renewal. Retrying.", e);
- }
continue;
}
result = true;
@@ -164,6 +145,10 @@
*/
public void regionServerStartup(final HServerInfo serverInfo) {
String s = serverInfo.getServerAddress().toString().trim();
+ Watcher watcher = new ServerExpirer(serverInfo.getServerAddress()
+ .toString().trim());
+ zooKeeperWrapper.updateRSLocationGetWatch(serverInfo, watcher);
+
LOG.info("Received start message from: " + s);
if (!checkForGhostReferences(serverInfo)) {
return;
@@ -291,7 +276,7 @@
}
synchronized (serversToServerInfo) {
- cancelLease(serverName);
+ removeServerInfo(serverName);
serversToServerInfo.notifyAll();
}
@@ -306,14 +291,11 @@
private void processRegionServerExit(String serverName, HMsg[] msgs) {
synchronized (serversToServerInfo) {
try {
- // HRegionServer is shutting down. Cancel the server's lease.
- // Note that canceling the server's lease takes care of updating
- // serversToServerInfo, etc.
- if (cancelLease(serverName)) {
- // Only process the exit message if the server still has a lease.
+ // HRegionServer is shutting down.
+ if (removeServerInfo(serverName)) {
+ // Only process the exit message if the server still has registered info.
// Otherwise we could end up processing the server exit twice.
- LOG.info("Region server " + serverName +
- ": MSG_REPORT_EXITING -- lease cancelled");
+ LOG.info("Region server " + serverName + ": MSG_REPORT_EXITING");
// Get all the regions the server was serving reassigned
// (if we are not shutting down).
if (!master.closed.get()) {
@@ -357,10 +339,6 @@
private HMsg[] processRegionServerAllsWell(String serverName,
HServerInfo serverInfo, HRegionInfo[] mostLoadedRegions, HMsg[] msgs)
throws IOException {
- // All's well. Renew the server's lease.
- // This will always succeed; otherwise, the fetch of serversToServerInfo
- // would have failed above.
- serverLeases.renewLease(serverName);
// Refresh the info object and the load information
serversToServerInfo.put(serverName, serverInfo);
@@ -608,27 +586,19 @@
}
}
- /** Cancel a server's lease and update its load information */
- private boolean cancelLease(final String serverName) {
- boolean leaseCancelled = false;
+ /** Update a server load information because it's shutting down*/
+ private boolean removeServerInfo(final String serverName) {
+ boolean infoUpdated = false;
HServerInfo info = serversToServerInfo.remove(serverName);
- // Only cancel lease and update load information once.
+ // Only update load information once.
// This method can be called a couple of times during shutdown.
if (info != null) {
- LOG.info("Cancelling lease for " + serverName);
+ LOG.info("Removing server's info " + serverName);
if (master.getRootRegionLocation() != null &&
info.getServerAddress().equals(master.getRootRegionLocation())) {
master.regionManager.unsetRootRegion();
}
- try {
- serverLeases.cancelLease(serverName);
- } catch (LeaseException e) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Cancelling " + serverName + " got " + e.getMessage() +
- "...continuing");
- }
- }
- leaseCancelled = true;
+ infoUpdated = true;
// update load information
HServerLoad load = serversToLoad.remove(serverName);
@@ -642,7 +612,7 @@
}
}
}
- return leaseCancelled;
+ return infoUpdated;
}
/**
@@ -726,8 +696,7 @@
* Wait on regionservers to report in
* with {@link #regionServerReport(HServerInfo, HMsg[])} so they get notice
* the master is going down. Waits until all region servers come back with
- * a MSG_REGIONSERVER_STOP which will cancel their lease or until leases held
- * by remote region servers have expired.
+ * a MSG_REGIONSERVER_STOP.
*/
void letRegionServersShutdown() {
if (!master.fsOk) {
@@ -737,8 +706,7 @@
}
synchronized (serversToServerInfo) {
while (serversToServerInfo.size() > 0) {
- LOG.info("Waiting on following regionserver(s) to go down (or " +
- "region server lease expiration, whichever happens first): " +
+ LOG.info("Waiting on following regionserver(s) to go down " +
serversToServerInfo.values());
try {
serversToServerInfo.wait(master.threadWakeFrequency);
@@ -749,65 +717,55 @@
}
}
- /** Instantiated to monitor the health of a region server */
- private class ServerExpirer implements LeaseListener {
+ /** Watcher triggered when a RS znode is deleted */
+ private class ServerExpirer implements Watcher {
private String server;
ServerExpirer(String server) {
this.server = server;
}
- public void leaseExpired() {
- LOG.info(server + " lease expired");
- // Remove the server from the known servers list and update load info
- HServerInfo info = serversToServerInfo.remove(server);
- boolean rootServer = false;
- if (info != null) {
- HServerAddress root = master.getRootRegionLocation();
- if (root != null && root.equals(info.getServerAddress())) {
- // NOTE: If the server was serving the root region, we cannot reassign
- // it here because the new server will start serving the root region
- // before ProcessServerShutdown has a chance to split the log file.
- master.regionManager.unsetRootRegion();
- rootServer = true;
- }
- String serverName = info.getServerAddress().toString();
- HServerLoad load = serversToLoad.remove(serverName);
- if (load != null) {
- synchronized (loadToServers) {
- Set<String> servers = loadToServers.get(load);
- if (servers != null) {
- servers.remove(serverName);
- loadToServers.put(load, servers);
+ public void process(WatchedEvent event) {
+ if(event.getType().equals(EventType.NodeDeleted)) {
+ LOG.info(server + " znode expired");
+ // Remove the server from the known servers list and update load info
+ HServerInfo info = serversToServerInfo.remove(server);
+ boolean rootServer = false;
+ if (info != null) {
+ HServerAddress root = master.getRootRegionLocation();
+ if (root != null && root.equals(info.getServerAddress())) {
+ // NOTE: If the server was serving the root region, we cannot
+ // reassign
+ // it here because the new server will start serving the root region
+ // before ProcessServerShutdown has a chance to split the log file.
+ master.regionManager.unsetRootRegion();
+ rootServer = true;
+ }
+ String serverName = info.getServerAddress().toString();
+ HServerLoad load = serversToLoad.remove(serverName);
+ if (load != null) {
+ synchronized (loadToServers) {
+ Set<String> servers = loadToServers.get(load);
+ if (servers != null) {
+ servers.remove(serverName);
+ loadToServers.put(load, servers);
+ }
}
}
+ deadServers.put(server, Boolean.FALSE);
+ try {
+ master.toDoQueue.put(new ProcessServerShutdown(master, info,
+ rootServer));
+ } catch (InterruptedException e) {
+ LOG.error("insert into toDoQueue was interrupted", e);
+ }
}
- deadServers.put(server, Boolean.FALSE);
- try {
- master.toDoQueue.put(
- new ProcessServerShutdown(master, info, rootServer));
- } catch (InterruptedException e) {
- LOG.error("insert into toDoQueue was interrupted", e);
+ synchronized (serversToServerInfo) {
+ serversToServerInfo.notifyAll();
}
}
- synchronized (serversToServerInfo) {
- serversToServerInfo.notifyAll();
- }
}
}
-
- /** Start up the server manager */
- public void start() {
- // Leases are not the same as Chore threads. Set name differently.
- this.serverLeases.setName("ServerManager.leaseChecker");
- this.serverLeases.start();
- }
-
- /** Shut down the server manager */
- public void stop() {
- // stop monitor lease monitor
- serverLeases.close();
- }
/**
* @param serverName
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=739612&r1=739611&r2=739612&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Sat Jan 31 21:05:35 2009
@@ -284,6 +284,16 @@
throw new NullPointerException("Server address cannot be null; " +
"hbase-958 debugging");
}
+ this.zooKeeperWrapper = new ZooKeeperWrapper(conf);
+ boolean startCodeOk = false;
+ while(!startCodeOk) {
+ serverInfo.setStartCode(System.currentTimeMillis());
+ startCodeOk = zooKeeperWrapper.writeRSLocation(serverInfo);
+ if(!startCodeOk) {
+ LOG.debug("Start code already taken, trying another one");
+ }
+ }
+
this.numRegionsToReport =
conf.getInt("hbase.regionserver.numregionstoreport", 10);
@@ -295,8 +305,7 @@
for(int i = 0; i < nbBlocks; i++) {
reservedSpace.add(new byte[DEFAULT_SIZE_RESERVATION_BLOCK]);
}
-
- this.zooKeeperWrapper = new ZooKeeperWrapper(conf);
+
}
/**
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=739612&r1=739611&r2=739612&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 Sat Jan 31 21:05:35 2009
@@ -31,6 +31,7 @@
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HServerAddress;
+import org.apache.hadoop.hbase.HServerInfo;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
@@ -64,6 +65,7 @@
private final String parentZNode;
private final String rootRegionZNode;
private final String outOfSafeModeZNode;
+ private final String rsZNode;
/**
* Create a ZooKeeperWrapper.
@@ -103,20 +105,14 @@
String rootServerZNodeName = conf.get(ZOOKEEPER_ROOT_SERVER_ZNODE,
DEFAULT_ZOOKEEPER_ROOT_SERVER_ZNODE);
- if (rootServerZNodeName.startsWith(ZNODE_PATH_SEPARATOR)) {
- rootRegionZNode = rootServerZNodeName;
- } else {
- rootRegionZNode = parentZNode + ZNODE_PATH_SEPARATOR + rootServerZNodeName;
- }
-
String outOfSafeModeZNodeName = conf.get(ZOOKEEPER_SAFE_MODE_ZNODE,
- DEFAULT_ZOOKEEPER_SAFE_MODE_ZNODE);
- if (outOfSafeModeZNodeName.startsWith(ZNODE_PATH_SEPARATOR)) {
- outOfSafeModeZNode = outOfSafeModeZNodeName;
- } else {
- outOfSafeModeZNode = parentZNode + ZNODE_PATH_SEPARATOR +
- outOfSafeModeZNodeName;
- }
+ DEFAULT_ZOOKEEPER_SAFE_MODE_ZNODE);
+ String rsZNodeName = conf.get(ZOOKEEPER_RS_ZNODE,
+ DEFAULT_ZOOKEEPER_RS_ZNODE);
+
+ rootRegionZNode = getZNode(rootServerZNodeName);
+ outOfSafeModeZNode = getZNode(outOfSafeModeZNodeName);
+ rsZNode = getZNode(rsZNodeName);
}
/**
@@ -218,11 +214,11 @@
return address;
}
- private boolean ensureParentZNodeExists() {
+ private boolean ensureZNodeExists(String path) {
try {
- zooKeeper.create(parentZNode, new byte[0],
+ zooKeeper.create(path, new byte[0],
Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
- LOG.debug("Created ZNode " + parentZNode);
+ LOG.debug("Created ZNode " + path);
return true;
} catch (KeeperException.NodeExistsException e) {
return true; // ok, move on.
@@ -240,7 +236,7 @@
* @return true if operation succeeded, false otherwise.
*/
public boolean deleteRootRegionLocation() {
- if (!ensureParentZNodeExists()) {
+ if (!ensureZNodeExists(parentZNode)) {
return false;
}
@@ -301,7 +297,7 @@
return deleteRootRegionLocation();
}
- if (!ensureParentZNodeExists()) {
+ if (!ensureZNodeExists(parentZNode)) {
return false;
}
@@ -320,7 +316,7 @@
* @return true if we're out of safe mode, false otherwise.
*/
public boolean checkOutOfSafeMode() {
- if (!ensureParentZNodeExists()) {
+ if (!ensureZNodeExists(parentZNode)) {
return false;
}
@@ -332,7 +328,7 @@
* @return true if ephemeral ZNode created successfully, false otherwise.
*/
public boolean writeOutOfSafeMode() {
- if (!ensureParentZNodeExists()) {
+ if (!ensureZNodeExists(parentZNode)) {
return false;
}
@@ -349,7 +345,55 @@
return false;
}
+
+ /**
+ * Write in ZK this RS startCode and address.
+ * Ensures that the full path exists.
+ * @param info The RS info
+ * @return true if the location was written, false if it failed
+ */
+ public boolean writeRSLocation(HServerInfo info) {
+ ensureZNodeExists(parentZNode);
+ ensureZNodeExists(rsZNode);
+ byte[] data = Bytes.toBytes(info.getServerAddress().getBindAddress());
+ String znode = rsZNode + ZNODE_PATH_SEPARATOR + info.getStartCode();
+ try {
+ zooKeeper.create(znode, data, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
+ LOG.debug("Created ZNode " + znode
+ + " with data " + info.getServerAddress().getBindAddress());
+ return true;
+ } catch (KeeperException e) {
+ LOG.warn("Failed to create " + znode + " znode in ZooKeeper: " + e);
+ } catch (InterruptedException e) {
+ LOG.warn("Failed to create " + znode + " znode in ZooKeeper: " + e);
+ }
+ return false;
+ }
+ /**
+ * Update the RS address and set a watcher on the znode
+ * @param info The RS info
+ * @param watcher The watcher to put on the znode
+ * @return true if the update is done, false if it failed
+ */
+ public boolean updateRSLocationGetWatch(HServerInfo info, Watcher watcher) {
+ byte[] data = Bytes.toBytes(info.getServerAddress().getBindAddress());
+ String znode = rsZNode + "/" + info.getStartCode();
+ try {
+ zooKeeper.setData(znode, data, -1);
+ LOG.debug("Updated ZNode " + znode
+ + " with data " + info.getServerAddress().getBindAddress());
+ zooKeeper.getData(znode, watcher, null);
+ return true;
+ } catch (KeeperException e) {
+ LOG.warn("Failed to update " + znode + " znode in ZooKeeper: " + e);
+ } catch (InterruptedException e) {
+ LOG.warn("Failed to update " + znode + " znode in ZooKeeper: " + e);
+ }
+
+ return false;
+ }
+
private boolean checkExistenceOf(String path) {
Stat stat = null;
try {
@@ -374,4 +418,10 @@
LOG.warn("Failed to close connection with ZooKeeper");
}
}
+
+ private String getZNode(String znodeName) {
+ return znodeName.startsWith(ZNODE_PATH_SEPARATOR) ?
+ znodeName :
+ parentZNode + ZNODE_PATH_SEPARATOR + znodeName;
+ }
}
Modified: hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/TestHBaseCluster.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/TestHBaseCluster.java?rev=739612&r1=739611&r2=739612&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/TestHBaseCluster.java (original)
+++ hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/TestHBaseCluster.java Sat Jan 31 21:05:35 2009
@@ -55,7 +55,6 @@
// Make lease timeout longer, lease checks less frequent
conf.setInt("hbase.master.lease.period", 10 * 1000);
- conf.setInt("hbase.master.lease.thread.wakefrequency", 5 * 1000);
// Increase the amount of time between client retries
conf.setLong("hbase.client.pause", 15 * 1000);
Modified: hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/filter/TestRowFilterAfterWrite.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/filter/TestRowFilterAfterWrite.java?rev=739612&r1=739611&r2=739612&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/filter/TestRowFilterAfterWrite.java (original)
+++ hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/filter/TestRowFilterAfterWrite.java Sat Jan 31 21:05:35 2009
@@ -81,7 +81,6 @@
// Make lease timeout longer, lease checks less frequent
conf.setInt("hbase.master.lease.period", 10 * 1000);
- conf.setInt("hbase.master.lease.thread.wakefrequency", 5 * 1000);
// For debugging
conf.setInt("hbase.regionserver.lease.period", 20 * 60 * 1000);
Modified: hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestLogRolling.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestLogRolling.java?rev=739612&r1=739611&r2=739612&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestLogRolling.java (original)
+++ hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestLogRolling.java Sat Jan 31 21:05:35 2009
@@ -88,7 +88,6 @@
// Make lease timeout longer, lease checks less frequent
conf.setInt("hbase.master.lease.period", 10 * 1000);
- conf.setInt("hbase.master.lease.thread.wakefrequency", 5 * 1000);
// Increase the amount of time between client retries
conf.setLong("hbase.client.pause", 15 * 1000);