The paper "ZooKeeper: Wait-free coordination for Internet-scale
systems" claims that znodes are wait-free objects (citing: ``Our
system, Zookeeper, hence implements an API that manipulates simple
_wait-free_ data objects organized hierarchically as in file
systems''). But I wonder if they are really "wait-free" (in the sense
that "every operation has a bound on the number of steps the algorithm
will take before the operation completes")?
As far as I know, ZooKeeper uses locks (well, "synchronized" keyword)
internally. I also cannot imagine a system that big and complex
working only with wait-free data structures. And if we use locks
internally, how can we state that the external interface is wait-free?
Also, I didn't find anything about "wait-freedom" on the
http://zookeeper.apache.org/ site. So can anyone explain a bit, what
this "wait-free" really means and how it is implemented in the code?