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)