]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson: move PipelineStageIT::enter() dispatch to compile-time
authorRadosław Zarzyński <rzarzyns@redhat.com>
Tue, 26 Apr 2022 20:15:17 +0000 (22:15 +0200)
committerRadosław Zarzyński <rzarzyns@redhat.com>
Thu, 5 May 2022 02:06:32 +0000 (04:06 +0200)
The optimization isn't the goal (but rather a side effect). The
reason behind this change is to let pipeline stages define exit
barriers incorporating `OpT`-dependant `Triggers` to track blocking
that happens on the barriers.

Signed-off-by: Radosław Zarzyński <rzarzyns@redhat.com>
src/crimson/common/operation.h

index 6dc32007a657b7e09ac2e5b76378f85b8ad836aa..3a35af75abe4e2f0e888133b2e0b33b2eeaddc05 100644 (file)
@@ -562,16 +562,13 @@ public:
   virtual ~PipelineExitBarrierI() {}
 };
 
-class PipelineStageI : public Blocker {
-public:
-  virtual seastar::future<PipelineExitBarrierI::Ref> enter() = 0;
-};
-
-
 template <class T>
 class PipelineStageIT : public BlockerT<T> {
 public:
-  virtual seastar::future<PipelineExitBarrierI::Ref> enter() = 0;
+  template <class... Args>
+  decltype(auto) enter(Args&&... args) {
+    return static_cast<T*>(this)->enter(std::forward<Args>(args)...);
+  }
 };
 
 class PipelineHandle {
@@ -689,7 +686,7 @@ class OrderedExclusivePhaseT : public PipelineStageIT<T> {
   }
 
 public:
-  seastar::future<PipelineExitBarrierI::Ref> enter() final {
+  seastar::future<PipelineExitBarrierI::Ref> enter() {
     return mutex.lock().then([this] {
       return PipelineExitBarrierI::Ref(new ExitBarrier{this});
     });
@@ -753,7 +750,7 @@ class OrderedConcurrentPhaseT : public PipelineStageIT<T> {
   };
 
 public:
-  seastar::future<PipelineExitBarrierI::Ref> enter() final {
+  seastar::future<PipelineExitBarrierI::Ref> enter() {
     return seastar::make_ready_future<PipelineExitBarrierI::Ref>(
       new ExitBarrier{this, mutex.lock()});
   }
@@ -792,7 +789,7 @@ class UnorderedStageT : public PipelineStageIT<T> {
   };
 
 public:
-  seastar::future<PipelineExitBarrierI::Ref> enter() final {
+  seastar::future<PipelineExitBarrierI::Ref> enter() {
     return seastar::make_ready_future<PipelineExitBarrierI::Ref>(
       new ExitBarrier);
   }