]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: add_peer() in parallel
authorKefu Chai <kchai@redhat.com>
Thu, 19 Sep 2019 09:31:22 +0000 (17:31 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 19 Sep 2019 10:23:20 +0000 (18:23 +0800)
we should not add peers in background, and we can do this in parallel!

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/osd/heartbeat.cc

index 4c1d76d46778a6d7e63938412ee5f2c390bf9361..374d2e3e73f44b33c6f91c36edf9a6ef9c6e69b4 100644 (file)
@@ -186,13 +186,18 @@ seastar::future<> Heartbeat::update_peers(int whoami)
     });
   }).then([=] {
     // or too few?
+    vector<int> 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);
+    });
   });
 }