]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: do not use do_with() for capturing target pg_shards
authorKefu Chai <kchai@redhat.com>
Thu, 17 Dec 2020 03:38:19 +0000 (11:38 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 17 Dec 2020 11:35:32 +0000 (19:35 +0800)
it's perfectly fine to check for empty, and pass it to
seastar::parallel_for_each().

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

index 540ba5a46008ad07f5e629441cd6f372a90bf5c4..a4924eb347ff3d04c505c358a48df8a16793c26a 100644 (file)
@@ -27,23 +27,21 @@ seastar::future<> ReplicatedRecoveryBackend::recover_object(
   assert(is_recovering(soid));
   // start tracking the recovery of soid
   return maybe_pull_missing_obj(soid, need).then([this, soid, need] {
-    return seastar::do_with(get_shards_to_push(soid),
-      [this, soid, need](auto& shards) {
-        return maybe_push_shards(soid, need, shards);
-      });
+    return maybe_push_shards(soid, need);
   });
 }
 
 seastar::future<>
 ReplicatedRecoveryBackend::maybe_push_shards(
   const hobject_t& soid,
-  eversion_t need,
-  std::vector<pg_shard_t>& shards)
+  eversion_t need)
 {
-  auto push_func = [this, soid, need, &shards] {
+  auto push_func = [this, soid, need] {
     auto prepare_pops = seastar::now();
-    if (!shards.empty()) {
-      prepare_pops = seastar::parallel_for_each(shards, [this, need, soid](auto shard) {
+    if (auto shards = get_shards_to_push(soid);
+       !shards.empty()) {
+      prepare_pops = seastar::parallel_for_each(std::move(shards),
+                                               [this, need, soid](auto shard) {
        return prep_push(soid, need, shard).then([this, soid, shard](auto push) {
           auto msg = make_message<MOSDPGPush>();
           msg->from = pg.get_pg_whoami();
index 848f41fbc9cf0c4b2f888262cfdb2d94ff139a49..33650f3331dbe6620950e3510cd3d76f8495d4ca 100644 (file)
@@ -115,8 +115,7 @@ private:
 
   seastar::future<> maybe_push_shards(
     const hobject_t& soid,
-    eversion_t need,
-    std::vector<pg_shard_t>& shards);
+    eversion_t need);
 
   /// read the remaining extents of object to be recovered and fill push_op
   /// with them