raft: add some precondition checks

Check that fsm does not process messages from itself and that it does
not tries to become its own follower.
This commit is contained in:
Gleb Natapov
2021-05-06 14:26:03 +03:00
parent abe3d7d7d3
commit 0634674aef
2 changed files with 6 additions and 0 deletions

View File

@@ -160,6 +160,9 @@ void fsm::become_leader() {
}
void fsm::become_follower(server_id leader) {
if (leader == _my_id) {
on_internal_error(logger, "fsm cannot become a follower of itself");
}
_current_leader = leader;
_state = follower{};
if (_current_leader) {

View File

@@ -457,6 +457,9 @@ void fsm::step(server_id from, const follower& c, Message&& msg) {
template <typename Message>
void fsm::step(server_id from, Message&& msg) {
if (from == _my_id) {
on_internal_error(logger, "fsm cannot process messages from itself");
}
static_assert(std::is_rvalue_reference<decltype(msg)>::value, "must be rvalue");
// 4.1. Safety
// Servers process incoming RPC requests without consulting