On Thu, Mar 1, 2012 at 4:11 PM, Amirhossein Kiani <[email protected]> wrote:
> Hi ZooKeepers,

Hi Amir.

> I just recently had an issue about getting the a node's updated data after 
> the watch was actually fired. Being pretty confused, I read the documentation 
> page again and sure enough this has been stated:
>
> "A client will see a watch event for a znode it is watching before seeing the 
> new data that corresponds to that znode."
> http://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html
>

Those docs are pretty old. Try using the current version:
http://zookeeper.apache.org/doc/current/zookeeperProgrammers.html

> Now, I'm confused about how a data watch could actually be useful... But 
> aside from that, is this statement also true about the node's list of 
> Children? I.e. are a node's children it's "data" too?
>

Watches let you know something changed. Then you can take actions.
Typically this means that the data of a znode changed, or the znode
itself changed (created/deleted, children added/removed). There are
two separate calls related to your question - getData and getChildren,
they set watches on the data an child list respectively.

> Because if this is the case, wouldn't the recipe for barriers hang if it gets 
> the watch for a new node addition goes off and in:
>
>  if (list.size() < size) {
>                        mutex.wait();
>
>  list.size() is still smaller than size?
>
> Or is this statement about watches only true for a data on the node?

No. It's true for both cases. If you set a data watch then it's
guaranteed that if you getData after being notified you will see the
updated data. Same for getChildren and it's child list.

Regards,

Patrick

Reply via email to