]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/librbd/io/ImageRequest.h
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / librbd / io / ImageRequest.h
index 24239d3e5be7c34cd830738d620d7dead1961152..d7d10019d3ed0618c390fe6eef764f59c496dd07 100644 (file)
@@ -21,7 +21,7 @@ class ImageCtx;
 namespace io {
 
 class AioCompletion;
-class ObjectRequestHandle;
+class ObjectDispatchSpec;
 class ReadResult;
 
 template <typename ImageCtxT = ImageCtx>
@@ -33,63 +33,29 @@ public:
     m_trace.event("finish");
   }
 
-  static ImageRequest* create_read_request(ImageCtxT &image_ctx,
-                                           AioCompletion *aio_comp,
-                                           Extents &&image_extents,
-                                           ReadResult &&read_result,
-                                           int op_flags,
-                                           const ZTracer::Trace &parent_trace);
-  static ImageRequest* create_write_request(ImageCtxT &image_ctx,
-                                            AioCompletion *aio_comp,
-                                            Extents &&image_extents,
-                                            bufferlist &&bl, int op_flags,
-                                            const ZTracer::Trace &parent_trace);
-  static ImageRequest* create_discard_request(ImageCtxT &image_ctx,
-                                              AioCompletion *aio_comp,
-                                              uint64_t off, uint64_t len,
-                                              bool skip_partial_discard,
-                                              const ZTracer::Trace &parent_trace);
-  static ImageRequest* create_flush_request(ImageCtxT &image_ctx,
-                                            AioCompletion *aio_comp,
-                                            const ZTracer::Trace &parent_trace);
-  static ImageRequest* create_writesame_request(ImageCtxT &image_ctx,
-                                                AioCompletion *aio_comp,
-                                                uint64_t off, uint64_t len,
-                                                bufferlist &&bl, int op_flags,
-                                                const ZTracer::Trace &parent_trace);
-  static ImageRequest* create_compare_and_write_request(
-      ImageCtxT &image_ctx, AioCompletion *c, Extents &&image_extents,
-      bufferlist &&cmp_bl, bufferlist &&bl, uint64_t *mismatch_offset,
-      int op_flags, const ZTracer::Trace &parent_trace);
-
   static void aio_read(ImageCtxT *ictx, AioCompletion *c,
                        Extents &&image_extents, ReadResult &&read_result,
                        int op_flags, const ZTracer::Trace &parent_trace);
   static void aio_write(ImageCtxT *ictx, AioCompletion *c,
                         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,
-                         const ZTracer::Trace &parent_trace);
+  static void aio_discard(ImageCtxT *ictx, AioCompletion *c,
+                          Extents &&image_extents,
+                          uint32_t discard_granularity_bytes,
+                          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,
-                           const ZTracer::Trace &parent_trace);
+                        FlushSource flush_source,
+                        const ZTracer::Trace &parent_trace);
+  static void aio_writesame(ImageCtxT *ictx, AioCompletion *c,
+                            Extents &&image_extents, bufferlist &&bl,
+                            int op_flags, const ZTracer::Trace &parent_trace);
 
   static void aio_compare_and_write(ImageCtxT *ictx, AioCompletion *c,
                                     Extents &&image_extents, bufferlist &&cmp_bl,
                                     bufferlist &&bl, uint64_t *mismatch_offset,
                                     int op_flags, const ZTracer::Trace &parent_trace);
 
-  virtual bool is_write_op() const {
-    return false;
-  }
-
-  void start_op();
-
   void send();
-  void fail(int r);
 
   void set_bypass_image_cache() {
     m_bypass_image_cache = true;
@@ -100,7 +66,7 @@ public:
   }
 
 protected:
-  typedef std::list<ObjectRequestHandle *> ObjectRequests;
+  typedef std::list<ObjectDispatchSpec*> ObjectRequests;
 
   ImageCtxT &m_image_ctx;
   AioCompletion *m_aio_comp;
@@ -116,9 +82,10 @@ protected:
       m_trace(util::create_trace(image_ctx, trace_name, parent_trace)) {
     m_trace.event("start");
   }
-  
+
 
   virtual int clip_request();
