]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/.../client_request: introduce instance_handle_t::enter_stage_sync()
authorYingxin Cheng <yingxin.cheng@intel.com>
Thu, 25 Jan 2024 08:47:38 +0000 (16:47 +0800)
committerMatan Breizman <mbreizma@redhat.com>
Thu, 13 Jun 2024 12:18:56 +0000 (15:18 +0300)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
(cherry picked from commit 4f532cfd8fdf9b7ac11aa327baca355062dabcb1)

src/crimson/osd/osd_operations/client_request.h

index eb27f91296499370086937a4af2bf40fc39ecf80..c6ee364db59963750f5ee68ffee327da58b3b113 100644 (file)
@@ -113,12 +113,15 @@ public:
       CompletionEvent
       > pg_tracking_events;
 
+    template <class BlockingEventT>
+    typename BlockingEventT::template Trigger<ClientRequest>
+    get_trigger(ClientRequest &op) {
+      return {std::get<BlockingEventT>(pg_tracking_events), op};
+    }
+
     template <typename BlockingEventT, typename InterruptorT=void, typename F>
     auto with_blocking_event(F &&f, ClientRequest &op) {
-      auto ret = std::forward<F>(f)(
-       typename BlockingEventT::template Trigger<ClientRequest>{
-         std::get<BlockingEventT>(pg_tracking_events), op
-       });
+      auto ret = std::forward<F>(f)(get_trigger<BlockingEventT>(op));
       if constexpr (std::is_same_v<InterruptorT, void>) {
        return ret;
       } else {
@@ -138,6 +141,12 @@ public:
          }, op);
     }
 
+    template <typename StageT>
+    void enter_stage_sync(StageT &stage, ClientRequest &op) {
+      handle.template enter_sync<ClientRequest>(
+          stage, get_trigger<typename StageT::BlockingEvent>(op));
+    }
+
     template <
       typename InterruptorT=void, typename BlockingObj, typename Method,
       typename... Args>