尝试更新先前删除的couchbase文档时,更新调用失败,并带有CASResponse.EXISTS代码而不是CASResponse.NOT_FOUND。但是,在删除完成后立即调用以获取先前删除的键将按预期返回null:
def main(args: Array[String]){
val uris = List(URI.create("http://localhost:8091/pools"))
val client = new CouchbaseClient(uris, "test", "password")
client.add("asdf", "qwer").get
client.delete("asdf").get
val result = client.asyncGets("asdf").get
assert(result == null)
val response = client.asyncCAS("asdf", 1, "bar").get
response match {
case CASResponse.NOT_FOUND => println("Document Not Found")
case CASResponse.EXISTS => println("Document exists")
}
}
在更新调用之前添加Thread.sleep(1000)修复了问题,所以我的问题是Couchbase的预期行为?
Couchbase版本是2.2.0企业版(build-821),使用Scala 2.10.2中的Java客户端版本1.2.1。
由于
答案 0 :(得分:1)
我想你可能想这样做:
client.delete(key, PersistTo.MASTER).get();
您可以将枚举PersistTo更改为其他选项,例如ONE,TWO,THREE(即Master加上额外的节点数)。我只用一个节点测试了你的例子,上面对我有用。
答案 1 :(得分:0)
您是否尝试过使用 client.gets()而不是 client.asyncGets()。get()和 client.cas()而不是 client.asyncCAS()。get()?我认为它可以解决你的问题。