Могу ли я иметь конфликт в 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.

Другие вопросы по тегам