已删除的couchbase文档似乎可见更新但未获取

时间:2013-11-09 00:09:34

标签: memcached couchbase

尝试更新先前删除的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。

由于

2 个答案:

答案 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()?我认为它可以解决你的问题。