From: Matan Breizman Date: Mon, 26 Aug 2024 10:07:36 +0000 (+0000) Subject: crimson/osd/osd_operations/snaptrim_event: introduce process_and_submit X-Git-Tag: v20.0.0~1099^2~3 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=38bd4e7c5c3465ca7fd3a06203e9b72ba114761c;p=ceph.git crimson/osd/osd_operations/snaptrim_event: introduce process_and_submit We should be carful with using capturing lambdas with coroutines. Avoid capturing [this] by passing process_and_submit instead. See: https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rcoro-capture Signed-off-by: Matan Breizman --- diff --git a/src/crimson/osd/osd_operations/snaptrim_event.cc b/src/crimson/osd/osd_operations/snaptrim_event.cc index 21d9c116aab22..bb497cc1d3aee 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.cc +++ b/src/crimson/osd/osd_operations/snaptrim_event.cc @@ -436,6 +436,33 @@ SnapTrimObjSubEvent::start() co_await interruptor::make_interruptible(handle.complete()); } +ObjectContextLoader::load_obc_iertr::future<> +SnapTrimObjSubEvent::process_and_submit(ObjectContextRef head_obc, + ObjectContextRef clone_obc) { + logger().debug("{}: got clone_obc={}", *this, clone_obc->get_oid()); + + co_await enter_stage(client_pp().process); + + logger().debug("{}: processing clone_obc={}", *this, clone_obc->get_oid()); + + auto txn = co_await remove_or_update(clone_obc, head_obc); + + auto [submitted, all_completed] = co_await pg->submit_transaction( + std::move(clone_obc), + std::move(txn), + std::move(osd_op_p), + std::move(log_entries) + ); + + co_await std::move(submitted); + + co_await enter_stage(client_pp().wait_repop); + + co_await std::move(all_completed); + + co_return; +} + void SnapTrimObjSubEvent::print(std::ostream &lhs) const { lhs << "SnapTrimObjSubEvent(" diff --git a/src/crimson/osd/osd_operations/snaptrim_event.h b/src/crimson/osd/osd_operations/snaptrim_event.h index 9a656a451bd3f..88a2a0392ea1e 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.h +++ b/src/crimson/osd/osd_operations/snaptrim_event.h @@ -113,6 +113,10 @@ public: private: object_stat_sum_t delta_stats; + ObjectContextLoader::load_obc_iertr::future<> process_and_submit( + ObjectContextRef head_obc, + ObjectContextRef clone_obc); + snap_trim_obj_subevent_ret_t remove_clone( ObjectContextRef obc, ObjectContextRef head_obc,