[ 
https://issues.apache.org/jira/browse/CURATOR-216?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jordan Zimmerman closed CURATOR-216.
------------------------------------
    Resolution: Later

PathChildrenCache (and ZooKeeper in general) does not guarantee that you will 
get every single event. ZK is not a transactional system. What is happening is 
that the create() and setData() are happening almost immediately and you are 
only getting the ADDED event. If you set cacheData to true you will see that 
the ADDED event bytes are "something new".

> PathChildrenCacheListener could not receive CHILD_UPDATED events
> ----------------------------------------------------------------
>
>                 Key: CURATOR-216
>                 URL: https://issues.apache.org/jira/browse/CURATOR-216
>             Project: Apache Curator
>          Issue Type: Bug
>          Components: Recipes
>    Affects Versions: 2.6.0, 2.7.0, 2.7.1
>            Reporter: Xiaoshuang LU
>            Priority: Blocker
>
> Here is the scenario which can reproduce this issue.
> {code}
>     public void testChildUpdated() throws Exception
>     {
>         Timing timing = new Timing();
>         CuratorFramework client = 
> CuratorFrameworkFactory.newClient(server.getConnectString(), 
> timing.session(), timing.connection(), new RetryOneTime(1));
>         client.start();
>         try
>         {
>             final CountDownLatch updatedLatch = new CountDownLatch(1);
>             client.create().creatingParentsIfNeeded().forPath("/test");
>             PathChildrenCache cache = new PathChildrenCache(client, "/test", 
> false);
>             cache.getListenable().addListener
>                 (
>                     new PathChildrenCacheListener()
>                     {
>                         @Override
>                         public void childEvent(CuratorFramework client, 
> PathChildrenCacheEvent event) throws Exception
>                         {
>                             if ( event.getType() == 
> PathChildrenCacheEvent.Type.CHILD_UPDATED )
>                             {
>                                 updatedLatch.countDown();
>                             }
>                         }
>                     }
>                 );
>             cache.start(PathChildrenCache.StartMode.BUILD_INITIAL_CACHE);
>             client.create().forPath("/test/foo", "first".getBytes());
>             client.setData().forPath("/test/foo", "something new".getBytes());
>             updatedLatch.await();
>         }
>         finally
>         {
>             CloseableUtils.closeQuietly(client);
>         }
>     }
> {code}
> The function will be blocked on "updatedLatch.await();".



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to