Hi,

I've got a problem that I've seen at only a few occasions and which
confuses me a bit. Basically I construct a ZooKeeper client (I'm running
version 3.3.2) where there's a ZK quorum of size 3 running. I get a
SyncConnected event in a Watcher of mine and in that watcher I do a
get-or-create(-if-absent) behaviour where I first do a:

  zooKeeper.getData( myPath, false, null );

if that produces a NONODE code I'll try to create it with:

  zooKeeper.create( myPath, smallByteArray, OPEN_ACL_UNSAFE, PERSISTENT );

If that fails with NODEEXISTS code I'll just get it, assuming someone else
made it before me. What I see from this getData call that I do after
getting this NODEEXISTS code, which is the same as the first one btw, is
that I'll get a NONODE code back. Given in this scenario is that I'm 100%
certain that this node exists in the quorum at myPath in the first place
even.

Questions:
1) How can this happen?
2) Do I use ZooKeeper here in an improper way?
3) Will a later version fix any potential issue I might have hit?
4) What's the guarantees around the state of my ZooKeeper instance after a
receive a SyncConnected event, is it fully synced with the master at that
point, or will a call to sync() be necessary first?

Best,
Mattias

-- 
Mattias Persson, [[email protected]]
Hacker, Neo Technology
www.neotechnology.com

Reply via email to