diff --git a/service/raft/raft_group0.cc b/service/raft/raft_group0.cc index 9fb4f73c63..b413fde24b 100644 --- a/service/raft/raft_group0.cc +++ b/service/raft/raft_group0.cc @@ -112,7 +112,10 @@ public: _address_map.set_nonexpiring(addr.id); // Notify the direct failure detector that it should track // (or liveness of a specific raft server id. - _direct_fd.add_endpoint(addr.id.id); + if (addr != _my_id) { + // No need to ping self to know it's alive + _direct_fd.add_endpoint(addr.id.id); + } } for (const auto& addr: del) { // RPC 'send' may yield before resolving IP address, diff --git a/service/raft/raft_group_registry.cc b/service/raft/raft_group_registry.cc index cabea9f220..574082ac2e 100644 --- a/service/raft/raft_group_registry.cc +++ b/service/raft/raft_group_registry.cc @@ -27,8 +27,14 @@ logging::logger rslog("raft_group_registry"); class direct_fd_proxy : public raft::failure_detector, public direct_failure_detector::listener { std::unordered_set _alive_set; + raft::server_id _my_id; public: + direct_fd_proxy(raft::server_id my_id) + : _my_id(my_id) + { + } + future<> mark_alive(direct_failure_detector::pinger::endpoint_id id) override { static const auto msg = "marking Raft server {} as alive for raft groups"; @@ -63,7 +69,7 @@ public: } bool is_alive(raft::server_id srv) override { - return _alive_set.contains(srv); + return srv == _my_id || _alive_set.contains(srv); } }; // }}} direct_fd_proxy @@ -145,7 +151,7 @@ raft_group_registry::raft_group_registry(bool is_enabled, , _gossiper_proxy(make_shared(address_map)) , _address_map{address_map} , _direct_fd(fd) - , _direct_fd_proxy(make_shared()) + , _direct_fd_proxy(make_shared(my_id)) , _my_id(my_id) { }