Jerry He created HBASE-10448:
--------------------------------
Summary: ZKUtil create and watch methods don't set watch in some
cases
Key: HBASE-10448
URL: https://issues.apache.org/jira/browse/HBASE-10448
Project: HBase
Issue Type: Bug
Components: Zookeeper
Affects Versions: 0.96.1.1, 0.96.0
Reporter: Jerry He
Fix For: 0.98.1
While using the ZKUtil methods during testing, I found that watch was not set
when it should be set based on the methods and method comments:
createNodeIfNotExistsAndWatch
createEphemeralNodeAndWatch
For example, in createNodeIfNotExistsAndWatch():
{code}
public static boolean createNodeIfNotExistsAndWatch(
ZooKeeperWatcher zkw, String znode, byte [] data)
throws KeeperException {
try {
zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),
CreateMode.PERSISTENT);
} catch (KeeperException.NodeExistsException nee) {
try {
zkw.getRecoverableZooKeeper().exists(znode, zkw);
} catch (InterruptedException e) {
zkw.interruptedException(e);
return false;
}
return false;
} catch (InterruptedException e) {
zkw.interruptedException(e);
return false;
}
return true;
}
{code}
The watch is only set via exists() call when the node already exists.
Similarly in createEphemeralNodeAndWatch():
{code}
public static boolean createEphemeralNodeAndWatch(ZooKeeperWatcher zkw,
String znode, byte [] data)
throws KeeperException {
try {
zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),
CreateMode.EPHEMERAL);
} catch (KeeperException.NodeExistsException nee) {
if(!watchAndCheckExists(zkw, znode)) {
// It did exist but now it doesn't, try again
return createEphemeralNodeAndWatch(zkw, znode, data);
}
return false;
} catch (InterruptedException e) {
LOG.info("Interrupted", e);
Thread.currentThread().interrupt();
}
return true;
}
{code}
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)