diff --git a/raft/fsm.hh b/raft/fsm.hh index 6f8d3c1054..96e6f5e0b3 100644 --- a/raft/fsm.hh +++ b/raft/fsm.hh @@ -21,6 +21,7 @@ #pragma once #include +#include #include "raft.hh" #include "tracker.hh" #include "log.hh" @@ -408,8 +409,9 @@ public: template void fsm::step(server_id from, const leader& s, Message&& msg) { if constexpr (std::is_same_v) { - // Got AppendEntries RPC from self - append_entries(from, std::move(msg)); + // We are here if we got AppendEntries RPC with our term + // but this is impossible since we are the leader and + // locally applied entries do not go via the RPC. Just ignore it. } else if constexpr (std::is_same_v) { append_entries_reply(from, std::move(msg)); } else if constexpr (std::is_same_v) { @@ -437,7 +439,6 @@ void fsm::step(server_id from, const candidate& c, Message&& msg) { template void fsm::step(server_id from, const follower& c, Message&& msg) { if constexpr (std::is_same_v) { - // Got AppendEntries RPC from self append_entries(from, std::move(msg)); } else if constexpr (std::is_same_v) { request_vote(from, std::move(msg)); @@ -548,7 +549,9 @@ void fsm::step(server_id from, Message&& msg) { // leader becomes idle. _current_leader = from; } - assert(_current_leader == from); + if (_current_leader != from) { + on_internal_error_noexcept(logger, "Got append request or install snpaphot from unexpected leader"); + } } } diff --git a/raft/tracker.cc b/raft/tracker.cc index 1259ab8ffc..4513667c70 100644 --- a/raft/tracker.cc +++ b/raft/tracker.cc @@ -20,7 +20,6 @@ */ #include "tracker.hh" #include -#include namespace raft {