diff --git a/include/libnuraft/peer.hxx b/include/libnuraft/peer.hxx index ca20e88d..62d67739 100644 --- a/include/libnuraft/peer.hxx +++ b/include/libnuraft/peer.hxx @@ -74,6 +74,7 @@ public: , reconn_backoff_(0) , suppress_following_error_(false) , abandoned_(false) + , lost_by_leader_(false) , rsv_msg_(nullptr) , rsv_msg_handler_(nullptr) , l_(logger) @@ -502,7 +503,11 @@ private: */ std::atomic abandoned_; - std::atomic lost_by_leader_ {false}; + /** + * If `true`, this peer is considered unresponsive + * and treated as if it has been lost. + */ + std::atomic lost_by_leader_; /** * Reserved message that should be sent next time. diff --git a/src/raft_server.cxx b/src/raft_server.cxx index 839e3eda..7fd00a37 100644 --- a/src/raft_server.cxx +++ b/src/raft_server.cxx @@ -861,10 +861,10 @@ void raft_server::handle_peer_resp(ptr& resp, ptr& err) peer* pp = entry->second.get(); int rpc_errs = pp->get_rpc_errs(); if (rpc_errs >= raft_server::raft_limits_.warning_limit_) { - pp->set_recovered(); p_wn("recovered from RPC failure from peer %d, %d errors", resp->get_src(), rpc_errs); } + pp->set_recovered(); pp->reset_rpc_errs(); pp->reset_resp_timer(); } @@ -1044,6 +1044,7 @@ void raft_server::become_leader() { pp->set_next_log_idx(log_store_->next_slot()); enable_hb_for_peer(*pp); + pp->set_recovered(); } // If there are uncommitted logs, search if conf log exists.