From: Radoslaw Zarzynski Date: Tue, 6 Dec 2022 14:04:17 +0000 (+0000) Subject: crimson/osd: introduce WaitSubop stage to SnapTrimEvent X-Git-Tag: v18.1.0~260^2~18 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=6df8e3965cdf54aab05bf4ff3cb011d017e0a550;p=ceph.git crimson/osd: introduce WaitSubop stage to SnapTrimEvent Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/osd_operations/snaptrim_event.cc b/src/crimson/osd/osd_operations/snaptrim_event.cc index 933ad6dcc5a61..816e06e44a6d3 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.cc +++ b/src/crimson/osd/osd_operations/snaptrim_event.cc @@ -151,9 +151,15 @@ seastar::future SnapTrimEvent::with_pg( snapid); subop_blocker.emplace_back(op->get_id(), std::move(fut)); } - return subop_blocker.wait_completion().then([] { - return seastar::make_ready_future( - seastar::stop_iteration::no); + return enter_stage( + wait_subop + ).then_interruptible([this] { + logger().debug("{}: awaiting completion", *this); + return subop_blocker.wait_completion().then([this] { + logger().debug("{}: all completed", *this); + return interruptor::make_ready_future( + seastar::stop_iteration::no); + }); }); }); }); diff --git a/src/crimson/osd/osd_operations/snaptrim_event.h b/src/crimson/osd/osd_operations/snaptrim_event.h index 4ec54af66a390..7f5d2e5910df0 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.h +++ b/src/crimson/osd/osd_operations/snaptrim_event.h @@ -61,6 +61,13 @@ private: private: std::vector subops; } subop_blocker; + + // we don't need to synchronize with other instances of SnapTrimEvent; + // it's here for the sake of op tracking. + struct WaitSubop : OrderedConcurrentPhaseT { + static constexpr auto type_name = "SnapTrimEvent::wait_subop"; + } wait_subop; + PipelineHandle handle; Ref pg; SnapMapper& snap_mapper; @@ -76,6 +83,7 @@ public: CommonPGPipeline::RecoverMissing::BlockingEvent, CommonPGPipeline::GetOBC::BlockingEvent, CommonPGPipeline::Process::BlockingEvent, + WaitSubop::BlockingEvent, CompletionEvent > tracking_events; };