diff --git a/raft/fsm.cc b/raft/fsm.cc index c6b81571d3..4de66753e9 100644 --- a/raft/fsm.cc +++ b/raft/fsm.cc @@ -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) { diff --git a/raft/fsm.hh b/raft/fsm.hh index 98e745028a..bd876aa369 100644 --- a/raft/fsm.hh +++ b/raft/fsm.hh @@ -457,6 +457,9 @@ void fsm::step(server_id from, const follower& c, Message&& msg) { template 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::value, "must be rvalue"); // 4.1. Safety // Servers process incoming RPC requests without consulting