+  virtual void update_timestamp();
   virtual void send_request() = 0;
   virtual void send_image_cache_request() = 0;
 
@@ -148,18 +115,12 @@ protected:
     return "aio_read";
   }
 private:
-  char *m_buf;
-  bufferlist *m_pbl;
   int m_op_flags;
 };
 
 template <typename ImageCtxT = ImageCtx>
 class AbstractImageWriteRequest : public ImageRequest<ImageCtxT> {
 public:
-  bool is_write_op() const override {
-    return true;
-  }
-
   inline void flag_synchronous() {
     m_synchronous = true;
   }
@@ -180,24 +141,17 @@ protected:
 
   void send_request() override;
 
-  virtual int prune_object_extents(ObjectExtents &object_extents) {
+  virtual int prune_object_extents(ObjectExtents* object_extents) const {
     return 0;
   }
-  virtual uint32_t get_object_cache_request_count() const {
-    return 0;
-  }
-  virtual void send_object_cache_requests(const ObjectExtents &object_extents,
-                                          uint64_t journal_tid) = 0;
 
-  virtual void send_object_requests(const ObjectExtents &object_extents,
-                                    const ::SnapContext &snapc,
-                                    ObjectRequests *object_requests);
-  virtual ObjectRequestHandle *create_object_request(
+  void send_object_requests(const ObjectExtents &object_extents,
+                            const ::SnapContext &snapc, uint64_t journal_tid);
+  virtual ObjectDispatchSpec *create_object_request(
       const ObjectExtent &object_extent, const ::SnapContext &snapc,
-      Context *on_finish) = 0;
+      uint64_t journal_tid, Context *on_finish) = 0;
 
-  virtual uint64_t append_journal_event(const ObjectRequests &requests,
-                                        bool synchronous) = 0;
+  virtual uint64_t append_journal_event(bool synchronous) = 0;
   virtual void update_stats(size_t length) = 0;
 
 private:
@@ -232,19 +186,12 @@ protected:
 
   void send_image_cache_request() override;
 
-  void send_object_cache_requests(const ObjectExtents &object_extents,
-                                  uint64_t journal_tid) override;
 
-  void send_object_requests(const ObjectExtents &object_extents,
-                            const ::SnapContext &snapc,
-                            ObjectRequests *aio_object_requests) override;
-
-  ObjectRequestHandle *create_object_request(
+  ObjectDispatchSpec *create_object_request(
       const ObjectExtent &object_extent, const ::SnapContext &snapc,
-      Context *on_finish) override;
+      uint64_t journal_tid, Context *on_finish) override;
 
-  uint64_t append_journal_event(const ObjectRequests &requests,
-                                bool synchronous) override;
+  uint64_t append_journal_event(bool synchronous) override;
   void update_stats(size_t length) override;
 
 private:
@@ -256,11 +203,12 @@ 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,
-                     const ZTracer::Trace &parent_trace)
+                      Extents&& image_extents,
+                     uint32_t discard_granularity_bytes,
+                      const ZTracer::Trace &parent_trace)
     : AbstractImageWriteRequest<ImageCtxT>(
-       image_ctx, aio_comp, {{off, len}}, "discard", parent_trace),
-      m_skip_partial_discard(skip_partial_discard) {
+       image_ctx, aio_comp, std::move(image_extents), "discard", parent_trace),
+      m_discard_granularity_bytes(discard_granularity_bytes) {
   }
 
 protected:
@@ -274,35 +222,29 @@ protected:
     return "aio_discard";
   }
 
-  int prune_object_extents(ObjectExtents &object_extents) override;
-
   void send_image_cache_request() override;
 
-  uint32_t get_object_cache_request_count() const override;
-  void send_object_cache_requests(const ObjectExtents &object_extents,
-                                  uint64_t journal_tid) override;
-
-  ObjectRequestHandle *create_object_request(
+  ObjectDispatchSpec *create_object_request(
       const ObjectExtent &object_extent, const ::SnapContext &snapc,
-      Context *on_finish) override;
+      uint64_t journal_tid, Context *on_finish) override;
 
-  uint64_t append_journal_event(const ObjectRequests &requests,
-                                bool synchronous) override;
+  uint64_t append_journal_event(bool synchronous) override;
   void update_stats(size_t length) override;
