Java Client update vs store

Brian Roach roach at basho.com
Fri Feb 27 13:45:47 EST 2015


This was due to the UpdateValueFuture not checking for the exception
when the get() methods were called. Just fixed this, it'll be in the
very-soon-to-be-cut 2.0.1 release.

https://github.com/basho/riak-java-client/pull/503

Sync calls are just a wrapper around the async call that calls get() -
You can currently work around this by calling UpdateValue async:

RiakFuture<UpdateValue.Response, Location> future =
Riakclient.executeAsync(updateOp);

future.await();
if (future.isSuccess()) {
    ...
} else {
   ...
}

Thanks,
- Roach

On Tue, Feb 3, 2015 at 3:39 PM, Cosmin Marginean <cosminaru at gmail.com> wrote:
> I have an edge case where consistency is favoured over availability so I’m
> using a "consistent": true bucket type for a very specific operation.
> I worked in testing my setup so ended up faking an entire failure by
> deliberately using an incorrect vClock.
>
> Using StoreValue, the (second) write fails as expected
>
> 	FetchValue fetchOp = new FetchValue.Builder(location(id)).build();
> 	VClock vClock = client.execute(fetchOp).getVectorClock();
> 	//fiddle with vClock or allow the first write to finish before the next
> step
> 	StoreValue storeOp = new StoreValue.Builder(value)
>         	.withVectorClock(vClock)
> 	        .withLocation(location(id)).build();
> 	StoreValue.Response response = client.execute(storeOp);
>
>
> Caused by: com.basho.riak.client.core.netty.RiakResponseException: failed
> at
> com.basho.riak.client.core.netty.RiakResponseHandler.channelRead(RiakResponseHandler.java:52)
> at
> io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:340)
> at
> io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:326)
>
>
> I managed to override the UpdateValue class to simulate a similar failure
> scenario (so I don’t have to do the fetch + store myself). I was expecting a
> similar result, however, after some analysis I realised that an exception is
> being swallowed somewhere.
> I believe the trouble might be around this area:
> https://github.com/basho/riak-java-client/blob/develop/src/main/java/com/basho/riak/client/api/commands/kv/UpdateValue.java#L581
>
> The exception is not allowed to bubble up to the client code. Additionally,
> another net effect of this seems to be that a null response is returned here
>
> 	UpdateValue.Response res = client.execute(updateOp);
>
> So a call to res.wasUpdated() will produce a NPE!
>
> The way I see it, this code needs to either
> 1) return not-null res and res.wasUpdated() as false
> or
> 2) allow the exception to bubble up
>
> Please let me know your thoughts
>
> Thank you
> Cos
>
>
> _______________________________________________
> riak-users mailing list
> riak-users at lists.basho.com
> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>




More information about the riak-users mailing list