Hi, Seth.

On Sat, Sep 4, 2010 at 5:59 PM, Seth Falcon <s...@userprimary.net> wrote:

> I'm working on a project where we have a webmachine-backed service
> that talks to Riak.  I currently initialize one pb client for each
> node in the cluster as part of the webmachine startup.  Then the
> resources in the webmachine app ask for one of these clients for each
> request.
>
> Your comment above about reusing clients for non-concurrent requests
> makes me wonder if this is the wrong approach.  Comments or
> suggestions?

Each instantiated riak_client has a unique client-id that will
represent that client in all updates (put-requests) that it makes.
That is, the entries in the vector clock will match that client-id.
Much of the value of vector clocks can vanish if concurrent writes to
the same values can be issued with the same client-id.

Sharing connections as you describe might be fine, depending on the
details.  However, if your resources might overlap in a way like the
following example then you probably have a problem.

A and B are resource instances handling separate concurrent HTTP
requests but sharing a client-id C.
A issues get(K), receiving object X with vector clock V
B issues get(K), receiving object X with vector clock V
A issues put(K,Xa) where Xa is an update to X
B issues put(K,Xb) where Xb is an update to X

You can lose one of the two updates, as they are both a single update
to V from client C.  It is assumed that a given client will not
compete with itself for updates.

I hope that this explanation is helpful.

-Justin

_______________________________________________
riak-users mailing list
riak-users@lists.basho.com
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

Reply via email to