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_API_MIGRATION_H
5 #define CEPH_LIBRBD_API_MIGRATION_H
7 #include "include/int_types.h"
8 #include "include/rados/librados_fwd.hpp"
9 #include "include/rbd/librbd.hpp"
10 #include "cls/rbd/cls_rbd_types.h"
20 template <typename ImageCtxT
= librbd::ImageCtx
>
23 static int prepare(librados::IoCtx
& io_ctx
, const std::string
&image_name
,
24 librados::IoCtx
& dest_io_ctx
,
25 const std::string
&dest_image_name
, ImageOptions
& opts
);
26 static int execute(librados::IoCtx
& io_ctx
, const std::string
&image_name
,
27 ProgressContext
&prog_ctx
);
28 static int abort(librados::IoCtx
& io_ctx
, const std::string
&image_name
,
29 ProgressContext
&prog_ctx
);
30 static int commit(librados::IoCtx
& io_ctx
, const std::string
&image_name
,
31 ProgressContext
&prog_ctx
);
32 static int status(librados::IoCtx
& io_ctx
, const std::string
&image_name
,
33 image_migration_status_t
*status
);
37 ImageCtxT
*m_src_image_ctx
;
38 librados::IoCtx m_src_io_ctx
;
39 librados::IoCtx
&m_dst_io_ctx
;
40 bool m_src_old_format
;
41 std::string m_src_image_name
;
42 std::string m_src_image_id
;
43 std::string m_src_header_oid
;
44 std::string m_dst_image_name
;
45 std::string m_dst_image_id
;
46 std::string m_dst_header_oid
;
47 ImageOptions
&m_image_options
;
50 cls::rbd::MirrorImageMode m_mirror_image_mode
;
51 ProgressContext
*m_prog_ctx
;
53 cls::rbd::MigrationSpec m_src_migration_spec
;
54 cls::rbd::MigrationSpec m_dst_migration_spec
;
56 Migration(ImageCtxT
*image_ctx
, librados::IoCtx
& dest_io_ctx
,
57 const std::string
&dest_image_name
, const std::string
&dst_image_id
,
58 ImageOptions
& opts
, bool flatten
, bool mirroring
,
59 cls::rbd::MirrorImageMode mirror_image_mode
,
60 cls::rbd::MigrationState state
, const std::string
&state_desc
,
61 ProgressContext
*prog_ctx
);
67 int status(image_migration_status_t
*status
);
69 int set_state(cls::rbd::MigrationState state
, const std::string
&description
);
71 int list_src_snaps(std::vector
<librbd::snap_info_t
> *snaps
);
72 int validate_src_snaps();
73 int disable_mirroring(ImageCtxT
*image_ctx
, bool *was_enabled
,
74 cls::rbd::MirrorImageMode
*mirror_image_mode
);
75 int enable_mirroring(ImageCtxT
*image_ctx
, bool was_enabled
,
76 cls::rbd::MirrorImageMode mirror_image_mode
);
78 int unlink_src_image();
79 int relink_src_image();
80 int create_dst_image();
81 int remove_group(ImageCtxT
*image_ctx
, group_info_t
*group_info
);
82 int add_group(ImageCtxT
*image_ctx
, group_info_t
&group_info
);
83 int update_group(ImageCtxT
*from_image_ctx
, ImageCtxT
*to_image_ctx
);
84 int remove_migration(ImageCtxT
*image_ctx
);
85 int relink_children(ImageCtxT
*from_image_ctx
, ImageCtxT
*to_image_ctx
);
86 int remove_src_image();
88 int v1_set_migration();
89 int v2_set_migration();
90 int v1_unlink_src_image();
91 int v2_unlink_src_image();
92 int v1_relink_src_image();
93 int v2_relink_src_image();
95 int relink_child(ImageCtxT
*from_image_ctx
, ImageCtxT
*to_image_ctx
,
96 const librbd::snap_info_t
&src_snap
,
97 const librbd::linked_image_spec_t
&child_image
,
98 bool migration_abort
, bool reattach_child
);
102 } // namespace librbd
104 extern template class librbd::api::Migration
<librbd::ImageCtx
>;
106 #endif // CEPH_LIBRBD_API_MIGRATION_H