From 44a59eae34428d6fb29938188bf8a8550f3bff2a Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Tue, 28 May 2024 13:47:48 -0700 Subject: [PATCH] crimson/.../snaptrim_event: convert SnapTrimObjSubEvent::start to a coroutine Signed-off-by: Samuel Just --- .../osd/osd_operations/snaptrim_event.cc | 102 +++++++++--------- 1 file changed, 52 insertions(+), 50 deletions(-) diff --git a/src/crimson/osd/osd_operations/snaptrim_event.cc b/src/crimson/osd/osd_operations/snaptrim_event.cc index e7686a63652..1f284136105 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.cc +++ b/src/crimson/osd/osd_operations/snaptrim_event.cc @@ -414,65 +414,67 @@ SnapTrimObjSubEvent::remove_or_update( SnapTrimObjSubEvent::snap_trim_obj_subevent_ret_t SnapTrimObjSubEvent::start() { - return enter_stage( + auto exit_handle = seastar::defer([this] { + logger().debug("{}: exit", *this); + handle.exit(); + }); + + co_await enter_stage( client_pp().wait_for_active - ).then_interruptible([this] { - return with_blocking_event([this] (auto&& trigger) { + ); + + co_await with_blocking_event( + [this] (auto&& trigger) { return pg->wait_for_active_blocker.wait(std::move(trigger)); }); - }).then_interruptible([this] { - return enter_stage( - client_pp().recover_missing); - }).then_interruptible([] { - //return do_recover_missing(pg, get_target_oid()); - return seastar::now(); - }).then_interruptible([this] { - return enter_stage( - client_pp().get_obc); - }).then_interruptible([this] { - logger().debug("{}: getting obc for {}", *this, coid); - // end of commonality - // lock both clone's and head's obcs - return pg->obc_loader.with_obc( - coid, - [this](auto head_obc, auto clone_obc) { + + co_await enter_stage( + client_pp().recover_missing); + + // co_await do_recover_missing(pg, get_target_oid()); + + co_await enter_stage( + client_pp().get_obc); + + logger().debug("{}: getting obc for {}", *this, coid); + // end of commonality + // lock both clone's and head's obcs + co_await pg->obc_loader.with_obc( + coid, + [this](auto head_obc, auto clone_obc) { logger().debug("{}: got clone_obc={}", *this, clone_obc->get_oid()); return enter_stage( client_pp().process ).then_interruptible( [this,clone_obc=std::move(clone_obc), head_obc=std::move(head_obc)]() mutable { - logger().debug("{}: processing clone_obc={}", *this, clone_obc->get_oid()); - return remove_or_update( - clone_obc, head_obc - ).safe_then_interruptible([clone_obc, this](auto&& txn) mutable { - auto [submitted, all_completed] = pg->submit_transaction( - std::move(clone_obc), - std::move(txn), - std::move(osd_op_p), - std::move(log_entries)); - return submitted.then_interruptible( - [all_completed=std::move(all_completed), this] () mutable { - return enter_stage( - wait_repop - ).then_interruptible([all_completed=std::move(all_completed)] () mutable { - return std::move(all_completed); - }); - }); - }); - }); + logger().debug("{}: processing clone_obc={}", *this, clone_obc->get_oid()); + return remove_or_update( + clone_obc, head_obc + ).safe_then_interruptible([clone_obc, this](auto&& txn) mutable { + auto [submitted, all_completed] = pg->submit_transaction( + std::move(clone_obc), + std::move(txn), + std::move(osd_op_p), + std::move(log_entries)); + return submitted.then_interruptible( + [all_completed=std::move(all_completed), this] () mutable { + return enter_stage( + wait_repop + ).then_interruptible([all_completed=std::move(all_completed)] () mutable { + return std::move(all_completed); + }); + }); + }); + }); }, - false).si_then([this] { - logger().debug("{}: completed", *this); - return handle.complete(); - }).handle_error_interruptible( - remove_or_update_iertr::pass_further{}, - crimson::ct_error::assert_all{"unexpected error in SnapTrimObjSubEvent"} - ); - }).finally([this] { - logger().debug("{}: exit", *this); - handle.exit(); - }); + false + ).handle_error_interruptible( + remove_or_update_iertr::pass_further{}, + crimson::ct_error::assert_all{"unexpected error in SnapTrimObjSubEvent"} + ); + + logger().debug("{}: completed", *this); + co_await interruptor::make_interruptible(handle.complete()); } void SnapTrimObjSubEvent::print(std::ostream &lhs) const -- 2.39.5