From: Kefu Chai Date: Thu, 17 Dec 2020 04:13:46 +0000 (+0800) Subject: crimson/osd: do not use a now() future if no shard to push X-Git-Tag: v16.1.0~202^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=765b86e32cf42b38691b388b833b81d25c280350;p=ceph.git crimson/osd: do not use a now() future if no shard to push in that case, seastar::parallel_for_each() returns a `make_ready_future<>()`, so no need to optimize for this case. Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/replicated_recovery_backend.cc b/src/crimson/osd/replicated_recovery_backend.cc index 6ae216f1f1b9..53bce25f090c 100644 --- a/src/crimson/osd/replicated_recovery_backend.cc +++ b/src/crimson/osd/replicated_recovery_backend.cc @@ -53,28 +53,24 @@ ReplicatedRecoveryBackend::maybe_push_shards( const hobject_t& soid, eversion_t need) { - auto prepare_pops = seastar::now(); - 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(); - msg->pgid = pg.get_pgid(); - msg->map_epoch = pg.get_osdmap_epoch(); - msg->min_epoch = pg.get_last_peering_reset(); - msg->pushes.push_back(std::move(push)); - msg->set_priority(pg.get_recovery_op_priority()); - return shard_services.send_to_osd(shard.osd, - std::move(msg), - pg.get_osdmap_epoch()).then( - [this, soid, shard] { - return recovering.at(soid).wait_for_pushes(shard); - }); + return seastar::parallel_for_each(get_shards_to_push(soid), + [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(); + msg->pgid = pg.get_pgid(); + msg->map_epoch = pg.get_osdmap_epoch(); + msg->min_epoch = pg.get_last_peering_reset(); + msg->pushes.push_back(std::move(push)); + msg->set_priority(pg.get_recovery_op_priority()); + return shard_services.send_to_osd(shard.osd, + std::move(msg), + pg.get_osdmap_epoch()).then( + [this, soid, shard] { + return recovering.at(soid).wait_for_pushes(shard); }); }); - } - return prepare_pops.then([this, soid] { + }).then([this, soid] { auto &recovery = recovering.at(soid); auto push_info = recovery.pushing.begin(); object_stat_sum_t stat = {};