]> git.proxmox.com Git - ceph.git/blob - ceph/src/librbd/api/Migration.h
import 15.2.0 Octopus source
[ceph.git] / ceph / src / librbd / api / Migration.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3
4 #ifndef CEPH_LIBRBD_API_MIGRATION_H
5 #define CEPH_LIBRBD_API_MIGRATION_H
6
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"
11
12 #include <vector>
13
14 namespace librbd {
15
16 class ImageCtx;
17
18 namespace api {
19
20 template <typename ImageCtxT = librbd::ImageCtx>
21 class Migration {
22 public:
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);
34
35 private:
36 CephContext* m_cct;
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;
48 bool m_flatten;
49 bool m_mirroring;
50 cls::rbd::MirrorImageMode m_mirror_image_mode;
51 ProgressContext *m_prog_ctx;
52
53 cls::rbd::MigrationSpec m_src_migration_spec;
54 cls::rbd::MigrationSpec m_dst_migration_spec;
55
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);
62
63 int prepare();
64 int execute();
65 int abort();
66 int commit();
67 int status(image_migration_status_t *status);
68
69 int set_state(cls::rbd::MigrationState state, const std::string &description);
70
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);
77 int set_migration();
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();
87
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();
94
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);
99 };
100
101 } // namespace api
102 } // namespace librbd
103
104 extern template class librbd::api::Migration<librbd::ImageCtx>;
105
106 #endif // CEPH_LIBRBD_API_MIGRATION_H