Skip to content

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

Корявый маленько, но работает. Что надо сделать:

  1. Запустить последовательно init.lua init2.lua init3.lua
  2. Убедиться, что счётчик таплов в выводе начал щёлкать - это значит апдейты пошли
  3. Через gdb или lldb подключиться к процессу с init.lua
  4. Подключиться к консоли узла с init2.lua через tarantoolctl connect /tmp/2.sock
  5. Выполнить в ней box.ctl.promote()
  6. Отпустить gdb
  7. Узел 1 отвалится со сплит брейном
Edited by Dmitry Ivanov

Merge request reports