diff --git a/raft/fsm.cc b/raft/fsm.cc index 3d9e59ebb0..831c75dc80 100644 --- a/raft/fsm.cc +++ b/raft/fsm.cc @@ -855,27 +855,6 @@ void fsm::request_vote_reply(server_id from, vote_reply&& reply) { } } -static size_t entry_size(const log_entry& e) { - struct overloaded { - size_t operator()(const command& c) { - return c.size(); - } - size_t operator()(const configuration& c) { - size_t size = 0; - for (auto& s : c.current) { - size += sizeof(s.addr.id); - size += s.addr.info.size(); - size += sizeof(s.can_vote); - } - return size; - } - size_t operator()(const log_entry::dummy& d) { - return 0; - } - }; - return std::visit(overloaded{}, e.data) + sizeof(e); -} - void fsm::replicate_to(follower_progress& progress, bool allow_empty) { logger.trace("replicate_to[{}->{}]: called next={} match={}", @@ -935,7 +914,7 @@ void fsm::replicate_to(follower_progress& progress, bool allow_empty) { req.entries.push_back(entry); logger.trace("replicate_to[{}->{}]: send entry idx={}, term={}", _my_id, progress.id, entry->idx, entry->term); - size += entry_size(*entry); + size += entry->get_size(); next_idx++; if (progress.state == follower_progress::state::PROBE) { break; // in PROBE mode send only one entry diff --git a/raft/raft.cc b/raft/raft.cc index 37599ca0d7..a499a8a119 100644 --- a/raft/raft.cc +++ b/raft/raft.cc @@ -12,6 +12,27 @@ namespace raft { seastar::logger logger("raft"); +size_t log_entry::get_size() const { + struct overloaded { + size_t operator()(const command& c) { + return c.size(); + } + size_t operator()(const configuration& c) { + size_t size = 0; + for (auto& s : c.current) { + size += sizeof(s.addr.id); + size += s.addr.info.size(); + size += sizeof(s.can_vote); + } + return size; + } + size_t operator()(const log_entry::dummy& d) { + return 0; + } + }; + return std::visit(overloaded{}, this->data) + sizeof(*this); +} + } // end of namespace raft auto fmt::formatter::format(const raft::server_address& addr, diff --git a/raft/raft.hh b/raft/raft.hh index 65f3afd281..348c2642ec 100644 --- a/raft/raft.hh +++ b/raft/raft.hh @@ -239,6 +239,8 @@ struct log_entry { term_t term; index_t idx; std::variant data; + + size_t get_size() const; }; using log_entry_ptr = seastar::lw_shared_ptr;