]> git.proxmox.com Git - ceph.git/blob - ceph/src/tools/rbd_mirror/image_sync/Types.h
import 15.2.0 Octopus source
[ceph.git] / ceph / src / tools / rbd_mirror / image_sync / Types.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 RBD_MIRROR_IMAGE_SYNC_TYPES_H
5 #define RBD_MIRROR_IMAGE_SYNC_TYPES_H
6
7 #include "cls/rbd/cls_rbd_types.h"
8 #include "librbd/Types.h"
9 #include <list>
10 #include <string>
11 #include <boost/optional.hpp>
12
13 struct Context;
14
15 namespace rbd {
16 namespace mirror {
17 namespace image_sync {
18
19 struct SyncPoint {
20 typedef boost::optional<uint64_t> ObjectNumber;
21
22 SyncPoint() {
23 }
24 SyncPoint(const cls::rbd::SnapshotNamespace& snap_namespace,
25 const std::string& snap_name,
26 const std::string& from_snap_name,
27 const ObjectNumber& object_number)
28 : snap_namespace(snap_namespace), snap_name(snap_name),
29 from_snap_name(from_snap_name), object_number(object_number) {
30 }
31
32 cls::rbd::SnapshotNamespace snap_namespace =
33 {cls::rbd::UserSnapshotNamespace{}};
34 std::string snap_name;
35 std::string from_snap_name;
36 ObjectNumber object_number = boost::none;
37
38 bool operator==(const SyncPoint& rhs) const {
39 return (snap_namespace == rhs.snap_namespace &&
40 snap_name == rhs.snap_name &&
41 from_snap_name == rhs.from_snap_name &&
42 object_number == rhs.object_number);
43 }
44 };
45
46 typedef std::list<SyncPoint> SyncPoints;
47
48 struct SyncPointHandler {
49 public:
50 SyncPointHandler(const SyncPointHandler&) = delete;
51 SyncPointHandler& operator=(const SyncPointHandler&) = delete;
52
53 virtual ~SyncPointHandler() {}
54 virtual void destroy() {
55 delete this;
56 }
57
58 virtual SyncPoints get_sync_points() const = 0;
59 virtual librbd::SnapSeqs get_snap_seqs() const = 0;
60
61 virtual void update_sync_points(const librbd::SnapSeqs& snap_seq,
62 const SyncPoints& sync_points,
63 bool sync_complete,
64 Context* on_finish) = 0;
65
66 protected:
67 SyncPointHandler() {}
68 };
69
70 } // namespace image_sync
71 } // namespace mirror
72 } // namespace rbd
73
74 #endif // RBD_MIRROR_IMAGE_SYNC_TYPES_H