From dcac099a46596091292296fc5e20f14f704a30a6 Mon Sep 17 00:00:00 2001 From: Matan Breizman Date: Mon, 27 Nov 2023 11:33:48 +0000 Subject: [PATCH] crimson/osd/osd_operations/snaptrim_event: move SubOpBlocker to seperate file Signed-off-by: Matan Breizman --- src/crimson/common/subop_blocker.h | 53 +++++++++++++++++++ .../osd/osd_operations/snaptrim_event.cc | 27 +--------- .../osd/osd_operations/snaptrim_event.h | 18 +------ 3 files changed, 56 insertions(+), 42 deletions(-) create mode 100644 src/crimson/common/subop_blocker.h diff --git a/src/crimson/common/subop_blocker.h b/src/crimson/common/subop_blocker.h new file mode 100644 index 0000000000000..a4bb3d8f71086 --- /dev/null +++ b/src/crimson/common/subop_blocker.h @@ -0,0 +1,53 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#pragma once + +#include "osd/osd_op_util.h" +#include "crimson/osd/osd_operation.h" + +namespace crimson::osd { + +using interruptor = + ::crimson::interruptible::interruptor< + ::crimson::osd::IOInterruptCondition>; + +// bases on 998cb8c141bb89aafae298a9d5e130fbd78fe5f2 +template +struct SubOpBlocker : crimson::BlockerT> { + static constexpr const char* type_name = "CompoundOpBlocker"; + + using id_done_t = std::pair; + + void dump_detail(Formatter *f) const final { + f->open_array_section("dependent_operations"); + { + for (const auto &kv : subops) { + f->dump_unsigned("op_id", kv.first->get_id()); + } + } + f->close_section(); + } + + template + void emplace_back(Args&&... args) { + subops.emplace_back(std::forward(args)...); + }; + + T interruptible_wait_completion() { + return interruptor::do_for_each(subops, [](auto&& kv) { + return std::move(kv.second); + }); + } + + T wait_completion() { + return seastar::do_for_each(subops, [](auto&& kv) { + return std::move(kv.second); + }); + } + +private: + std::vector subops; +}; + +} // namespace crimson::osd diff --git a/src/crimson/osd/osd_operations/snaptrim_event.cc b/src/crimson/osd/osd_operations/snaptrim_event.cc index b2e294316dbc9..01ea2a710c336 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.cc +++ b/src/crimson/osd/osd_operations/snaptrim_event.cc @@ -39,31 +39,6 @@ PG::BackgroundProcessLock::lock_with_op(SnapTrimEvent &st_event) noexcept }); } -void SnapTrimEvent::SubOpBlocker::dump_detail(Formatter *f) const -{ - f->open_array_section("dependent_operations"); - { - for (const auto &kv : subops) { - f->dump_unsigned("op_id", kv.first->get_id()); - } - } - f->close_section(); -} - -template -void SnapTrimEvent::SubOpBlocker::emplace_back(Args&&... args) -{ - subops.emplace_back(std::forward(args)...); -}; - -SnapTrimEvent::remove_or_update_iertr::future<> -SnapTrimEvent::SubOpBlocker::wait_completion() -{ - return interruptor::do_for_each(subops, [](auto&& kv) { - return std::move(kv.second); - }); -} - void SnapTrimEvent::print(std::ostream &lhs) const { lhs << "SnapTrimEvent(" @@ -161,7 +136,7 @@ SnapTrimEvent::start() return enter_stage(wait_subop); }).then_interruptible([this] { logger().debug("{}: awaiting completion", *this); - return subop_blocker.wait_completion(); + return subop_blocker.interruptible_wait_completion(); }).finally([this] { pg->background_process_lock.unlock(); }).si_then([this] { diff --git a/src/crimson/osd/osd_operations/snaptrim_event.h b/src/crimson/osd/osd_operations/snaptrim_event.h index 39038c71ef91d..0548b396a0751 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.h +++ b/src/crimson/osd/osd_operations/snaptrim_event.h @@ -8,6 +8,7 @@ #include "crimson/osd/osdmap_gate.h" #include "crimson/osd/osd_operation.h" +#include "crimson/common/subop_blocker.h" #include "crimson/osd/osd_operations/common/pg_pipeline.h" #include "crimson/osd/pg.h" #include "crimson/osd/pg_activation_blocker.h" @@ -57,22 +58,7 @@ public: private: CommonPGPipeline& client_pp(); - // bases on 998cb8c141bb89aafae298a9d5e130fbd78fe5f2 - struct SubOpBlocker : crimson::BlockerT { - static constexpr const char* type_name = "CompoundOpBlocker"; - - using id_done_t = std::pair>; - - void dump_detail(Formatter *f) const final; - - template - void emplace_back(Args&&... args); - - remove_or_update_iertr::future<> wait_completion(); - private: - std::vector subops; - } subop_blocker; + SubOpBlocker> subop_blocker; // we don't need to synchronize with other instances of SnapTrimEvent; // it's here for the sake of op tracking. -- 2.39.5