From: Kefu Chai Date: Thu, 19 Sep 2019 09:31:22 +0000 (+0800) Subject: crimson/osd: add_peer() in parallel X-Git-Tag: v15.1.0~1487^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c345b593dac48591fd948c148567c32c031976f5;p=ceph.git crimson/osd: add_peer() in parallel we should not add peers in background, and we can do this in parallel! Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/heartbeat.cc b/src/crimson/osd/heartbeat.cc index 4c1d76d46778..374d2e3e73f4 100644 --- a/src/crimson/osd/heartbeat.cc +++ b/src/crimson/osd/heartbeat.cc @@ -186,13 +186,18 @@ seastar::future<> Heartbeat::update_peers(int whoami) }); }).then([=] { // or too few? + vector want; auto osdmap = service.get_osdmap_service().get_map(); for (auto next = osdmap->get_next_up_osd_after(whoami); peers.size() < min_peers && next >= 0 && next != whoami; next = osdmap->get_next_up_osd_after(next)) { - add_peer(next, osdmap->get_epoch()); + want.push_back(next); } - return seastar::now(); + return seastar::parallel_for_each( + std::move(want), + [epoch=osdmap->get_epoch(), this](int osd) { + return add_peer(osd, epoch); + }); }); }