]>
git.proxmox.com Git - ceph.git/blob - ceph/src/tools/rbd_mirror/instance_watcher/Types.h
53b333c34afc98da330d99b9e74d50f04cb3d2d1
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_INSTANCE_WATCHER_TYPES_H
5 #define RBD_MIRROR_INSTANCE_WATCHER_TYPES_H
9 #include <boost/variant.hpp>
11 #include "include/buffer_fwd.h"
12 #include "include/encoding.h"
13 #include "include/int_types.h"
15 namespace ceph
{ class Formatter
; }
19 namespace instance_watcher
{
22 NOTIFY_OP_IMAGE_ACQUIRE
= 0,
23 NOTIFY_OP_IMAGE_RELEASE
= 1,
24 NOTIFY_OP_SYNC_REQUEST
= 2,
25 NOTIFY_OP_SYNC_START
= 3,
31 PayloadBase() : request_id(0) {
34 PayloadBase(uint64_t request_id
) : request_id(request_id
) {
37 void encode(bufferlist
&bl
) const;
38 void decode(__u8 version
, bufferlist::iterator
&iter
);
39 void dump(Formatter
*f
) const;
42 struct ImagePayloadBase
: public PayloadBase
{
43 std::string global_image_id
;
44 std::string peer_mirror_uuid
;
45 std::string peer_image_id
;
47 ImagePayloadBase() : PayloadBase() {
50 ImagePayloadBase(uint64_t request_id
, const std::string
&global_image_id
,
51 const std::string
&peer_mirror_uuid
,
52 const std::string
&peer_image_id
)
53 : PayloadBase(request_id
), global_image_id(global_image_id
),
54 peer_mirror_uuid(peer_mirror_uuid
), peer_image_id(peer_image_id
) {
57 void encode(bufferlist
&bl
) const;
58 void decode(__u8 version
, bufferlist::iterator
&iter
);
59 void dump(Formatter
*f
) const;
62 struct ImageAcquirePayload
: public ImagePayloadBase
{
63 static const NotifyOp NOTIFY_OP
= NOTIFY_OP_IMAGE_ACQUIRE
;
65 ImageAcquirePayload() : ImagePayloadBase() {
68 ImageAcquirePayload(uint64_t request_id
, const std::string
&global_image_id
,
69 const std::string
&peer_mirror_uuid
,
70 const std::string
&peer_image_id
)
71 : ImagePayloadBase(request_id
, global_image_id
, peer_mirror_uuid
,
76 struct ImageReleasePayload
: public ImagePayloadBase
{
77 static const NotifyOp NOTIFY_OP
= NOTIFY_OP_IMAGE_RELEASE
;
81 ImageReleasePayload() : ImagePayloadBase(), schedule_delete(false) {
84 ImageReleasePayload(uint64_t request_id
, const std::string
&global_image_id
,
85 const std::string
&peer_mirror_uuid
,
86 const std::string
&peer_image_id
, bool schedule_delete
)
87 : ImagePayloadBase(request_id
, global_image_id
, peer_mirror_uuid
,
89 schedule_delete(schedule_delete
) {
92 void encode(bufferlist
&bl
) const;
93 void decode(__u8 version
, bufferlist::iterator
&iter
);
94 void dump(Formatter
*f
) const;
97 struct SyncPayloadBase
: public PayloadBase
{
100 SyncPayloadBase() : PayloadBase() {
103 SyncPayloadBase(uint64_t request_id
, const std::string
&sync_id
)
104 : PayloadBase(request_id
), sync_id(sync_id
) {
107 void encode(bufferlist
&bl
) const;
108 void decode(__u8 version
, bufferlist::iterator
&iter
);
109 void dump(Formatter
*f
) const;
112 struct SyncRequestPayload
: public SyncPayloadBase
{
113 static const NotifyOp NOTIFY_OP
= NOTIFY_OP_SYNC_REQUEST
;
115 SyncRequestPayload() : SyncPayloadBase() {
118 SyncRequestPayload(uint64_t request_id
, const std::string
&sync_id
)
119 : SyncPayloadBase(request_id
, sync_id
) {
123 struct SyncStartPayload
: public SyncPayloadBase
{
124 static const NotifyOp NOTIFY_OP
= NOTIFY_OP_SYNC_START
;
126 SyncStartPayload() : SyncPayloadBase() {
129 SyncStartPayload(uint64_t request_id
, const std::string
&sync_id
)
130 : SyncPayloadBase(request_id
, sync_id
) {
134 struct UnknownPayload
{
135 static const NotifyOp NOTIFY_OP
= static_cast<NotifyOp
>(-1);
140 void encode(bufferlist
&bl
) const;
141 void decode(__u8 version
, bufferlist::iterator
&iter
);
142 void dump(Formatter
*f
) const;
145 typedef boost::variant
<ImageAcquirePayload
,
149 UnknownPayload
> Payload
;
151 struct NotifyMessage
{
152 NotifyMessage(const Payload
&payload
= UnknownPayload()) : payload(payload
) {
157 void encode(bufferlist
& bl
) const;
158 void decode(bufferlist::iterator
& it
);
159 void dump(Formatter
*f
) const;
161 static void generate_test_instances(std::list
<NotifyMessage
*> &o
);
164 WRITE_CLASS_ENCODER(NotifyMessage
);
166 std::ostream
&operator<<(std::ostream
&out
, const NotifyOp
&op
);
168 struct NotifyAckPayload
{
169 std::string instance_id
;
173 NotifyAckPayload() : request_id(0), ret_val(0) {
176 NotifyAckPayload(const std::string
&instance_id
, uint64_t request_id
,
178 : instance_id(instance_id
), request_id(request_id
), ret_val(ret_val
) {
181 void encode(bufferlist
&bl
) const;
182 void decode(bufferlist::iterator
& it
);
183 void dump(Formatter
*f
) const;
186 WRITE_CLASS_ENCODER(NotifyAckPayload
);
188 } // namespace instance_watcher
189 } // namespace mirror
190 } // namespace librbd
192 using rbd::mirror::instance_watcher::encode
;
193 using rbd::mirror::instance_watcher::decode
;
195 #endif // RBD_MIRROR_INSTANCE_WATCHER_TYPES_H