+
+  int prune_object_extents(ObjectExtents* object_extents) const override;
+
 private:
-  bool m_skip_partial_discard;
+  uint32_t m_discard_granularity_bytes;
 };
 
 template <typename ImageCtxT = ImageCtx>
 class ImageFlushRequest : public ImageRequest<ImageCtxT> {
 public:
   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 {
-    return true;
+                    FlushSource flush_source,
+                    const ZTracer::Trace &parent_trace)
+    : ImageRequest<ImageCtxT>(image_ctx, aio_comp, {}, "flush", parent_trace),
+      m_flush_source(flush_source) {
   }
 
 protected:
@@ -311,6 +253,8 @@ protected:
   int clip_request() override {
     return 0;
   }
+  void update_timestamp() override {
+  }
   void send_request() override;
   void send_image_cache_request() override;
 
@@ -320,16 +264,21 @@ protected:
   const char *get_request_type() const override {
     return "aio_flush";
   }
+
+private:
+  FlushSource m_flush_source;
+
 };
 
 template <typename ImageCtxT = ImageCtx>
 class ImageWriteSameRequest : public AbstractImageWriteRequest<ImageCtxT> {
 public:
   ImageWriteSameRequest(ImageCtxT &image_ctx, AioCompletion *aio_comp,
-                        uint64_t off, uint64_t len, bufferlist &&bl,
+                        Extents&& image_extents, bufferlist &&bl,
                         int op_flags, const ZTracer::Trace &parent_trace)
     : AbstractImageWriteRequest<ImageCtxT>(
-       image_ctx, aio_comp, {{off, len}}, "writesame", parent_trace),
+       image_ctx, aio_comp, std::move(image_extents), "writesame",
+        parent_trace),
       m_data_bl(std::move(bl)), m_op_flags(op_flags) {
   }
 
@@ -344,23 +293,13 @@ protected:
     return "aio_writesame";
   }
 
-  bool assemble_writesame_extent(const ObjectExtent &object_extent,
-                                 bufferlist *bl, bool force_write);
-
   void send_image_cache_request() override;
 
-  void send_object_cache_requests(const ObjectExtents &object_extents,
-                                  uint64_t journal_tid) override;
-
-  void send_object_requests(const ObjectExtents &object_extents,
-                            const ::SnapContext &snapc,
-                            ObjectRequests *object_requests) override;
-  ObjectRequestHandle *create_object_request(
+  ObjectDispatchSpec *create_object_request(
       const ObjectExtent &object_extent, const ::SnapContext &snapc,
-      Context *on_finish) override;
+      uint64_t journal_tid, Context *on_finish) override;
 
-  uint64_t append_journal_event(const ObjectRequests &requests,
-                                bool synchronous) override;
+  uint64_t append_journal_event(bool synchronous) override;
   void update_stats(size_t length) override;
 private:
   bufferlist m_data_bl;
@@ -386,18 +325,13 @@ public:
 protected:
   void send_image_cache_request() override;
 
-  uint32_t get_object_cache_request_count() const override;
-  void send_object_cache_requests(const ObjectExtents &object_extents,
-                                  uint64_t journal_tid) override;
-
   void assemble_extent(const ObjectExtent &object_extent, bufferlist *bl);
 
-  ObjectRequestHandle *create_object_request(const ObjectExtent &object_extent,
-                                             const ::SnapContext &snapc,
-                                             Context *on_finish) override;
+  ObjectDispatchSpec *create_object_request(
+      const ObjectExtent &object_extent, const ::SnapContext &snapc,
+      uint64_t journal_tid, Context *on_finish) override;
 
-  uint64_t append_journal_event(const ObjectRequests &requests,
-                                bool synchronous) override;
+  uint64_t append_journal_event(bool synchronous) override;
   void update_stats(size_t length) override;
 
   aio_type_t get_aio_type() const override {
@@ -407,7 +341,8 @@ protected:
     return "aio_compare_and_write";
   }
 
-  int prune_object_extents(ObjectExtents &object_extents) override;
+  int prune_object_extents(ObjectExtents* object_extents) const override;
+
 private:
   bufferlist m_cmp_bl;
   bufferlist m_bl;