]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/librbd/io/ImageRequest.h
update sources to v12.1.0
[ceph.git] / ceph / src / librbd / io / ImageRequest.h
index 6ae7c289c5770763cb3040f6a689d960f59f3b11..21b88b098cf5736ee2907007357139da61d835c0 100644 (file)
@@ -7,7 +7,9 @@
 #include "include/int_types.h"
 #include "include/buffer_fwd.h"
 #include "common/snap_types.h"
+#include "common/zipkin_trace.h"
 #include "osd/osd_types.h"
+#include "librbd/Utils.h"
 #include "librbd/io/Types.h"
 #include <list>
 #include <utility>
@@ -27,18 +29,24 @@ class ImageRequest {
 public:
   typedef std::vector<std::pair<uint64_t,uint64_t> > Extents;
 
-  virtual ~ImageRequest() {}
+  virtual ~ImageRequest() {
+    m_trace.event("finish");
+  }
 
   static void aio_read(ImageCtxT *ictx, AioCompletion *c,
                        Extents &&image_extents, ReadResult &&read_result,
-                       int op_flags);
+                       int op_flags, const ZTracer::Trace &parent_trace);
   static void aio_write(ImageCtxT *ictx, AioCompletion *c,
-                        Extents &&image_extents, bufferlist &&bl, int op_flags);
+                        Extents &&image_extents, bufferlist &&bl, int op_flags,
+                       const ZTracer::Trace &parent_trace);
   static void aio_discard(ImageCtxT *ictx, AioCompletion *c, uint64_t off,
-                          uint64_t len, bool skip_partial_discard);
-  static void aio_flush(ImageCtxT *ictx, AioCompletion *c);
+                          uint64_t len, bool skip_partial_discard,
+                         const ZTracer::Trace &parent_trace);
+  static void aio_flush(ImageCtxT *ictx, AioCompletion *c,
+                       const ZTracer::Trace &parent_trace);
   static void aio_writesame(ImageCtxT *ictx, AioCompletion *c, uint64_t off,
-                            uint64_t len, bufferlist &&bl, int op_flags);
+                            uint64_t len, bufferlist &&bl, int op_flags,
+                           const ZTracer::Trace &parent_trace);
 
   virtual bool is_write_op() const {
     return false;
@@ -53,19 +61,28 @@ public:
     m_bypass_image_cache = true;
   }
 
+  inline const ZTracer::Trace &get_trace() const {
+    return m_trace;
+  }
+
 protected:
   typedef std::list<ObjectRequestHandle *> ObjectRequests;
 
   ImageCtxT &m_image_ctx;
   AioCompletion *m_aio_comp;
   Extents m_image_extents;
+  ZTracer::Trace m_trace;
   bool m_bypass_image_cache = false;
 
   ImageRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
-               Extents &&image_extents)
+               Extents &&image_extents, const char *trace_name,
+              const ZTracer::Trace &parent_trace)
     : m_image_ctx(image_ctx), m_aio_comp(aio_comp),
-      m_image_extents(image_extents) {
+      m_image_extents(std::move(image_extents)),
+      m_trace(util::create_trace(image_ctx, trace_name, parent_trace)) {
+    m_trace.event("start");
   }
+  
 
   virtual int clip_request();
   virtual void send_request() = 0;
@@ -82,7 +99,7 @@ public:
 
   ImageReadRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
                    Extents &&image_extents, ReadResult &&read_result,
-                   int op_flags);
+                   int op_flags, const ZTracer::Trace &parent_trace);
 
 protected:
   int clip_request() override;
@@ -120,8 +137,10 @@ protected:
   typedef std::vector<ObjectExtent> ObjectExtents;
 
   AbstractImageWriteRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
-                            Extents &&image_extents)
-    : ImageRequest<ImageCtxT>(image_ctx, aio_comp, std::move(image_extents)),
+                            Extents &&image_extents, const char *trace_name,
+                           const ZTracer::Trace &parent_trace)
+    : ImageRequest<ImageCtxT>(image_ctx, aio_comp, std::move(image_extents),
+                             trace_name, parent_trace),
       m_synchronous(false) {
   }
 
@@ -156,9 +175,10 @@ public:
   using typename ImageRequest<ImageCtxT>::Extents;
 
   ImageWriteRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
-                    Extents &&image_extents, bufferlist &&bl, int op_flags)
-    : AbstractImageWriteRequest<ImageCtxT>(image_ctx, aio_comp,
-                                           std::move(image_extents)),
+                    Extents &&image_extents, bufferlist &&bl, int op_flags,
+                   const ZTracer::Trace &parent_trace)
+    : AbstractImageWriteRequest<ImageCtxT>(
+       image_ctx, aio_comp, std::move(image_extents), "write", parent_trace),
       m_bl(std::move(bl)), m_op_flags(op_flags) {
   }
 
@@ -201,8 +221,10 @@ template <typename ImageCtxT = ImageCtx>
 class ImageDiscardRequest : public AbstractImageWriteRequest<ImageCtxT> {
 public:
   ImageDiscardRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
-                      uint64_t off, uint64_t len, bool skip_partial_discard)
-    : AbstractImageWriteRequest<ImageCtxT>(image_ctx, aio_comp, {{off, len}}),
+                      uint64_t off, uint64_t len, bool skip_partial_discard,
+                     const ZTracer::Trace &parent_trace)
+    : AbstractImageWriteRequest<ImageCtxT>(
+       image_ctx, aio_comp, {{off, len}}, "discard", parent_trace),
       m_skip_partial_discard(skip_partial_discard) {
   }
 
@@ -239,8 +261,9 @@ private:
 template <typename ImageCtxT = ImageCtx>
 class ImageFlushRequest : public ImageRequest<ImageCtxT> {
 public:
-  ImageFlushRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp)
-    : ImageRequest<ImageCtxT>(image_ctx, aio_comp, {}) {
+  ImageFlushRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
+                   const ZTracer::Trace &parent_trace)
+    : ImageRequest<ImageCtxT>(image_ctx, aio_comp, {}, "flush", parent_trace) {
   }
 
   bool is_write_op() const override {
@@ -269,8 +292,9 @@ class ImageWriteSameRequest : public AbstractImageWriteRequest<ImageCtxT> {
 public:
   ImageWriteSameRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
                         uint64_t off, uint64_t len, bufferlist &&bl,
-                        int op_flags)
-    : AbstractImageWriteRequest<ImageCtxT>(image_ctx, aio_comp, {{off, len}}),
+                        int op_flags, const ZTracer::Trace &parent_trace)
+    : AbstractImageWriteRequest<ImageCtxT>(
+       image_ctx, aio_comp, {{off, len}}, "writesame", parent_trace),
       m_data_bl(std::move(bl)), m_op_flags(op_flags) {
   }