You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Andor Molnar (JIRA)" <ji...@apache.org> on 2018/03/28 15:58:00 UTC

[jira] [Comment Edited] (ZOOKEEPER-3014) watch can be added to non-existed path by exist command

    [ https://issues.apache.org/jira/browse/ZOOKEEPER-3014?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16417617#comment-16417617 ] 

Andor Molnar edited comment on ZOOKEEPER-3014 at 3/28/18 3:57 PM:
------------------------------------------------------------------

Thanks for the clarification. I'll look into it in more detail.

In the meantime, would you please test with the latest stable version of Curator/ZooKeeper to make sure you're not reporting an issue which is fixed already?


was (Author: andorm):
Thanks for the clarification. I'll look into it in more detail.

In the meantime, would you please this with the latest stable version of Curator/ZooKeeper to make sure you're not reporting an issue which is fixed already?

> 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.5, 3.4.6
>            Reporter: CHQ
>            Priority: Major
>             Fix For: 3.4.12
>
>         Attachments: image-2018-03-28-22-51-33-751.png
>
>
> 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. 
> {code:java}
> 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) {
> n.copyStat(stat);
> return stat;
> }
> }
> {code}
> 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
(v7.6.3#76005)