You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@curator.apache.org by "Jordan Zimmerman (JIRA)" <ji...@apache.org> on 2015/06/21 18:44:00 UTC

[jira] [Closed] (CURATOR-216) PathChildrenCacheListener could not receive CHILD_UPDATED events

     [ 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)