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
