Могу ли я иметь конфликт в Riak с использованием vclock, получая при получении
Я хочу знать, могу ли я иметь конфликт в этом сценарии:
#!/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.
Затем я читаю значение с get. И я храню vclock в переменной.
И наконец я поставил новое значение {"bar":"foo"}
для ключа 1
Есть ли случай, когда я могу иметь {"bar":"baz"}
для ключа 1
? Если у Riak есть конфликт, он будет решен с помощью vclock?
Спасибо!
0 ответов
Это зависит от того, как настроена ваша база данных Riak: глобально или если вы изменили конфигурацию по умолчанию для используемой корзины. Если вы сохраните конфигурацию по умолчанию, ваш второй PUT (с vclock) может: - выйти из строя, если кто-то обновил ключ за вашей спиной (редко), а данные vclock, которые у вас есть, уже устарели. Вам нужно перечитать значение и обновить его. Лучше всего иметь механизм повтора. - сбой, если у вас слишком строгие ограничения согласованности записи и слишком много узлов не работают (редко). Обычно конфигурация чтения и записи по умолчанию нормальна. - успешно, если данные vclock все еще действительны для этого ключа (большую часть времени)
В случае успеха, возможно, топология сети была разделена на мозг. В этом случае Riak решит проблему самостоятельно, используя данные v-clock.