As a newbie around hadoop/zookeeper (but long time apache hacker on
various things), I think the high level protocol/recipe stuff should
definitely be a separate, released module; so folks who wanna use it
can share a versioned binary and so forth. It would be awesome to have
a few good protocols/recipes for things like leader election, write
locks, read/write locks - maybe load balancing (e.g. sparse hash maps
and whatnot) - plus maybe more distributed java-util-concurrent stuff
like barriers etc. Even if folks don't reuse the recipes at least they
can act as good educational material for using the core ZK client API

I don't see a huge need yet to split these Java recipe's into multiple
individual releases/jars yet - as we're talking a pretty small
codebase, so a single zookeeper-recipe.jar would suffice for now. e.g.
for leader election & exclusive write locks we're talking two classes
probably; maybe with a few interface hooks or something. I'd be
tempted to stick with all the recipe's in a single jar for now - then
if we find some complex recipe's coming along that are more
specialised and require loads of code, we could spin those out later
but many of the core recipe's are gonna be pretty small in terms of
code and I can also see a small chunk of code being reusable in a few
recipe's etc. (e.g. exclusive write locks are kinda the same thing as
leader election).

The bigger decision is more do we release the core Java API/impl to ZK
with the recipe's or as a separate release process. Certainly the core
of ZK is pretty stable; the recipe's are gonna be in a state of flux &
rapid development (hopefully!:) for a while. Its gonna be a while
before all the recipes are totally finished & hardened; but I don't
see why they can't be released in a kinda work-in-progress state. e.g.
so long as we document that the recipe code may change in the future,
I don't see any issue including the recipe code along with the ZK
client and server in a single release. But down the line we could
always split it up if we need to.

I tend to prefer deferring decisions until we really need to and
saving work where possible (particularly when it comes to things like
doing releases); so for now I'd prefer to release the recipe's in the
Java ZK client/server release distro as a separate optional jar (along
with some warnings the recipe's are work in progress and might change
a little over the next few months as we figure out the neatest way to
implement the higher level protocols etc) plus separate documentation


Open Source Integration

Reply via email to