Кажется, что API-интерфейс Riak Datatype API не позволяет различать несуществующие ключи и значения по умолчанию. Например, если я запросить несуществующий ключ следующим образом:Riak Dataypes: значения по умолчанию или несуществующие ключи
val fetchOp = new FetchCounter.Builder(key).build()
val c = client.execute(fetchOp).getDatatype
я получить счетчик, который держит 0. Теперь, если я поставлю счетчик со значением 0 в этом ключе и выполнить запрос, я получаю тот же результат. Есть ли способ различать эти два разных состояния?
Примечание: при работе с наборами есть контекст, который я могу проверить. Если я получаю набор, а контекст имеет значение null, это означает, что набор не существует под этим ключом. Однако этот трюк не работает для счетчиков, поскольку они не поддерживают контекст.
Обновление: предложение Дмитрия ниже приводит к следующему решению:
val fetchOp = new FetchValue.Builder(location).withOption(FetchValue.Option.HEAD, java.lang.Boolean.TRUE).build()
val res = client.execute(fetchOp) // res.isNotFound should equal(true)
Однако недостатком является то, что теперь мне нужно сделать дополнительный запрос.
Спасибо, Дмитрий! Не могли бы вы также прокомментировать, подходит ли трюк с нулевым контекстом для набора? Он чувствует себя взломанным. – Tim
Конечно, позвольте мне проверить это. –