У меня есть очень конкретный вопрос об алгоритме Paxos, который реализован в облегченных транзакциях Cassandra:
Что произойдет, если два узла выдадут одно и то же предложение одновременно? Они оба получают '[applied]: true'?
Например, рассмотрим эту таблицу:
ids:
+-------------------+---------------+
| id_name (varchar) | next_id (int) |
+-------------------+---------------+
| person_id | 1 |
+-------------------+---------------+
И этот запрос:
UPDATE ids
SET next_id = 2
WHERE id_name = 'person_id'
IF next_id = 1
Если я выполняю этот запрос, я получаю в ответ:
[{[applied]: True}]
Если я выполню его снова, что тогда не будет принято, так как next_id != 1, я получаю:
[{[applied]: False, next_id: 2}]
Мой вопрос: что произойдет, если я выполню этот запрос с двух узлов параллельно. Есть ли шанс, что они оба будут приняты?
(Мой вариант использования описан в этом вопросе stackoverflow а>)