From: Samuel Just Date: Thu, 14 Dec 2023 06:41:00 +0000 (-0800) Subject: crimson/.../client_request_common: simplify recover_missings X-Git-Tag: v19.3.0~347^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b8bd69df337491524f324be3aabdb870b29b6ade;p=ceph-ci.git crimson/.../client_request_common: simplify recover_missings - Modify ClientRequest::snaps_need_to_recover() to return all relevant snaps including the operation target. - Update ClientRequest::snaps_need_to_recover() and CommonClientRequest::recover_missings to use set::set for snaps. - Remove special handling for soid from CommonClientRequest::recover_missings - Simplify CommonClientRequest::recover_missings. Signed-off-by: Samuel Just --- diff --git a/src/crimson/osd/osd_operations/client_request.h b/src/crimson/osd/osd_operations/client_request.h index 43535e156c5..27d0c0ef65d 100644 --- a/src/crimson/osd/osd_operations/client_request.h +++ b/src/crimson/osd/osd_operations/client_request.h @@ -160,11 +160,15 @@ public: } auto get_instance_handle() { return instance_handle; } - std::vector snaps_need_to_recover() { - std::vector ret; + std::set snaps_need_to_recover() { + std::set ret; + auto target = m->get_hobj(); + if (!target.is_head()) { + ret.insert(target.snap); + } for (auto &op : m->ops) { if (op.op.op == CEPH_OSD_OP_ROLLBACK) { - ret.emplace_back((snapid_t)op.op.snap.snapid); + ret.insert((snapid_t)op.op.snap.snapid); } } return ret; diff --git a/src/crimson/osd/osd_operations/client_request_common.cc b/src/crimson/osd/osd_operations/client_request_common.cc index 903da59a3dc..c406a6c8330 100644 --- a/src/crimson/osd/osd_operations/client_request_common.cc +++ b/src/crimson/osd/osd_operations/client_request_common.cc @@ -19,44 +19,37 @@ InterruptibleOperation::template interruptible_future<> CommonClientRequest::recover_missings( Ref &pg, const hobject_t& soid, - std::vector &&snaps) + std::set &&snaps) { - using interruptor = InterruptibleOperation::interruptor; LOG_PREFIX(CommonClientRequest::recover_missings); - auto fut = interruptor::now(); if (!pg->is_primary()) { - DEBUGI("process_op: Skipping do_recover_missing on non primary pg"); - return fut; - } - if (!soid.is_head()) { - fut = do_recover_missing(pg, soid.get_head()); + DEBUGDPP( + "Skipping recover_missings on non primary pg for soid {}", *pg, soid); + return seastar::now(); } - return seastar::do_with( - std::move(snaps), - [pg, soid, fut=std::move(fut)](auto &snaps) mutable { - return fut.then_interruptible([&snaps, pg, soid]() mutable { - return pg->obc_loader.with_obc( - soid.get_head(), - [&snaps, pg, soid](auto head, auto) mutable { - auto oid = resolve_oid(head->get_head_ss(), soid); - assert(oid); - return do_recover_missing(pg, *oid - ).then_interruptible([&snaps, pg, soid, head]() mutable { - return InterruptibleOperation::interruptor::do_for_each( - snaps, - [pg, soid, head](auto &snap) mutable { - auto coid = head->obs.oi.soid; - coid.snap = snap; - auto oid = resolve_oid(head->get_head_ss(), coid); - assert(oid); - return do_recover_missing(pg, *oid); - }); - }); + return do_recover_missing( + pg, soid.get_head() + ).then_interruptible([snaps=std::move(snaps), pg, soid]() mutable { + return pg->obc_loader.with_obc( + soid.get_head(), + [snaps=std::move(snaps), pg, soid](auto head, auto) mutable { + return seastar::do_with( + std::move(snaps), + [pg, soid, head](auto &snaps) mutable { + return InterruptibleOperation::interruptor::do_for_each( + snaps, + [pg, soid, head](auto &snap) mutable { + auto coid = head->obs.oi.soid; + coid.snap = snap; + auto oid = resolve_oid(head->get_head_ss(), coid); + assert(oid); + return do_recover_missing(pg, *oid); + }); }); - }).handle_error_interruptible( - crimson::ct_error::assert_all("unexpected error") - ); - }); + }); + }).handle_error_interruptible( + crimson::ct_error::assert_all("unexpected error") + ); } typename InterruptibleOperation::template interruptible_future<> diff --git a/src/crimson/osd/osd_operations/client_request_common.h b/src/crimson/osd/osd_operations/client_request_common.h index 46aa038e343..98ee1ef123b 100644 --- a/src/crimson/osd/osd_operations/client_request_common.h +++ b/src/crimson/osd/osd_operations/client_request_common.h @@ -15,7 +15,7 @@ struct CommonClientRequest { recover_missings( Ref &pg, const hobject_t& soid, - std::vector &&snaps); + std::set &&snaps); static InterruptibleOperation::template interruptible_future<> do_recover_missing(Ref& pg, const hobject_t& soid);