wip: Fix one case of a "split brain" when the leader is lagging
Whenever we receive a set of rows ending with RAFT_CONFIRM from an old leader with an expired term, we should nopify them. Furthermore, any other node should apply those NOPs as async transactions.
TODOs:
-
Add a config knob to let users toggle this feature -
Write a decent code comment explaining the change (and fix the existing one) -
Write a proper test using the repro we have -
Check if there's anything else we should do about "split brain"
Repro
repro.tgzКорявый маленько, но работает. Что надо сделать:
- Запустить последовательно init.lua init2.lua init3.lua
- Убедиться, что счётчик таплов в выводе начал щёлкать - это значит апдейты пошли
- Через gdb или lldb подключиться к процессу с init.lua
- Подключиться к консоли узла с init2.lua через tarantoolctl connect /tmp/2.sock
- Выполнить в ней box.ctl.promote()
- Отпустить gdb
- Узел 1 отвалится со сплит брейном
Edited by Dmitry Ivanov