I think this is the interface Ted eluded to, but I wanted to throw it out
there more concretely:

zoo_multi_test_and_set(List<string> znodesToTest, List<int>
versions, List<string> znodesToModify, List<OperationType>
typeOfModifications, List<byte[]> data)

You can still keep it a subset by requiring that creations explicitly set
the test version to -1.  This type of interface would really open up the
capability of multi_test_and_set().  I have no idea how much more
complicated it would be to implement, but I can imagine each operation type
having Test() and Commit() operations.  I think that by limiting it to only
updates from the start we may do work that will need reversed to make this
extension on the interface functional.

~Jared

On Tue, Dec 21, 2010 at 4:48 PM, Ted Dunning <ted.dunn...@gmail.com> wrote:

> On Tue, Dec 21, 2010 at 1:30 PM, Henry Robinson <he...@cloudera.com>
> wrote:
>
> > This is a more complicated requirement, and not something that can be
> done
> > right now with Zookeeper even in a single operation on a single znode.
> The
> > only conditional operations are updates.
>
>
> Actually, creates and deletes are conditional also.  Creates are
> conditional
> on the file
> not existing previously and deletes can accept a version number.
>
>
> > Designing an API to support three
> > different kinds of operation would also be more complicated, and the
> > implementation would be trickier.
> >
>
> This is definitely true.  Conceptually it is the same thing, but
> practically
> building a usable API is
> a bit tricky.  Using a builder style would work, though.  For example:
>
>       Zookeeper zk = ...;
>
>
>       zk.transaction()
>                .create("/foobar")
>                .update("/pig", data, version)
>                .delete("/dog"", otherVersion)
>                .commit()
>
> Another option would be to pass a list of operations which can be one of
> Create, Update or delete.
>

Reply via email to