]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common: add helper C_TrackerOp context class
authorJason Dillaman <dillaman@redhat.com>
Fri, 17 Apr 2020 14:02:10 +0000 (10:02 -0400)
committerJason Dillaman <dillaman@redhat.com>
Fri, 17 Apr 2020 14:02:10 +0000 (10:02 -0400)
This wraps the functionality of starting and finishing a tracked op
into the standard context interface.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/common/AsyncOpTracker.h

index d913032aa56a0af74ee43277a413a890c28b91f9..dfa913ad4a3a0f5ff6bcecaa8134f4881fe071a4 100644 (file)
@@ -5,8 +5,7 @@
 #define CEPH_ASYNC_OP_TRACKER_H
 
 #include "common/ceph_mutex.h"
-
-struct Context;
+#include "include/Context.h"
 
 class AsyncOpTracker {
 public:
@@ -27,4 +26,23 @@ private:
 
 };
 
+class C_TrackedOp : public Context {
+public:
+  C_TrackedOp(AsyncOpTracker& async_op_tracker, Context* on_finish)
+    : m_async_op_tracker(async_op_tracker), m_on_finish(on_finish) {
+    m_async_op_tracker.start_op();
+  }
+
+  void finish(int r) override {
+    if (m_on_finish != nullptr) {
+      m_on_finish->complete(r);
+    }
+    m_async_op_tracker.finish_op();
+  }
+
+private:
+  AsyncOpTracker& m_async_op_tracker;
+  Context* m_on_finish;
+};
+
 #endif // CEPH_ASYNC_OP_TRACKER_H