From: Radoslaw Zarzynski Date: Wed, 16 Nov 2022 16:40:51 +0000 (+0000) Subject: crimson/osd: bring SubOpBlocker to SnapTrimEvent X-Git-Tag: v18.1.0~260^2~44 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=83043ca78962aa603f3b5fc673c168c7f11ef76a;p=ceph.git crimson/osd: bring SubOpBlocker 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 f7f489bc5483..2d94957beab2 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 f8e32b0baefa..00fd25f7131c 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;