1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef RBD_MIRROR_IMAGE_SYNC_TYPES_H
5 #define RBD_MIRROR_IMAGE_SYNC_TYPES_H
7 #include "cls/rbd/cls_rbd_types.h"
8 #include "librbd/Types.h"
11 #include <boost/optional.hpp>
17 namespace image_sync
{
20 typedef boost::optional
<uint64_t> ObjectNumber
;
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
) {
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
;
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
);
46 typedef std::list
<SyncPoint
> SyncPoints
;
48 struct SyncPointHandler
{
50 SyncPointHandler(const SyncPointHandler
&) = delete;
51 SyncPointHandler
& operator=(const SyncPointHandler
&) = delete;
53 virtual ~SyncPointHandler() {}
54 virtual void destroy() {
58 virtual SyncPoints
get_sync_points() const = 0;
59 virtual librbd::SnapSeqs
get_snap_seqs() const = 0;
61 virtual void update_sync_points(const librbd::SnapSeqs
& snap_seq
,
62 const SyncPoints
& sync_points
,
64 Context
* on_finish
) = 0;
70 } // namespace image_sync
74 #endif // RBD_MIRROR_IMAGE_SYNC_TYPES_H