diff --git a/raft/raft.cc b/raft/raft.cc index d8bdf61ad6..37106c11bd 100644 --- a/raft/raft.cc +++ b/raft/raft.cc @@ -6,9 +6,21 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ #include "raft.hh" +#include "to_string.hh" namespace raft { seastar::logger logger("raft"); +std::ostream& operator<<(std::ostream& os, const raft::server_address& addr) { + return os << addr.id; +} + +std::ostream& operator<<(std::ostream& os, const raft::configuration& cfg) { + if (cfg.previous.empty()) { + return os << cfg.current; + } + return os << format("{}->{}", cfg.previous, cfg.current); +} + } // end of namespace raft diff --git a/raft/raft.hh b/raft/raft.hh index 65746e5686..79bb119259 100644 --- a/raft/raft.hh +++ b/raft/raft.hh @@ -63,6 +63,8 @@ struct server_address { bool operator<(const server_address& rhs) const { return id < rhs.id; } + + friend std::ostream& operator<<(std::ostream&, const server_address&); }; } // end of namespace raft @@ -105,7 +107,7 @@ struct configuration { } } - configuration(server_address_set current_arg = {}, server_address_set previous_arg = {}) + explicit configuration(server_address_set current_arg = {}, server_address_set previous_arg = {}) : current(std::move(current_arg)), previous(std::move(previous_arg)) { if (current.count(server_address{server_id()}) || previous.count(server_address{server_id()})) { throw std::invalid_argument("raft::configuration: id zero is not supported"); @@ -195,6 +197,8 @@ struct configuration { assert(is_joint()); previous.clear(); } + + friend std::ostream& operator<<(std::ostream&, const configuration&); }; struct log_entry { @@ -270,7 +274,7 @@ struct snapshot_descriptor { index_t idx = index_t(0); term_t term = term_t(0); // The committed configuration in the snapshot - configuration config; + configuration config{}; // Id of the snapshot. snapshot_id id; }; diff --git a/test/raft/randomized_nemesis_test.cc b/test/raft/randomized_nemesis_test.cc index 0ed12eb6c5..264303a587 100644 --- a/test/raft/randomized_nemesis_test.cc +++ b/test/raft/randomized_nemesis_test.cc @@ -2403,12 +2403,6 @@ std::ostream& operator<<(std::ostream& os, const AppendReg::ret& r) { return os << format("ret{{{}, {}}}", r.x, r.prev); } -namespace raft { -std::ostream& operator<<(std::ostream& os, const raft::server_address& a) { - return os << a.id; -} -} - SEASTAR_TEST_CASE(basic_generator_test) { using op_type = operation::invocable, diff --git a/test/raft/replication_test.cc b/test/raft/replication_test.cc index 53407e29b3..5577d2ca79 100644 --- a/test/raft/replication_test.cc +++ b/test/raft/replication_test.cc @@ -375,7 +375,7 @@ RAFT_TEST_CASE(rpc_configuration_truncate_restore_from_snp, (test_case{ .log = { raft::log_entry{raft::term_t(1), raft::index_t(1), config{.curr = {node_id{0},node_id{1},node_id{2},node_id{3}}, .prev = {node_id{0},node_id{1},node_id{2}}}}}, - .snapshot = {.config = address_set({node_id{0},node_id{1},node_id{2}}) + .snapshot = {.config = raft::configuration{address_set({node_id{0},node_id{1},node_id{2}})} } }}, // A should see {A, B, C, D} as RPC config since @@ -472,7 +472,7 @@ RAFT_TEST_CASE(rpc_configuration_truncate_restore_from_log, (test_case{ }, }, // all nodes in snapshot config {A, B, C, D} (original) - .snapshot = {.config = address_set({node_id{0},node_id{1},node_id{2},node_id{3}}) + .snapshot = {.config = raft::configuration{address_set({node_id{0},node_id{1},node_id{2},node_id{3}})} } }}, @@ -522,7 +522,7 @@ RAFT_TEST_CASE(rpc_configuration_truncate_restore_from_log, (test_case{ }, }, // all nodes in snapshot config {A, B, C, D} (original) - .snapshot = {.config = address_set({node_id{0},node_id{1},node_id{2},node_id{3}}) + .snapshot = {.config = raft::configuration{address_set({node_id{0},node_id{1},node_id{2},node_id{3}})} } }},