0

我想知道在这种情况下我是否会发生冲突:

#!/usr/bin/env bash

curl -XPUT -d '{"bar":"baz"}' \
     -H "Content-Type: application/json"  \
     http://127.0.0.1:8098/riak/obj/1

response=$(curl -I http://127.0.0.1:8098/riak/obj/1 | grep 'X-Riak-Vclock:' | egrep -o ' .*$')

curl -v -XPUT -d '{"bar":"foo"}' \
     -H "Content-Type: application/json"  \
     -H "X-Riak-Vclock: $response" \
     http://127.0.0.1:8098/riak/obj/1

换句话说:

首先,我没有1{"bar":"baz"}值与 http api 的 PUT 放在一起的键的对象。

然后,我用 get 读取了这个值。我将 vclock 存储在变量中。

最后,我{"bar":"foo"}为密钥设置了一个新值1

有没有我可以拿到{"bar":"baz"}钥匙的情况1?如果 Riak 有冲突,它会用 vclock 解决吗?

谢谢 !

4

1 回答 1

1

这取决于您的 Riak 数据库是如何配置的,无论是全局配置,还是您更改了正在使用的存储桶的默认配置。如果您保留默认配置,您的第二个 PUT(使用 vclock)可能会: - 失败,如果有人在您背后更新了密钥(罕见),并且您拥有的 vclock 数据已经过时。您需要重新读取该值并对其进行更新。最好是有重试机制。- 失败,如果您拥有的写入一致性约束太严格,并且有太多节点关闭(罕见)。通常默认的读写配置是正常的。- 成功,如果 vclock 数据对于这个键仍然有效(大部分时间)

如果成功,则可能是网络拓扑处于裂脑情况。在这种情况下,Riak 将使用 v-clock 数据自行解决问题。

于 2019-06-18T09:07:56.047 回答