From: Stefan G. <sg...@10...> - 2008-04-25 05:19:25
|
Hi there, as far I understand notification is guaranteed for e.g. child creation. However I have a test that shows that randomly I do not get all notification I do expect. I basically create 10 child in /folder but only get 8 or 9 notifications back. However in case I add a Thread.sleep(50); between my child znode creation I always get 10 notifications. Is that a bug or an optimization, e.g. getting one notification for two new sub znode creations? Thanks for any hints. Stefan My code looks like this: TestMethod: public void testNotifications() throws Exception { KattaConfiguration conf = new KattaConfiguration(); Server server = new Server(conf); ZKClient client = new ZKClient(conf); MyListener listener = new MyListener(); String katta = "/katta"; if (client.exists(katta)) { client.deleteRecursiv(katta); } client.create(katta); client.subscribeChildChanges(katta, listener); for (int i = 0; i < 10; i++) { client.create(katta + "/" + i); // Thread.sleep(50); } Thread.sleep(1000); assertEquals(10, listener._counter); server.shutdown(); } Watcher process Method: public void process(WatcherEvent event) { synchronized (_mutex) { String path = event.getPath(); if (event.getType() == Watcher.Event.EventNodeChildrenChanged) { HashSet<IZKEventListener> listeners = _childListener.get(path); if (listeners != null) { for (IZKEventListener listener : listeners) { listener.process(event); } // re subscribe to event. try { _zk.getChildren(event.getPath(), true); } catch (Exception e) { for (IZKEventListener listener : listeners) { removeListener(path, listener); } Logger.warn("unable to re subscribe to child change notification", e); } } } } } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 101tec Inc. Menlo Park, California, USA http://www.101tec.com |