]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/osd_operations/snaptrim_event: move SubOpBlocker to seperate file
authorMatan Breizman <mbreizma@redhat.com>
Mon, 27 Nov 2023 11:33:48 +0000 (11:33 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Wed, 10 Jan 2024 10:39:48 +0000 (10:39 +0000)
Signed-off-by: Matan Breizman <mbreizma@redhat.com>
src/crimson/common/subop_blocker.h [new file with mode: 0644]
src/crimson/osd/osd_operations/snaptrim_event.cc
src/crimson/osd/osd_operations/snaptrim_event.h

diff --git a/src/crimson/common/subop_blocker.h b/src/crimson/common/subop_blocker.h
new file mode 100644 (file)
index 0000000..a4bb3d8
--- /dev/null
@@ -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 <typename T>
+struct SubOpBlocker : crimson::BlockerT<SubOpBlocker<T>> {
+  static constexpr const char* type_name = "CompoundOpBlocker";
+
+  using id_done_t = std::pair<crimson::OperationRef, T>;
+
+  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 <class... Args>
+  void emplace_back(Args&&... args) {
+      subops.emplace_back(std::forward<Args>(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<id_done_t> subops;
+};
+
+} // namespace crimson::osd
index b2e294316dbc9f9c43b8a61e52123499c3a735d5..01ea2a710c336efefbb88cc0e3f1ce790c759602 100644 (file)
@@ -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 <class... Args>
-void SnapTrimEvent::SubOpBlocker::emplace_back(Args&&... args)
-{
-  subops.emplace_back(std::forward<Args>(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<interruptor>(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] {
index 39038c71ef91d4b58df23c9081f7784a29018458..0548b396a07519e5769eeb4beddab9669d23ba1b 100644 (file)
@@ -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<SubOpBlocker> {
-    static constexpr const char* type_name = "CompoundOpBlocker";
-
-    using id_done_t = std::pair<crimson::OperationRef,
-                                remove_or_update_iertr::future<>>;
-
-    void dump_detail(Formatter *f) const final;
-
-    template <class... Args>
-    void emplace_back(Args&&... args);
-
-    remove_or_update_iertr::future<> wait_completion();
-  private:
-    std::vector<id_done_t> subops;
-  } subop_blocker;
+  SubOpBlocker<remove_or_update_iertr::future<>> subop_blocker;
 
   // we don't need to synchronize with other instances of SnapTrimEvent;
   // it's here for the sake of op tracking.