From: Kefu Chai Date: Thu, 17 Dec 2020 03:38:19 +0000 (+0800) Subject: crimson/osd: do not use do_with() for capturing target pg_shards X-Git-Tag: v16.1.0~202^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2254c24dc5892162f8bc1e73dfbb9a756d25085d;p=ceph.git crimson/osd: do not use do_with() for capturing target pg_shards it's perfectly fine to check for empty, and pass it to seastar::parallel_for_each(). Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/replicated_recovery_backend.cc b/src/crimson/osd/replicated_recovery_backend.cc index 540ba5a46008..a4924eb347ff 100644 --- a/src/crimson/osd/replicated_recovery_backend.cc +++ b/src/crimson/osd/replicated_recovery_backend.cc @@ -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& 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(); msg->from = pg.get_pg_whoami(); diff --git a/src/crimson/osd/replicated_recovery_backend.h b/src/crimson/osd/replicated_recovery_backend.h index 848f41fbc9cf..33650f3331db 100644 --- a/src/crimson/osd/replicated_recovery_backend.h +++ b/src/crimson/osd/replicated_recovery_backend.h @@ -115,8 +115,7 @@ private: seastar::future<> maybe_push_shards( const hobject_t& soid, - eversion_t need, - std::vector& shards); + eversion_t need); /// read the remaining extents of object to be recovered and fill push_op /// with them