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