Hi Adam, I don't think zk is very very hard to get right. There are exmaples in src/recipes which implements locks/queues/others. There is ZOOKEEPER-22 to make it even more easier for application to use.
Regarding re registration of watches, you can deifnitely write code and submit is as a part of well documented contrib module which lays out the assumptions/design of it. It could very well be useful for others. Its just that folks havent had much time to focus on these areas as yet. Thanks mahadev On 5/4/10 2:58 PM, "Adam Rosien" <a...@rosien.net> wrote: > I use zkclient in my work at kaChing and I have mixed feelings about > it. On one hand it makes "easy things easy" which is great, but on the > other hand I very few ideas what assumptions it makes "under the > hood". I also dislike some of the design choices such as unchecked > exceptions, but that's neither here nor there. It would take some > extensive documentation work by the authors to really enumerate the > model and assumptions, but the project doesn't seem to be active > (either from it being adequate for its current users or just > inactive). I'm not sure I could derive the assumptions myself. > > I'm a bit frustrated that zk is "very, very hard to really get right". > At a project level, can't we create structures to avoid most of these > errors? Can there be a "standard model" with detailed assumptions and > implementations of all the recipes? How can we start this? Is there > something that makes this too hard? > > I feel like a recipe page is a big fail; wouldn't an example app that > uses locks and barriers be that much more compelling? > > For the common FAQ items like "you need to re-register the watch", > can't we just create code that implements this pattern? My goal is to > live up to the motto: a good API is impossible to use incorrectly. > > .. Adam > > On Tue, May 4, 2010 at 2:21 PM, Ted Dunning <ted.dunn...@gmail.com> wrote: >> In general, writing this sort of layer on top of ZK is very, very hard to >> get really right for general use. In a simple use-case, you can probably >> nail it but distributed systems are a Zoo, to coin a phrase. The problem is >> that you are fundamentally changing the metaphors in use so assumptions can >> come unglued or be introduced pretty easily. >> >> One example of this is the fact that ZK watches *don't* fire for every >> change but when you write listener oriented code, you kind of expect that >> they will. That makes it really, really easy to introduce that assumption >> in the heads of the programmer using the event listener library on top of >> ZK. Another example is how the atomic get content/set watch call works in >> ZK is easy to violate in an event driven architecture because the thread >> that watches ZK probably resets the watch. If you assume that the listener >> will read the data, then you have introduced a timing mismatch between the >> read of the data and the resetting of the watch. That might be OK or it >> might not be. The point is that these changes are subtle and tricky to get >> exactly right. >> >> On Tue, May 4, 2010 at 1:48 PM, Jonathan Holloway < >> jonathan.hollo...@gmail.com> wrote: >> >>> Is there any reason why this isn't part of the Zookeeper trunk already? >>> >>