]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: bring SubOpBlocker to SnapTrimEvent
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 16 Nov 2022 16:40:51 +0000 (16:40 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 28 Feb 2023 16:22:04 +0000 (16:22 +0000)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/osd/osd_operations/snaptrim_event.cc
src/crimson/osd/osd_operations/snaptrim_event.h

index f7f489bc5483c0f545e7885727752797376a11f7..2d94957beab28676f77d2e352de4a16adad15c5d 100644 (file)
@@ -1,6 +1,8 @@
 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
 // vim: ts=8 sw=2 smarttab
 
+#include <ranges>
+
 #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 <class... Args>
+void SnapTrimEvent::SubOpBlocker::emplace_back(Args&&... args)
+{
+  subops.emplace_back(std::forward<Args>(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("
index f8e32b0baefac22807b5af319fe2ce53f45d3bc1..00fd25f7131c58cd7e8f08fc92cd22d41c405329 100644 (file)
@@ -42,6 +42,21 @@ public:
 private:
   CommonPGPipeline& pp();
 
+  // bases on 998cb8c141bb89aafae298a9d5e130fbd78fe5f2
+  struct SubOpBlocker : crimson::BlockerT<SubOpBlocker> {
+    static constexpr const char* type_name = "CompoundOpBlocker";
+
+    using id_done_t = std::pair<crimson::Operation::id_t, seastar::future<>>;
+
+    void dump_detail(Formatter *f) const final;
+
+    template <class... Args>
+    void emplace_back(Args&&... args);
+
+    seastar::future<> wait_completion();
+  private:
+    std::vector<id_done_t> subops;
+  } subop_blocker;
   PipelineHandle handle;
   Ref<PG> pg;
   const snapid_t snapid;