From: Kefu Chai Date: Sun, 20 Dec 2020 15:12:31 +0000 (+0800) Subject: crimson/osd: load omap header and xattr in parallel X-Git-Tag: v16.1.0~146^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8497483229fbecd22dcd5f7595d56ee17e75a20d;p=ceph.git crimson/osd: load omap header and xattr in parallel no need to load them sequentially. Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/replicated_recovery_backend.cc b/src/crimson/osd/replicated_recovery_backend.cc index b0fbe097d01..644c51eb9e1 100644 --- a/src/crimson/osd/replicated_recovery_backend.cc +++ b/src/crimson/osd/replicated_recovery_backend.cc @@ -362,26 +362,31 @@ seastar::future ReplicatedRecoveryBackend::build_push_op( return [this, &recovery_info, &progress, &new_progress, &oi, &v, pop=&pop] { v = recovery_info.version; if (progress.first) { - return backend->omap_get_header(coll, ghobject_t(recovery_info.soid)).safe_then( - [this, &recovery_info, pop](auto bl) { - pop->omap_header.claim_append(bl); - return store->get_attrs(coll, ghobject_t(recovery_info.soid)); - }).safe_then([&oi, pop, &new_progress, &v](auto attrs) mutable { - for (auto& [key, val] : attrs) { - pop->attrset[std::move(key)].push_back(std::move(val)); - } - logger().debug("build_push_op: {}", pop->attrset[OI_ATTR]); - oi.decode(pop->attrset[OI_ATTR]); - new_progress.first = false; - if (v == eversion_t()) { - v = oi.version; - } - return seastar::make_ready_future<>(); - }, crimson::os::FuturizedStore::read_errorator::all_same_way( - [] (const std::error_code& e) { - return seastar::make_exception_future<>(e); - }) - ); + return seastar::when_all_succeed( + backend->omap_get_header(coll, ghobject_t(recovery_info.soid)).safe_then( + [&pop](auto bl) { + pop->omap_header.claim_append(bl); + }, crimson::os::FuturizedStore::read_errorator::all_same_way( + [] (const std::error_code& e) { + return seastar::make_exception_future<>(e); + })), + store->get_attrs(coll, ghobject_t(recovery_info.soid)).safe_then( + [&oi, pop, &v](auto attrs) mutable { + for (auto& [key, val] : attrs) { + pop->attrset[std::move(key)].push_back(std::move(val)); + } + logger().debug("build_push_op: {}", pop->attrset[OI_ATTR]); + oi.decode(pop->attrset[OI_ATTR]); + if (v == eversion_t()) { + v = oi.version; + } + }, crimson::os::FuturizedStore::read_errorator::all_same_way( + [] (const std::error_code& e) { + return seastar::make_exception_future<>(e); + })) + ).then_unpack([&new_progress] { + new_progress.first = false; + }); } return seastar::make_ready_future<>(); }().then([this, &recovery_info, &progress, &new_progress, &available, &pop]() mutable {