From 6d5f5ed69c247b9bb621072393d743c5580e69fd Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Thu, 19 Sep 2019 16:51:19 +0800 Subject: [PATCH] crimson/osd: Heartbeat::add_reporter_peers() returns future the sole caller `Heartbeat::update_peers()` also returns future, so there is no reason that `add_reporter_peers()` runs in background. Signed-off-by: Kefu Chai --- src/crimson/osd/heartbeat.cc | 15 +++++++++------ src/crimson/osd/heartbeat.h | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/crimson/osd/heartbeat.cc b/src/crimson/osd/heartbeat.cc index 32ba959996d..4c1d76d4677 100644 --- a/src/crimson/osd/heartbeat.cc +++ b/src/crimson/osd/heartbeat.cc @@ -139,7 +139,7 @@ seastar::future Heartbeat::remove_down_peers() }); } -void Heartbeat::add_reporter_peers(int whoami) +seastar::future<> Heartbeat::add_reporter_peers(int whoami) { auto osdmap = service.get_osdmap_service().get_map(); // include next and previous up osds to ensure we have a fully-connected set @@ -156,17 +156,20 @@ void Heartbeat::add_reporter_peers(int whoami) auto subtree = local_conf().get_val("mon_osd_reporter_subtree_level"); osdmap->get_random_up_osds_by_subtree( whoami, subtree, min_down, want, &want); - for (auto osd : want) { - add_peer(osd, osdmap->get_epoch()); - } + return seastar::parallel_for_each( + std::move(want), + [epoch=osdmap->get_epoch(), this](int osd) { + return add_peer(osd, epoch); + }); } seastar::future<> Heartbeat::update_peers(int whoami) { const auto min_peers = static_cast( local_conf().get_val("osd_heartbeat_min_peers")); - return remove_down_peers().then([=](osds_t&& extra) { - add_reporter_peers(whoami); + return add_reporter_peers(whoami).then([this] { + return remove_down_peers(); + }).then([=](osds_t&& extra) { // too many? struct iteration_state { osds_t::const_iterator where; diff --git a/src/crimson/osd/heartbeat.h b/src/crimson/osd/heartbeat.h index 5c7cabc39a7..96a67cc8363 100644 --- a/src/crimson/osd/heartbeat.h +++ b/src/crimson/osd/heartbeat.h @@ -67,7 +67,7 @@ private: /// @return peers not needed in this epoch seastar::future remove_down_peers(); /// add enough reporters for fast failure detection - void add_reporter_peers(int whoami); + seastar::future<> add_reporter_peers(int whoami); seastar::future<> start_messenger(ceph::net::Messenger& msgr, const entity_addrvec_t& addrs); -- 2.39.5