]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/librbd/io/CopyupRequest.h
update sources to v12.2.3
[ceph.git] / ceph / src / librbd / io / CopyupRequest.h
index c4aa6a25956a54653abe66f458133cd2b606eee3..a45a48cd61b7da90646c3b8ebe4030cd96e70e35 100644 (file)
@@ -7,6 +7,7 @@
 #include "include/int_types.h"
 #include "include/rados/librados.hpp"
 #include "include/buffer.h"
+#include "common/Mutex.h"
 #include "common/zipkin_trace.h"
 #include "librbd/io/AsyncOperation.h"
 #include "librbd/io/Types.h"
@@ -24,15 +25,23 @@ struct ImageCtx;
 namespace io {
 
 struct AioCompletion;
-template <typename I> class ObjectRequest;
+template <typename I> class AbstractObjectWriteRequest;
 
+template <typename ImageCtxT = librbd::ImageCtx>
 class CopyupRequest {
 public:
-  CopyupRequest(ImageCtx *ictx, const std::string &oid, uint64_t objectno,
+  static CopyupRequest* create(ImageCtxT *ictx, const std::string &oid,
+                               uint64_t objectno, Extents &&image_extents,
+                               const ZTracer::Trace &parent_trace) {
+    return new CopyupRequest(ictx, oid, objectno, std::move(image_extents),
+                             parent_trace);
+  }
+
+  CopyupRequest(ImageCtxT *ictx, const std::string &oid, uint64_t objectno,
                 Extents &&image_extents, const ZTracer::Trace &parent_trace);
   ~CopyupRequest();
 
-  void append_request(ObjectRequest<ImageCtx> *req);
+  void append_request(AbstractObjectWriteRequest<ImageCtxT> *req);
 
   void send();
 
@@ -84,7 +93,7 @@ private:
 
   State m_state;
   ceph::bufferlist m_copyup_data;
-  std::vector<ObjectRequest<ImageCtx> *> m_pending_requests;
+  std::vector<AbstractObjectWriteRequest<ImageCtxT> *> m_pending_requests;
   std::atomic<unsigned> m_pending_copyups { 0 };
 
   AsyncOperation m_async_op;
@@ -92,6 +101,8 @@ private:
   std::vector<uint64_t> m_snap_ids;
   librados::IoCtx m_data_ctx; // for empty SnapContext
 
+  Mutex m_lock;
+
   void complete_requests(int r);
 
   bool should_complete(int r);
@@ -107,4 +118,6 @@ private:
 } // namespace io
 } // namespace librbd
 
+extern template class librbd::io::CopyupRequest<librbd::ImageCtx>;
+
 #endif // CEPH_LIBRBD_IO_COPYUP_REQUEST_H