zookeeper-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "CHQ (JIRA)" <j...@apache.org>
Subject [jira] [Created] (ZOOKEEPER-3014) watch can be added to non-existed path by exist command
Date Wed, 28 Mar 2018 08:49:00 GMT
CHQ created ZOOKEEPER-3014:

             Summary: watch can be added to non-existed path by exist command
                 Key: ZOOKEEPER-3014
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-3014
             Project: ZooKeeper
          Issue Type: Bug
          Components: server
    Affects Versions: 3.4.6, 3.4.5
            Reporter: CHQ
             Fix For: 3.4.12

We have client A which create a znode ,and its path is /zk/lock/100000.  Another client B
thread is acquiring for the lock, so it calls the exist command with watch periodically to
check if it is available. Then Client A has finished this work, and  delete this znode. Client
b still calls exist command with watch. Because the code doesn't check node existence, when
the  Watch add operation comes , it will add to non-exist node path.

This problem may be cause by the follow code. 
public Stat statNode(String path, Watcher watcher)
throws KeeperException.NoNodeException {
Stat stat = new Stat();
DataNode n = nodes.get(path);
if (watcher != null) {
dataWatches.addWatch(path, watcher);
if (n == null) {
throw new KeeperException.NoNodeException();
synchronized (n) {
return stat;
The zk version we use is 3.4.5. We meet a problem that is the zk client try to reestablish to
zk cluster failed after disconnect for some reason.We find it causes by ZOOKEEPER-706. But
we try to know why there are so many watches. Then we find this problem.




This message was sent by Atlassian JIRA

View raw message