]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/common/operation: cleanup around PipelineHandle::enter()
authorYingxin Cheng <yingxin.cheng@intel.com>
Thu, 25 Jan 2024 05:54:00 +0000 (13:54 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Thu, 9 May 2024 02:06:39 +0000 (10:06 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/common/operation.h

index 82d0d548442e89197695f250740fd9aa77c244a5..938db0c87c8eea2edd8b6a15f252e46f24e0924c 100644 (file)
@@ -492,11 +492,6 @@ public:
 #ifndef NDEBUG
   const core_id_t core = seastar::this_shard_id();
 #endif
-
-  template <class... Args>
-  decltype(auto) enter(Args&&... args) {
-    return static_cast<T*>(this)->enter(std::forward<Args>(args)...);
-  }
 };
 
 class PipelineHandle {
@@ -506,6 +501,18 @@ class PipelineHandle {
     return barrier ? barrier->wait() : std::nullopt;
   }
 
+  template <typename OpT, typename T>
+  seastar::future<>
+  do_enter(T &stage, typename T::BlockingEvent::template Trigger<OpT>&& t) {
+    auto fut = t.maybe_record_blocking(stage.enter(t), stage);
+    return std::move(fut).then(
+      [this, t=std::move(t)](auto &&barrier_ref) mutable {
+      exit();
+      barrier = std::move(barrier_ref);
+      return seastar::now();
+    });
+  }
+
 public:
   PipelineHandle() = default;
 
@@ -526,23 +533,12 @@ public:
     assert(stage.core == seastar::this_shard_id());
     auto wait_fut = wait_barrier();
     if (wait_fut.has_value()) {
-      return wait_fut.value().then([this, &stage, t=std::move(t)] () mutable {
-        auto fut = t.maybe_record_blocking(stage.enter(t), stage);
-        return std::move(fut).then(
-          [this, t=std::move(t)](auto &&barrier_ref) mutable {
-          exit();
-          barrier = std::move(barrier_ref);
-          return seastar::now();
-        });
+      return wait_fut.value(
+      ).then([this, &stage, t=std::move(t)]() mutable {
+        return do_enter<OpT, T>(stage, std::move(t));
       });
     } else {
-        auto fut = t.maybe_record_blocking(stage.enter(t), stage);
-        return std::move(fut).then(
-          [this, t=std::move(t)](auto &&barrier_ref) mutable {
-          exit();
-          barrier = std::move(barrier_ref);
-          return seastar::now();
-        });
+      return do_enter<OpT, T>(stage, std::move(t));
     }
   }