Могу ли я иметь конфликт в Riak с использованием vclock, получая при получении - PullRequest
0 голосов
/ 25 апреля 2019

Я хочу знать, могу ли я столкнуться с конфликтом в этом сценарии:

#!/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"} значение с PUT http api.

Затем я читаю значение с помощью get.И я храню vclock в переменной.

И, наконец, я поставил новое значение {"bar":"foo"} для ключа 1

Есть ли случай, когда у меня может быть {"bar":"baz"} для ключа 1?Если у Riak есть конфликт, он будет решен с помощью vclock?

Спасибо!

1 Ответ

1 голос
/ 18 июня 2019

Это зависит от того, как настроена ваша база данных Riak, либо глобально, либо от того, изменили ли вы конфигурацию по умолчанию для используемой корзины.Если вы сохраните конфигурацию по умолчанию, ваш второй PUT (с vclock) может: - потерпеть неудачу, если кто-то обновил ключ за вашей спиной (редко), и ваши данные vclock уже устарели.Вам необходимо перечитать значение и обновить его.Лучше всего иметь механизм повтора.- потерпеть неудачу, если ваши ограничения согласованности записи слишком строги, и слишком много узлов не работает (редко).Обычно конфигурации чтения и записи по умолчанию являются нормальными.- успешно, если данные vclock все еще действительны для этого ключа (большую часть времени)

В случае успеха, возможно, топология сети находилась в ситуации раздельного мозга.В этом случае Riak решит проблему самостоятельно, используя данные V-Clock.

...