to post messages and comments.

← All posts tagged raft

Господа. Созрел вопрос.
Итак есть функция github.com
Задача добавить перед ней вызов функции которая меняет State, в зависимости от Term-а (Если терм больше текущего LeaderState -> FollowerState) и вызвать пару функций в монаде Transition.
runTransitionT — это "синоним" RWST и state тут конкретный тип состояния (FollowerState/CandidateState/LeaderState), а не обобщённый(existential?) SomeState .
Я решил эту проблему вот таким способом : github.com
Т.е. сделал трансформерами RW без T и поменял тип вызываемых функций на более общий.

Может быть возможно как-то поменять Transition чтоб это влезало в одну монаду?

Доработал я либу чтоб можно было конфиги менять. И захотел рассказать забавную сказочку. Поскольку автор рекомендует конфиги менять удалением/добавлением одного узла за раз. То необходимо сделать так, чтоб конфиг из одного узла успешно работал. Такой себе вырожденный случай. Удаление же выполняется таким образом что удаляемому узлу сообщение не доходит и этот узел погрязает в вечных выборах, но его все игнорят.
Так вот если в конфиге из 3 узлов поочерёдно удалить 2 узла получится славная картина. 2 удалённых начнут выборы и смогут собрать majority и завалить одиночный узел лидера ну и сами сдохнут из-за неконсистентных конфигов.

Господа, есть у меня Replicated State Machine запиленная на raft-е . При этом лог я храню в памяти. В логе записаны некие события, которые меняют состояние, однако помимо состояния есть ещё и побочные эффекты (запуск/прибивание процесса). В случае когда у нас упала, а затем поднимается одина из реплик к ней приходит весь лог по которому восстанавливается состояние со всеми побочными эффектами, которые уже устарели и нинужны.
Чтоб такой херни не творилось я придумал 2 варианта:
1. вместе с событиями которые приводят к побочным эффектам хранить время и тупо не выполнять если они старые.
2. Сохранять лог на — каменных табличках — диске и препятствовать появлению событий с побочными эффектами на недоступных репликах.

Собственно вопрос: может вы видите ещё какие-то способы воскресить состояние по логу событий игнорируя устаревшие побочные эффекты?