Hello,

I have been debugging something I've seen popping up intermittently when 
running my application's functional tests against Riak (local 5 node devrel 
cluster). The behavior is basically that sometimes an object which was PUT will 
seemingly disappear. Any future GETs will 404. Even if waiting seconds or 
minutes between PUT and GET.

After staring at this and pulling out some hair I finally figured out what was 
happening (I think). I noticed it was always the first few objects written that 
were lost, and only on a certain bucket. My application uses multi-backend with 
two bitcask backends. That bucket is the only one which uses the non-default 
backend.

What's happening is the application first gets the bucket properties and then 
sets the "backend" prop if it's not set. You can probably guess the rest. (PUTs 
come into nodes which don't have the property in their ring state yet and store 
the objects in the default backend)

I don't think this is necessarily a "bug". It's expected behavior when you 
think about it, as long as you know how bucket properties are propagated. But 
even knowing that, this is pretty subtle.

Is there a good way for a client to know when the property has been gossiped to 
all the nodes? Seems like the only approach is to wait a bit after setting a 
property before doing a PUT...

Also, does this sound right? It's very possible I'm wrong about what's causing 
this behavior.

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

Reply via email to