From 294dcfb204cc4022dc30456141d4e60abee7cd6a Mon Sep 17 00:00:00 2001 From: Alejo Sanchez Date: Sat, 29 May 2021 16:24:15 -0400 Subject: [PATCH] raft: replication test: use lambda visitor for updates Process updates with a lambda visitor. Signed-off-by: Alejo Sanchez --- test/raft/replication_test.cc | 72 ++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 27 deletions(-) diff --git a/test/raft/replication_test.cc b/test/raft/replication_test.cc index 5ffb22a349..1def0bee42 100644 --- a/test/raft/replication_test.cc +++ b/test/raft/replication_test.cc @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -1125,34 +1126,51 @@ future<> run_test(test_case test, bool prevote, bool packet_drops) { // Process all updates in order for (auto update: test.updates) { - if (std::holds_alternative(update)) { - co_await rafts.add_entries(std::get(update).n); - } else if (std::holds_alternative(update)) { - co_await rafts.elect_new_leader(std::get(update).id); - } else if (std::holds_alternative<::disconnect>(update)) { - rafts.disconnect(std::get<::disconnect>(update)); - } else if (std::holds_alternative(update)) { - co_await rafts.partition(std::get(update)); - } else if (std::holds_alternative(update)) { - co_await rafts.stop(std::get(update)); - } else if (std::holds_alternative(update)) { - co_await rafts.reset(std::get(update)); - } else if (std::holds_alternative(update)) { - co_await rafts.wait_log(std::get(update)); - } else if (std::holds_alternative(update)) { - co_await rafts.change_configuration(std::get(update)); - } else if (std::holds_alternative(update)) { - co_await rafts.check_rpc_config(std::get(update)); - } else if (std::holds_alternative(update)) { - rafts.check_rpc_added(std::get(update)); - } else if (std::holds_alternative(update)) { - rafts.check_rpc_removed(std::get(update)); - } else if (std::holds_alternative(update)) { - rafts.rpc_reset_counters(std::get(update)); - } else if (std::holds_alternative(update)) { - auto t = std::get(update); - co_await rafts.tick(t); + co_await std::visit(make_visitor( + [&rafts] (entries update) -> future<> { + co_await rafts.add_entries(update.n); + }, + [&rafts] (new_leader update) -> future<> { + co_await rafts.elect_new_leader(update.id); + }, + [&rafts] (disconnect update) -> future<> { + rafts.disconnect(update); + co_return; + }, + [&rafts] (partition update) -> future<> { + co_await rafts.partition(update); + }, + [&rafts] (stop update) -> future<> { + co_await rafts.stop(update); + }, + [&rafts] (reset update) -> future<> { + co_await rafts.reset(update); + }, + [&rafts] (wait_log update) -> future<> { + co_await rafts.wait_log(update); + }, + [&rafts] (set_config update) -> future<> { + co_await rafts.change_configuration(update); + }, + [&rafts] (check_rpc_config update) -> future<> { + co_await rafts.check_rpc_config(update); + }, + [&rafts] (check_rpc_added update) -> future<> { + rafts.check_rpc_added(update); + co_return; + }, + [&rafts] (check_rpc_removed update) -> future<> { + rafts.check_rpc_removed(update); + co_return; + }, + [&rafts] (rpc_reset_counters update) -> future<> { + rafts.rpc_reset_counters(update); + co_return; + }, + [&rafts] (tick update) -> future<> { + co_await rafts.tick(update); } + ), std::move(update)); } // Reconnect and bring all nodes back into configuration, if needed