From 83043ca78962aa603f3b5fc673c168c7f11ef76a Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Wed, 16 Nov 2022 16:40:51 +0000 Subject: [PATCH] crimson/osd: bring SubOpBlocker to SnapTrimEvent Signed-off-by: Radoslaw Zarzynski --- .../osd/osd_operations/snaptrim_event.cc | 29 +++++++++++++++++++ .../osd/osd_operations/snaptrim_event.h | 15 ++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/crimson/osd/osd_operations/snaptrim_event.cc b/src/crimson/osd/osd_operations/snaptrim_event.cc index f7f489bc5483c..2d94957beab28 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.cc +++ b/src/crimson/osd/osd_operations/snaptrim_event.cc @@ -1,6 +1,8 @@ // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab +#include + #include "crimson/osd/osd_operations/snaptrim_event.h" #include "crimson/osd/pg.h" @@ -21,6 +23,33 @@ namespace crimson { namespace crimson::osd { +void SnapTrimEvent::SubOpBlocker::dump_detail(Formatter *f) const +{ + f->open_array_section("dependent_operations"); + { + for (const auto &i : subops | std::views::keys) { + f->dump_unsigned("op_id", i); + } + } + f->close_section(); +} + +template +void SnapTrimEvent::SubOpBlocker::emplace_back(Args&&... args) +{ + subops.emplace_back(std::forward(args)...); +}; + +seastar::future<> SnapTrimEvent::SubOpBlocker::wait_completion() +{ + auto rng = subops | std::views::values; + return seastar::when_all_succeed( + std::begin(rng), std::end(rng) + ).then([] (auto&&...) { + return seastar::now(); + }); +} + void SnapTrimEvent::print(std::ostream &lhs) const { lhs << "SnapTrimEvent(" diff --git a/src/crimson/osd/osd_operations/snaptrim_event.h b/src/crimson/osd/osd_operations/snaptrim_event.h index f8e32b0baefac..00fd25f7131c5 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.h +++ b/src/crimson/osd/osd_operations/snaptrim_event.h @@ -42,6 +42,21 @@ public: private: CommonPGPipeline& 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); + + seastar::future<> wait_completion(); + private: + std::vector subops; + } subop_blocker; PipelineHandle handle; Ref pg; const snapid_t snapid; -- 2.39.5