gossiper: make send_gossip_echo cancellable
Currently send_gossip_echo has a 22 seconds timeout during which _abort_source is ignored. Mark the verb as cancellable so it can be canceled on shutdown / abort. Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
This commit is contained in:
@@ -955,7 +955,7 @@ future<std::set<inet_address>> gossiper::get_unreachable_members_synchronized()
|
||||
}
|
||||
|
||||
future<> gossiper::send_echo(locator::host_id host_id, std::chrono::milliseconds timeout_ms, int64_t generation_number, bool notify_up) {
|
||||
return ser::gossip_rpc_verbs::send_gossip_echo(&_messaging, host_id, netw::messaging_service::clock_type::now() + timeout_ms, generation_number, notify_up);
|
||||
return ser::gossip_rpc_verbs::send_gossip_echo(&_messaging, host_id, netw::messaging_service::clock_type::now() + timeout_ms, _abort_source, generation_number, notify_up);
|
||||
}
|
||||
|
||||
future<> gossiper::failure_detector_loop_for_node(locator::host_id host_id, generation_type gossip_generation, uint64_t live_endpoints_version) {
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include "gms/gossip_digest_syn.hh"
|
||||
|
||||
namespace gms {
|
||||
verb [[with_client_info, with_timeout]] gossip_echo (int64_t generation_number [[version 4.6.0]], bool notify_up [[version 6.1.0]])
|
||||
verb [[with_client_info, with_timeout, cancellable]] gossip_echo (int64_t generation_number [[version 4.6.0]], bool notify_up [[version 6.1.0]])
|
||||
verb [[with_client_info, one_way]] gossip_shutdown (gms::inet_address from, int64_t generation_number [[version 4.6.0]])
|
||||
verb [[with_client_info, one_way, ip]] gossip_digest_syn (gms::gossip_digest_syn syn)
|
||||
verb [[with_client_info, one_way]] gossip_digest_ack (gms::gossip_digest_ack ask)
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <seastar/core/app-template.hh>
|
||||
#include <seastar/core/sstring.hh>
|
||||
#include <seastar/core/thread.hh>
|
||||
#include <seastar/core/coroutine.hh>
|
||||
#include <seastar/rpc/rpc_types.hh>
|
||||
#include <seastar/util/closeable.hh>
|
||||
#include "db/config.hh"
|
||||
@@ -157,15 +158,12 @@ public:
|
||||
future<> test_echo() {
|
||||
test_logger.info("=== {} ===", __func__);
|
||||
int64_t gen = 0x1;
|
||||
return ser::gossip_rpc_verbs::send_gossip_echo(&ms, _server_id, netw::messaging_service::clock_type::now() + std::chrono::seconds(10), gen, false).then_wrapped([] (auto&& f) {
|
||||
try {
|
||||
f.get();
|
||||
return make_ready_future<>();
|
||||
} catch (std::runtime_error& e) {
|
||||
test_logger.error("test_echo: {}", e.what());
|
||||
}
|
||||
return make_ready_future<>();
|
||||
});
|
||||
abort_source as;
|
||||
try {
|
||||
co_await ser::gossip_rpc_verbs::send_gossip_echo(&ms, _server_id, netw::messaging_service::clock_type::now() + std::chrono::seconds(10), as, gen, false);
|
||||
} catch (...) {
|
||||
test_logger.error("test_echo: {}", std::current_exception());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user