Forgot to include  the list in the initial response.

Thanks, Dmitri. I'm writing in Scala so I use riak java client. That seem
to make the trick:

val fetchOp = new
FetchValue.Builder(key.location).withOption(FetchValue.Option.HEAD,
java.lang.Boolean.TRUE).build()
val res = module.client.execute(fetchOp)
res.isNotFound should equal(true)

But also means that I need to issue a separate (albeit lightweight) request
to check whether the key exists before fetching a CRDT value. I'm also not
entirely sure whether it is compatible with CRDT, based on the Russel's
comment below.

On Wed, Aug 19, 2015 at 8:48 PM, Dmitri Zagidulin <[email protected]>
wrote:

> From what I understand, this is a limitation of that particular client
> (what language is that, by the way?). Feel free to open an issue on Github
> for it.
>
> The HTTP API, at least, does distinguish between a non-existent counter
> and a counter whose value happens to be 0.
>
> For example, here's the result of trying to access an existing key (with a
> value set to 0):
>
> curl
> http://localhost:8098/types/counters/buckets/room_occupancy/datatypes/room-215
> {"type":"counter","value":0}
>
> And here's the result of retrieving the value of a non-existent key:
>
> curl
> http://localhost:8098/types/counters/buckets/room_occupancy/datatypes/non-existent-room
> {"type":"counter","error":"notfound"}
>
> There's a workaround you can do with your existing client, however (until
> the issue with the FetchCounter request gets fixed).
>
> You can issue a regular Fetch Object operation (preferably setting the
> 'HEAD only' option to true) for that counter. A Riak counter (or any other
> data type) still exists as a regular object, and you can issue a HEAD
> request to it (as opposed to a Fetch Counter or whatever), and it'll return
> a 404 as expected.
>
> On Wed, Aug 19, 2015 at 8:59 PM, Timur Fayruzov <[email protected]>
> wrote:
>
>> Hello,
>>
>> It seems that Riak Datatype API does not allow to distinguish between
>> non-existing keys and default values. For example, if I query for
>> non-existing key as follows:
>>
>> val fetchOp = new FetchCounter.Builder(key).build()
>> val c = client.execute(fetchOp).getDatatype
>>
>> I'll get a counter that holds 0. Now, if I put counter with value 0 at
>> this key and run the query, I get the same result. Is there any way to
>> distinguish between these two different states?
>>
>> Note: when working with sets there is a context that I can check. If I
>> fetch a set and the context is null, it means that the set does not exist
>> under this key. This trick does not work for counters though, as they do
>> not maintain context. Is it a valid trick to use though?
>>
>> I posted this to StackOverflow a while ago, but no luck:
>> http://stackoverflow.com/questions/31845164/riak-dataypes-default-values-vs-non-existing-keys
>>
>> Thanks,
>>
>> Timur
>>
>> _______________________________________________
>> riak-users mailing list
>> [email protected]
>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>
>>
>
_______________________________________________
riak-users mailing list
[email protected]
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

Reply via email to