1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_LIBRBD_DEEP_COPY_REQUEST_H
5 #define CEPH_LIBRBD_DEEP_COPY_REQUEST_H
7 #include "common/ceph_mutex.h"
8 #include "common/RefCountedObj.h"
9 #include "include/int_types.h"
10 #include "librbd/ImageCtx.h"
11 #include "librbd/Types.h"
12 #include "librbd/deep_copy/Types.h"
25 template <typename
> class ImageCopyRequest
;
26 template <typename
> class SnapshotCopyRequest
;
30 template <typename ImageCtxT
= ImageCtx
>
31 class DeepCopyRequest
: public RefCountedObject
{
33 static DeepCopyRequest
* create(ImageCtxT
*src_image_ctx
,
34 ImageCtxT
*dst_image_ctx
,
35 librados::snap_t src_snap_id_start
,
36 librados::snap_t src_snap_id_end
,
37 librados::snap_t dst_snap_id_start
,
39 const deep_copy::ObjectNumber
&object_number
,
40 ContextWQ
*work_queue
,
42 ProgressContext
*prog_ctx
,
44 return new DeepCopyRequest(src_image_ctx
, dst_image_ctx
, src_snap_id_start
,
45 src_snap_id_end
, dst_snap_id_start
, flatten
,
46 object_number
, work_queue
, snap_seqs
, prog_ctx
,
50 DeepCopyRequest(ImageCtxT
*src_image_ctx
, ImageCtxT
*dst_image_ctx
,
51 librados::snap_t src_snap_id_start
,
52 librados::snap_t src_snap_id_end
,
53 librados::snap_t dst_snap_id_start
,
54 bool flatten
, const deep_copy::ObjectNumber
&object_number
,
55 ContextWQ
*work_queue
, SnapSeqs
*snap_seqs
,
56 ProgressContext
*prog_ctx
, Context
*on_finish
);
72 * COPY_IMAGE . . . . . . . . . . . . . .
75 * COPY_OBJECT_MAP (skip if object .
78 * REFRESH_OBJECT_MAP (skip if object . (image copy canceled)
84 * <finish> < . . . . . . . . . . . . . .
89 typedef std::vector
<librados::snap_t
> SnapIds
;
90 typedef std::map
<librados::snap_t
, SnapIds
> SnapMap
;
92 ImageCtxT
*m_src_image_ctx
;
93 ImageCtxT
*m_dst_image_ctx
;
94 librados::snap_t m_src_snap_id_start
;
95 librados::snap_t m_src_snap_id_end
;
96 librados::snap_t m_dst_snap_id_start
;
98 deep_copy::ObjectNumber m_object_number
;
99 ContextWQ
*m_work_queue
;
100 SnapSeqs
*m_snap_seqs
;
101 ProgressContext
*m_prog_ctx
;
102 Context
*m_on_finish
;
106 bool m_canceled
= false;
108 deep_copy::SnapshotCopyRequest
<ImageCtxT
> *m_snapshot_copy_request
= nullptr;
109 deep_copy::ImageCopyRequest
<ImageCtxT
> *m_image_copy_request
= nullptr;
110 decltype(ImageCtxT::object_map
) m_object_map
= nullptr;
112 void send_copy_snapshots();
113 void handle_copy_snapshots(int r
);
115 void send_copy_image();
116 void handle_copy_image(int r
);
118 void send_copy_object_map();
119 void handle_copy_object_map(int r
);
121 void send_refresh_object_map();
122 void handle_refresh_object_map(int r
);
124 void send_copy_metadata();
125 void handle_copy_metadata(int r
);
127 int validate_copy_points();
132 } // namespace librbd
134 extern template class librbd::DeepCopyRequest
<librbd::ImageCtx
>;
136 #endif // CEPH_LIBRBD_DEEP_COPY_REQUEST_H