]> git.proxmox.com Git - ceph.git/blame - ceph/src/tools/rbd_mirror/instance_watcher/Types.h
update sources to v12.1.3
[ceph.git] / ceph / src / tools / rbd_mirror / instance_watcher / Types.h
CommitLineData
7c673cae
FG
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_INSTANCE_WATCHER_TYPES_H
5#define RBD_MIRROR_INSTANCE_WATCHER_TYPES_H
6
7#include <string>
8#include <set>
9#include <boost/variant.hpp>
10
11#include "include/buffer_fwd.h"
12#include "include/encoding.h"
13#include "include/int_types.h"
14
15namespace ceph { class Formatter; }
16
17namespace rbd {
18namespace mirror {
19namespace instance_watcher {
20
21enum NotifyOp {
d2e6a577
FG
22 NOTIFY_OP_IMAGE_ACQUIRE = 0,
23 NOTIFY_OP_IMAGE_RELEASE = 1,
24 NOTIFY_OP_PEER_IMAGE_REMOVED = 2,
25 NOTIFY_OP_SYNC_REQUEST = 3,
26 NOTIFY_OP_SYNC_START = 4
7c673cae
FG
27};
28
31f18b77 29struct PayloadBase {
7c673cae 30 uint64_t request_id;
31f18b77
FG
31
32 PayloadBase() : request_id(0) {
33 }
34
35 PayloadBase(uint64_t request_id) : request_id(request_id) {
36 }
37
38 void encode(bufferlist &bl) const;
39 void decode(__u8 version, bufferlist::iterator &iter);
40 void dump(Formatter *f) const;
41};
42
43struct ImagePayloadBase : public PayloadBase {
7c673cae 44 std::string global_image_id;
7c673cae 45
31f18b77 46 ImagePayloadBase() : PayloadBase() {
7c673cae
FG
47 }
48
d2e6a577
FG
49 ImagePayloadBase(uint64_t request_id, const std::string &global_image_id)
50 : PayloadBase(request_id), global_image_id(global_image_id) {
7c673cae
FG
51 }
52
53 void encode(bufferlist &bl) const;
54 void decode(__u8 version, bufferlist::iterator &iter);
55 void dump(Formatter *f) const;
56};
57
58struct ImageAcquirePayload : public ImagePayloadBase {
59 static const NotifyOp NOTIFY_OP = NOTIFY_OP_IMAGE_ACQUIRE;
60
d2e6a577 61 ImageAcquirePayload() {
7c673cae 62 }
d2e6a577
FG
63 ImageAcquirePayload(uint64_t request_id, const std::string &global_image_id)
64 : ImagePayloadBase(request_id, global_image_id) {
7c673cae
FG
65 }
66};
67
68struct ImageReleasePayload : public ImagePayloadBase {
69 static const NotifyOp NOTIFY_OP = NOTIFY_OP_IMAGE_RELEASE;
70
d2e6a577 71 ImageReleasePayload() {
7c673cae 72 }
d2e6a577
FG
73 ImageReleasePayload(uint64_t request_id, const std::string &global_image_id)
74 : ImagePayloadBase(request_id, global_image_id) {
75 }
76};
7c673cae 77
d2e6a577
FG
78struct PeerImageRemovedPayload : public PayloadBase {
79 static const NotifyOp NOTIFY_OP = NOTIFY_OP_PEER_IMAGE_REMOVED;
80
81 std::string global_image_id;
82 std::string peer_mirror_uuid;
83
84 PeerImageRemovedPayload() {
85 }
86 PeerImageRemovedPayload(uint64_t request_id,
87 const std::string& global_image_id,
88 const std::string& peer_mirror_uuid)
89 : PayloadBase(request_id),
90 global_image_id(global_image_id), peer_mirror_uuid(peer_mirror_uuid) {
7c673cae
FG
91 }
92
93 void encode(bufferlist &bl) const;
94 void decode(__u8 version, bufferlist::iterator &iter);
95 void dump(Formatter *f) const;
96};
97
31f18b77
FG
98struct SyncPayloadBase : public PayloadBase {
99 std::string sync_id;
100
101 SyncPayloadBase() : PayloadBase() {
102 }
103
104 SyncPayloadBase(uint64_t request_id, const std::string &sync_id)
105 : PayloadBase(request_id), sync_id(sync_id) {
106 }
107
108 void encode(bufferlist &bl) const;
109 void decode(__u8 version, bufferlist::iterator &iter);
110 void dump(Formatter *f) const;
111};
112
113struct SyncRequestPayload : public SyncPayloadBase {
114 static const NotifyOp NOTIFY_OP = NOTIFY_OP_SYNC_REQUEST;
115
116 SyncRequestPayload() : SyncPayloadBase() {
117 }
118
119 SyncRequestPayload(uint64_t request_id, const std::string &sync_id)
120 : SyncPayloadBase(request_id, sync_id) {
121 }
122};
123
124struct SyncStartPayload : public SyncPayloadBase {
125 static const NotifyOp NOTIFY_OP = NOTIFY_OP_SYNC_START;
126
127 SyncStartPayload() : SyncPayloadBase() {
128 }
129
130 SyncStartPayload(uint64_t request_id, const std::string &sync_id)
131 : SyncPayloadBase(request_id, sync_id) {
132 }
133};
134
7c673cae
FG
135struct UnknownPayload {
136 static const NotifyOp NOTIFY_OP = static_cast<NotifyOp>(-1);
137
138 UnknownPayload() {
139 }
140
141 void encode(bufferlist &bl) const;
142 void decode(__u8 version, bufferlist::iterator &iter);
143 void dump(Formatter *f) const;
144};
145
146typedef boost::variant<ImageAcquirePayload,
147 ImageReleasePayload,
d2e6a577 148 PeerImageRemovedPayload,
31f18b77
FG
149 SyncRequestPayload,
150 SyncStartPayload,
7c673cae
FG
151 UnknownPayload> Payload;
152
153struct NotifyMessage {
154 NotifyMessage(const Payload &payload = UnknownPayload()) : payload(payload) {
155 }
156
157 Payload payload;
158
159 void encode(bufferlist& bl) const;
160 void decode(bufferlist::iterator& it);
161 void dump(Formatter *f) const;
162
163 static void generate_test_instances(std::list<NotifyMessage *> &o);
164};
165
166WRITE_CLASS_ENCODER(NotifyMessage);
167
168std::ostream &operator<<(std::ostream &out, const NotifyOp &op);
169
170struct NotifyAckPayload {
171 std::string instance_id;
172 uint64_t request_id;
173 int ret_val;
174
175 NotifyAckPayload() : request_id(0), ret_val(0) {
176 }
177
178 NotifyAckPayload(const std::string &instance_id, uint64_t request_id,
179 int ret_val)
180 : instance_id(instance_id), request_id(request_id), ret_val(ret_val) {
181 }
182
183 void encode(bufferlist &bl) const;
184 void decode(bufferlist::iterator& it);
185 void dump(Formatter *f) const;
186};
187
188WRITE_CLASS_ENCODER(NotifyAckPayload);
189
190} // namespace instance_watcher
191} // namespace mirror
192} // namespace librbd
193
194using rbd::mirror::instance_watcher::encode;
195using rbd::mirror::instance_watcher::decode;
196
197#endif // RBD_MIRROR_INSTANCE_WATCHER_TYPES_H