From 5f7628da12e36cf45b0a537ba535698d3d2995ea Mon Sep 17 00:00:00 2001 From: Asias He Date: Fri, 7 Aug 2015 11:12:34 +0800 Subject: [PATCH] gossip: Run real_mark_alive under seastar::async context Now on_dead is now under seastar::async context. --- gms/gossiper.cc | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/gms/gossiper.cc b/gms/gossiper.cc index 7cedad838f..a4d6e230ac 100644 --- a/gms/gossiper.cc +++ b/gms/gossiper.cc @@ -998,13 +998,21 @@ void gossiper::real_mark_alive(inet_address addr, endpoint_state local_state) { void gossiper::mark_dead(inet_address addr, endpoint_state& local_state) { logger.trace("marking as down {}", addr); local_state.mark_dead(); - _live_endpoints.erase(addr); - _unreachable_endpoints[addr] = now(); - logger.info("inet_address {} is now DOWN", addr); - for (auto& subscriber : _subscribers) { - subscriber->on_dead(addr, local_state); - logger.trace("Notified {}", subscriber); - } + seastar::async([this, addr, local_state] { + _live_endpoints.erase(addr); + _unreachable_endpoints[addr] = now(); + logger.info("inet_address {} is now DOWN", addr); + for (auto& subscriber : _subscribers) { + subscriber->on_dead(addr, local_state); + logger.trace("Notified {}", subscriber); + } + }).then_wrapped([addr] (auto&& f) { + try { + f.get(); + } catch (...) { + logger.error("Fail to mark_dead={}: {}", addr, std::current_exception()); + } + }); } // Runs inside seastar::async context