]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: Heartbeat::add_reporter_peers() returns future
authorKefu Chai <kchai@redhat.com>
Thu, 19 Sep 2019 08:51:19 +0000 (16:51 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 19 Sep 2019 10:23:20 +0000 (18:23 +0800)
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 <kchai@redhat.com>
src/crimson/osd/heartbeat.cc
src/crimson/osd/heartbeat.h

index 32ba959996d3954279d4b0bad7c7ca1041239ab7..4c1d76d46778a6d7e63938412ee5f2c390bf9361 100644 (file)
@@ -139,7 +139,7 @@ seastar::future<Heartbeat::osds_t> 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<string>("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<size_t>(
     local_conf().get_val<int64_t>("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;
index 5c7cabc39a7421a224ae1b6e1f83e374a7a14839..96a67cc8363a4d863e9d07e4685576fc6c16d08a 100644 (file)
@@ -67,7 +67,7 @@ private:
   /// @return peers not needed in this epoch
   seastar::future<osds_t> 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);