curator-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CURATOR-391) PathChildrenCache missing events upon reconnection
Date Sun, 12 Mar 2017 00:17:04 GMT

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

ASF GitHub Bot commented on CURATOR-391:
----------------------------------------

Github user Randgalt commented on a diff in the pull request:

    https://github.com/apache/curator/pull/202#discussion_r105545481
  
    --- Diff: curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/PathChildrenCache.java
---
    @@ -694,14 +695,23 @@ private void applyNewData(String fullPath, int resultCode, Stat
stat, byte[] byt
                 {
                     offerOperation(new EventOperation(this, new PathChildrenCacheEvent(PathChildrenCacheEvent.Type.CHILD_ADDED,
data)));
                 }
    -            else if ( previousData.getStat().getVersion() != stat.getVersion() )
    +            else if ( hasChanged(stat, previousData, data) )
                 {
                     offerOperation(new EventOperation(this, new PathChildrenCacheEvent(PathChildrenCacheEvent.Type.CHILD_UPDATED,
data)));
                 }
                 updateInitialSet(ZKPaths.getNodeFromPath(fullPath), data);
             }
         }
     
    +    private boolean hasChanged(Stat stat, ChildData previousData, ChildData newData)
    +    {
    +        if ( cacheData )
    +        {
    +            return !Arrays.equals(previousData.getData(), newData.getData());
    --- End diff --
    
    It's not possible to do anything else. The only data we have is the version and the data
itself. As a general rule, it's not possible to get every event in ZooKeeper.


> PathChildrenCache missing events upon reconnection
> --------------------------------------------------
>
>                 Key: CURATOR-391
>                 URL: https://issues.apache.org/jira/browse/CURATOR-391
>             Project: Apache Curator
>          Issue Type: Bug
>          Components: Recipes
>            Reporter: Benjamin Jaton
>            Assignee: Jordan Zimmerman
>             Fix For: 3.3.1, 2.12.1
>
>
> PathChildrenCache attempts to check for any change that occurred during a connection
loss in applyNewData():
> {code:title=PathChildrenCache.java|borderStyle=solid}
>     else if ( previousData.getStat().getVersion() != stat.getVersion() )
> {code}
> The way to compare stats is erroneous. {{version}} will be reset if the node is recreated.
So the above code only works if an update has been made, but it may miss changes that involve
a delete event.
> Example:
> - node /tmp is just created, version=0
> - connection loss
> - node /tmp is deleted
> - node /tmp is recreated with new data, version=0
> - reconnect
> - no data change event from PathChildrenCache



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Mime
View raw message