to post messages and comments.

← All posts tagged kontiki

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

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

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