]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/librbd/deep_copy/ObjectCopyRequest.h
import ceph 15.2.10
[ceph.git] / ceph / src / librbd / deep_copy / ObjectCopyRequest.h
index 5d57a8b32c222c7ef8018a875f6b782f0d13328c..fee67021203feda7f1c3a795c7b38d142334fc54 100644 (file)
@@ -13,6 +13,7 @@
 #include "librbd/io/Types.h"
 #include <list>
 #include <map>
+#include <optional>
 #include <string>
 
 class Context;
@@ -34,17 +35,17 @@ public:
                                    librados::snap_t src_snap_id_start,
                                    librados::snap_t dst_snap_id_start,
                                    const SnapMap &snap_map,
-                                   uint64_t object_number, bool flatten,
+                                   uint64_t object_number, uint32_t flags,
                                    Handler* handler, Context *on_finish) {
     return new ObjectCopyRequest(src_image_ctx, dst_image_ctx,
                                  src_snap_id_start, dst_snap_id_start, snap_map,
-                                 object_number, flatten, handler, on_finish);
+                                 object_number, flags, handler, on_finish);
   }
 
   ObjectCopyRequest(ImageCtxT *src_image_ctx, ImageCtxT *dst_image_ctx,
                     librados::snap_t src_snap_id_start,
                     librados::snap_t dst_snap_id_start, const SnapMap &snap_map,
-                    uint64_t object_number, bool flatten, Handler* handler,
+                    uint64_t object_number, uint32_t flags, Handler* handler,
                     Context *on_finish);
 
   void send();
@@ -80,13 +81,13 @@ private:
    *    |     /-----------\
    *    |     |           | (repeat for each snapshot)
    *    v     v           |
-   * WRITE_OBJECT --------/
-   *    |
+   * UPDATE_OBJECT_MAP ---/ (skip if object
+   *    |                    map disabled)
    *    |     /-----------\
    *    |     |           | (repeat for each snapshot)
    *    v     v           |
-   * UPDATE_OBJECT_MAP ---/ (skip if object
-   *    |                    map disabled)
+   * WRITE_OBJECT --------/
+   *    |
    *    v
    * <finish>
    *
@@ -147,7 +148,7 @@ private:
   librados::snap_t m_dst_snap_id_start;
   SnapMap m_snap_map;
   uint64_t m_dst_object_number;
-  bool m_flatten;
+  uint32_t m_flags;
   Handler* m_handler;
   Context *m_on_finish;
 
@@ -172,6 +173,7 @@ private:
   std::map<librados::snap_t, interval_set<uint64_t>> m_dst_zero_interval;
   std::map<librados::snap_t, uint8_t> m_dst_object_state;
   std::map<librados::snap_t, bool> m_dst_object_may_exist;
+  std::optional<uint64_t> m_dst_object_size = std::nullopt;
   bufferlist m_read_from_parent_data;
 
   io::AsyncOperation* m_src_async_op = nullptr;
@@ -185,12 +187,12 @@ private:
   void send_read_from_parent();
   void handle_read_from_parent(int r);
 
-  void send_write_object();
-  void handle_write_object(int r);
-
   void send_update_object_map();
   void handle_update_object_map(int r);
 
+  void send_write_object();
+  void handle_write_object(int r);
+
   Context *start_lock_op(ceph::shared_mutex &owner_lock, int* r);
 
   uint64_t src_to_dst_object_offset(uint64_t objectno, uint64_t offset);