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_MIGRATION_OPEN_SOURCE_IMAGE_REQUEST_H
5 #define CEPH_LIBRBD_MIGRATION_OPEN_SOURCE_IMAGE_REQUEST_H
7 #include "include/rados/librados_fwd.hpp"
8 #include "librbd/Types.h"
20 struct FormatInterface
;
22 template <typename ImageCtxT
>
23 class OpenSourceImageRequest
{
25 static OpenSourceImageRequest
* create(librados::IoCtx
& io_ctx
,
26 ImageCtxT
* destination_image_ctx
,
28 const MigrationInfo
&migration_info
,
29 ImageCtxT
** source_image_ctx
,
31 return new OpenSourceImageRequest(io_ctx
, destination_image_ctx
,
32 src_snap_id
, migration_info
,
33 source_image_ctx
, on_finish
);
36 OpenSourceImageRequest(librados::IoCtx
& io_ctx
,
37 ImageCtxT
* destination_image_ctx
,
39 const MigrationInfo
&migration_info
,
40 ImageCtxT
** source_image_ctx
,
55 * GET_IMAGE_SIZE * * * * * * *
58 * GET_SNAPSHOTS * * * * > CLOSE_IMAGE
61 * <finish> <------------------/
66 typedef std::map
<uint64_t, SnapInfo
> SnapInfos
;
69 librados::IoCtx
& m_io_ctx
;
70 ImageCtxT
* m_dst_image_ctx
;
71 uint64_t m_src_snap_id
;
72 MigrationInfo m_migration_info
;
73 ImageCtxT
** m_src_image_ctx
;
76 std::unique_ptr
<FormatInterface
> m_format
;
78 uint64_t m_image_size
= 0;
79 SnapInfos m_snap_infos
;
82 void handle_open_source(int r
);
84 void get_image_size();
85 void handle_get_image_size(int r
);
88 void handle_get_snapshots(int r
);
90 void close_image(int r
);
92 void register_image_dispatch();
98 } // namespace migration
101 extern template class librbd::migration::OpenSourceImageRequest
<librbd::ImageCtx
>;
103 #endif // CEPH_LIBRBD_MIGRATION_OPEN_SOURCE_IMAGE_REQUEST_H