]> git.proxmox.com Git - ceph.git/blob - ceph/src/cls/rbd/cls_rbd_client.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / cls / rbd / cls_rbd_client.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_CLS_RBD_CLIENT_H
5 #define CEPH_LIBRBD_CLS_RBD_CLIENT_H
6
7 #include "cls/lock/cls_lock_types.h"
8 #include "cls/rbd/cls_rbd_types.h"
9 #include "common/snap_types.h"
10 #include "include/types.h"
11 #include "include/rados/librados_fwd.hpp"
12
13 class Context;
14 namespace ceph { template <uint8_t> class BitVector; }
15 namespace neorados { struct WriteOp; }
16
17 namespace librbd {
18 namespace cls_client {
19
20 // low-level interface (mainly for testing)
21 void create_image(librados::ObjectWriteOperation *op, uint64_t size,
22 uint8_t order, uint64_t features,
23 const std::string &object_prefix, int64_t data_pool_id);
24 int create_image(librados::IoCtx *ioctx, const std::string &oid,
25 uint64_t size, uint8_t order, uint64_t features,
26 const std::string &object_prefix, int64_t data_pool_id);
27
28 void get_features_start(librados::ObjectReadOperation *op, bool read_only);
29 int get_features_finish(ceph::buffer::list::const_iterator *it, uint64_t *features,
30 uint64_t *incompatible_features);
31 int get_features(librados::IoCtx *ioctx, const std::string &oid,
32 bool read_only, uint64_t *features,
33 uint64_t *incompatible_features);
34 void set_features(librados::ObjectWriteOperation *op, uint64_t features,
35 uint64_t mask);
36 int set_features(librados::IoCtx *ioctx, const std::string &oid,
37 uint64_t features, uint64_t mask);
38
39 void get_object_prefix_start(librados::ObjectReadOperation *op);
40 int get_object_prefix_finish(ceph::buffer::list::const_iterator *it,
41 std::string *object_prefix);
42 int get_object_prefix(librados::IoCtx *ioctx, const std::string &oid,
43 std::string *object_prefix);
44
45 void get_data_pool_start(librados::ObjectReadOperation *op);
46 int get_data_pool_finish(ceph::buffer::list::const_iterator *it, int64_t *data_pool_id);
47 int get_data_pool(librados::IoCtx *ioctx, const std::string &oid,
48 int64_t *data_pool_id);
49
50 void get_size_start(librados::ObjectReadOperation *op, snapid_t snap_id);
51 int get_size_finish(ceph::buffer::list::const_iterator *it, uint64_t *size,
52 uint8_t *order);
53 int get_size(librados::IoCtx *ioctx, const std::string &oid,
54 snapid_t snap_id, uint64_t *size, uint8_t *order);
55 int set_size(librados::IoCtx *ioctx, const std::string &oid,
56 uint64_t size);
57 void set_size(librados::ObjectWriteOperation *op, uint64_t size);
58
59 void get_flags_start(librados::ObjectReadOperation *op, snapid_t snap_id);
60 int get_flags_finish(ceph::buffer::list::const_iterator *it, uint64_t *flags);
61 int get_flags(librados::IoCtx *ioctx, const std::string &oid,
62 snapid_t snap_id, uint64_t *flags);
63
64 void set_flags(librados::ObjectWriteOperation *op, snapid_t snap_id,
65 uint64_t flags, uint64_t mask);
66
67 void op_features_get_start(librados::ObjectReadOperation *op);
68 int op_features_get_finish(ceph::buffer::list::const_iterator *it,
69 uint64_t *op_features);
70 int op_features_get(librados::IoCtx *ioctx, const std::string &oid,
71 uint64_t *op_features);
72 void op_features_set(librados::ObjectWriteOperation *op,
73 uint64_t op_features, uint64_t mask);
74 int op_features_set(librados::IoCtx *ioctx, const std::string &oid,
75 uint64_t op_features, uint64_t mask);
76
77 // NOTE: deprecate v1 parent APIs after mimic EOLed
78 void get_parent_start(librados::ObjectReadOperation *op, snapid_t snap_id);
79 int get_parent_finish(ceph::buffer::list::const_iterator *it,
80 cls::rbd::ParentImageSpec *pspec,
81 uint64_t *parent_overlap);
82 int get_parent(librados::IoCtx *ioctx, const std::string &oid,
83 snapid_t snap_id, cls::rbd::ParentImageSpec *pspec,
84 uint64_t *parent_overlap);
85 int set_parent(librados::IoCtx *ioctx, const std::string &oid,
86 const cls::rbd::ParentImageSpec &pspec, uint64_t parent_overlap);
87 void set_parent(librados::ObjectWriteOperation *op,
88 const cls::rbd::ParentImageSpec &pspec,
89 uint64_t parent_overlap);
90 int remove_parent(librados::IoCtx *ioctx, const std::string &oid);
91 void remove_parent(librados::ObjectWriteOperation *op);
92
93 // v2 parent APIs
94 void parent_get_start(librados::ObjectReadOperation* op);
95 int parent_get_finish(ceph::buffer::list::const_iterator* it,
96 cls::rbd::ParentImageSpec* parent_image_spec);
97 int parent_get(librados::IoCtx* ioctx, const std::string &oid,
98 cls::rbd::ParentImageSpec* parent_image_spec);
99
100 void parent_overlap_get_start(librados::ObjectReadOperation* op,
101 snapid_t snap_id);
102 int parent_overlap_get_finish(ceph::buffer::list::const_iterator* it,
103 std::optional<uint64_t>* parent_overlap);
104 int parent_overlap_get(librados::IoCtx* ioctx, const std::string &oid,
105 snapid_t snap_id,
106 std::optional<uint64_t>* parent_overlap);
107
108 void parent_attach(librados::ObjectWriteOperation* op,
109 const cls::rbd::ParentImageSpec& parent_image_spec,
110 uint64_t parent_overlap, bool reattach);
111 int parent_attach(librados::IoCtx *ioctx, const std::string &oid,
112 const cls::rbd::ParentImageSpec& parent_image_spec,
113 uint64_t parent_overlap, bool reattach);
114
115 void parent_detach(librados::ObjectWriteOperation* op);
116 int parent_detach(librados::IoCtx *ioctx, const std::string &oid);
117
118 int add_child(librados::IoCtx *ioctx, const std::string &oid,
119 const cls::rbd::ParentImageSpec &pspec,
120 const std::string &c_imageid);
121 void add_child(librados::ObjectWriteOperation *op,
122 const cls::rbd::ParentImageSpec& pspec,
123 const std::string &c_imageid);
124 void remove_child(librados::ObjectWriteOperation *op,
125 const cls::rbd::ParentImageSpec &pspec,
126 const std::string &c_imageid);
127 int remove_child(librados::IoCtx *ioctx, const std::string &oid,
128 const cls::rbd::ParentImageSpec &pspec,
129 const std::string &c_imageid);
130 void get_children_start(librados::ObjectReadOperation *op,
131 const cls::rbd::ParentImageSpec &pspec);
132 int get_children_finish(ceph::buffer::list::const_iterator *it,
133 std::set<std::string> *children);
134 int get_children(librados::IoCtx *ioctx, const std::string &oid,
135 const cls::rbd::ParentImageSpec& pspec, std::set<std::string>& children);
136
137 void snapshot_get_start(librados::ObjectReadOperation* op,
138 snapid_t snap_id);
139 int snapshot_get_finish(ceph::buffer::list::const_iterator* it,
140 cls::rbd::SnapshotInfo* snap_info);
141 int snapshot_get(librados::IoCtx *ioctx, const std::string &oid,
142 snapid_t snap_id, cls::rbd::SnapshotInfo* snap_info);
143
144 void snapshot_add(librados::ObjectWriteOperation *op, snapid_t snap_id,
145 const std::string &snap_name,
146 const cls::rbd::SnapshotNamespace &snap_namespace);
147 void snapshot_remove(librados::ObjectWriteOperation *op, snapid_t snap_id);
148 void snapshot_rename(librados::ObjectWriteOperation *op,
149 snapid_t src_snap_id,
150 const std::string &dst_name);
151 void snapshot_trash_add(librados::ObjectWriteOperation *op,
152 snapid_t snap_id);
153
154 void get_snapcontext_start(librados::ObjectReadOperation *op);
155 int get_snapcontext_finish(ceph::buffer::list::const_iterator *it,
156 ::SnapContext *snapc);
157 int get_snapcontext(librados::IoCtx *ioctx, const std::string &oid,
158 ::SnapContext *snapc);
159
160 /// NOTE: remove after Luminous is retired
161 void get_snapshot_name_start(librados::ObjectReadOperation *op,
162 snapid_t snap_id);
163 int get_snapshot_name_finish(ceph::buffer::list::const_iterator *it,
164 std::string *name);
165 int get_snapshot_name(librados::IoCtx *ioctx, const std::string &oid,
166 snapid_t snap_id, std::string *name);
167
168 /// NOTE: remove after Luminous is retired
169 void get_snapshot_timestamp_start(librados::ObjectReadOperation *op,
170 snapid_t snap_id);
171 int get_snapshot_timestamp_finish(ceph::buffer::list::const_iterator *it,
172 utime_t *timestamp);
173 int get_snapshot_timestamp(librados::IoCtx *ioctx, const std::string &oid,
174 snapid_t snap_id, utime_t *timestamp);
175
176 void get_all_features_start(librados::ObjectReadOperation *op);
177 int get_all_features_finish(ceph::buffer::list::const_iterator *it,
178 uint64_t *all_features);
179 int get_all_features(librados::IoCtx *ioctx, const std::string &oid,
180 uint64_t *all_features);
181
182 /// NOTE: remove protection after clone v1 is retired
183 void get_protection_status_start(librados::ObjectReadOperation *op,
184 snapid_t snap_id);
185 int get_protection_status_finish(ceph::buffer::list::const_iterator *it,
186 uint8_t *protection_status);
187 int get_protection_status(librados::IoCtx *ioctx, const std::string &oid,
188 snapid_t snap_id, uint8_t *protection_status);
189
190 int set_protection_status(librados::IoCtx *ioctx, const std::string &oid,
191 snapid_t snap_id, uint8_t protection_status);
192 void set_protection_status(librados::ObjectWriteOperation *op,
193 snapid_t snap_id, uint8_t protection_status);
194
195 void snapshot_get_limit_start(librados::ObjectReadOperation *op);
196 int snapshot_get_limit_finish(ceph::buffer::list::const_iterator *it, uint64_t *limit);
197 int snapshot_get_limit(librados::IoCtx *ioctx, const std::string &oid,
198 uint64_t *limit);
199 void snapshot_set_limit(librados::ObjectWriteOperation *op,
200 uint64_t limit);
201
202 void get_stripe_unit_count_start(librados::ObjectReadOperation *op);
203 int get_stripe_unit_count_finish(ceph::buffer::list::const_iterator *it,
204 uint64_t *stripe_unit,
205 uint64_t *stripe_count);
206 int get_stripe_unit_count(librados::IoCtx *ioctx, const std::string &oid,
207 uint64_t *stripe_unit, uint64_t *stripe_count);
208
209 void set_stripe_unit_count(librados::ObjectWriteOperation *op,
210 uint64_t stripe_unit, uint64_t stripe_count);
211 int set_stripe_unit_count(librados::IoCtx *ioctx, const std::string &oid,
212 uint64_t stripe_unit, uint64_t stripe_count);
213
214 void get_create_timestamp_start(librados::ObjectReadOperation *op);
215 int get_create_timestamp_finish(ceph::buffer::list::const_iterator *it,
216 utime_t *timestamp);
217 int get_create_timestamp(librados::IoCtx *ioctx, const std::string &oid,
218 utime_t *timestamp);
219
220 void get_access_timestamp_start(librados::ObjectReadOperation *op);
221 int get_access_timestamp_finish(ceph::buffer::list::const_iterator *it,
222 utime_t *timestamp);
223 int get_access_timestamp(librados::IoCtx *ioctx, const std::string &oid,
224 utime_t *timestamp);
225
226 void set_access_timestamp(librados::ObjectWriteOperation *op);
227 int set_access_timestamp(librados::IoCtx *ioctx, const std::string &oid);
228
229 void get_modify_timestamp_start(librados::ObjectReadOperation *op);
230 int get_modify_timestamp_finish(ceph::buffer::list::const_iterator *it,
231 utime_t *timestamp);
232 int get_modify_timestamp(librados::IoCtx *ioctx, const std::string &oid,
233 utime_t *timestamp);
234
235 void set_modify_timestamp(librados::ObjectWriteOperation *op);
236 int set_modify_timestamp(librados::IoCtx *ioctx, const std::string &oid);
237
238 int metadata_list(librados::IoCtx *ioctx, const std::string &oid,
239 const std::string &start, uint64_t max_return,
240 std::map<std::string, ceph::buffer::list> *pairs);
241 void metadata_list_start(librados::ObjectReadOperation *op,
242 const std::string &start, uint64_t max_return);
243 int metadata_list_finish(ceph::buffer::list::const_iterator *it,
244 std::map<std::string, ceph::buffer::list> *pairs);
245 void metadata_set(librados::ObjectWriteOperation *op,
246 const std::map<std::string, ceph::buffer::list> &data);
247 int metadata_set(librados::IoCtx *ioctx, const std::string &oid,
248 const std::map<std::string, ceph::buffer::list> &data);
249 void metadata_remove(librados::ObjectWriteOperation *op,
250 const std::string &key);
251 int metadata_remove(librados::IoCtx *ioctx, const std::string &oid,
252 const std::string &key);
253 void metadata_get_start(librados::ObjectReadOperation* op,
254 const std::string &key);
255 int metadata_get_finish(ceph::buffer::list::const_iterator *it,
256 std::string* value);
257 int metadata_get(librados::IoCtx *ioctx, const std::string &oid,
258 const std::string &key, std::string *v);
259
260 void child_attach(librados::ObjectWriteOperation *op, snapid_t snap_id,
261 const cls::rbd::ChildImageSpec& child_image);
262 int child_attach(librados::IoCtx *ioctx, const std::string &oid,
263 snapid_t snap_id,
264 const cls::rbd::ChildImageSpec& child_image);
265 void child_detach(librados::ObjectWriteOperation *op, snapid_t snap_id,
266 const cls::rbd::ChildImageSpec& child_image);
267 int child_detach(librados::IoCtx *ioctx, const std::string &oid,
268 snapid_t snap_id,
269 const cls::rbd::ChildImageSpec& child_image);
270 void children_list_start(librados::ObjectReadOperation *op,
271 snapid_t snap_id);
272 int children_list_finish(ceph::buffer::list::const_iterator *it,
273 cls::rbd::ChildImageSpecs *child_images);
274 int children_list(librados::IoCtx *ioctx, const std::string &oid,
275 snapid_t snap_id,
276 cls::rbd::ChildImageSpecs *child_images);
277 int migration_set(librados::IoCtx *ioctx, const std::string &oid,
278 const cls::rbd::MigrationSpec &migration_spec);
279 void migration_set(librados::ObjectWriteOperation *op,
280 const cls::rbd::MigrationSpec &migration_spec);
281 int migration_set_state(librados::IoCtx *ioctx, const std::string &oid,
282 cls::rbd::MigrationState state,
283 const std::string &description);
284 void migration_set_state(librados::ObjectWriteOperation *op,
285 cls::rbd::MigrationState state,
286 const std::string &description);
287 void migration_get_start(librados::ObjectReadOperation *op);
288 int migration_get_finish(ceph::buffer::list::const_iterator *it,
289 cls::rbd::MigrationSpec *migration_spec);
290 int migration_get(librados::IoCtx *ioctx, const std::string &oid,
291 cls::rbd::MigrationSpec *migration_spec);
292 int migration_remove(librados::IoCtx *ioctx, const std::string &oid);
293 void migration_remove(librados::ObjectWriteOperation *op);
294
295 // operations on rbd_id objects
296 void get_id_start(librados::ObjectReadOperation *op);
297 int get_id_finish(ceph::buffer::list::const_iterator *it, std::string *id);
298 int get_id(librados::IoCtx *ioctx, const std::string &oid, std::string *id);
299
300 void set_id(librados::ObjectWriteOperation *op, const std::string &id);
301 int set_id(librados::IoCtx *ioctx, const std::string &oid, const std::string &id);
302
303 // operations on rbd_directory objects
304 int dir_get_id(librados::IoCtx *ioctx, const std::string &oid,
305 const std::string &name, std::string *id);
306 void dir_get_id_start(librados::ObjectReadOperation *op,
307 const std::string &image_name);
308 int dir_get_id_finish(ceph::buffer::list::const_iterator *iter, std::string *image_id);
309 void dir_get_name_start(librados::ObjectReadOperation *op,
310 const std::string &id);
311 int dir_get_name_finish(ceph::buffer::list::const_iterator *it, std::string *name);
312 int dir_get_name(librados::IoCtx *ioctx, const std::string &oid,
313 const std::string &id, std::string *name);
314 void dir_list_start(librados::ObjectReadOperation *op,
315 const std::string &start, uint64_t max_return);
316 int dir_list_finish(ceph::buffer::list::const_iterator *it, std::map<std::string, std::string> *images);
317 int dir_list(librados::IoCtx *ioctx, const std::string &oid,
318 const std::string &start, uint64_t max_return,
319 std::map<std::string, std::string> *images);
320 void dir_add_image(librados::ObjectWriteOperation *op,
321 const std::string &name, const std::string &id);
322 int dir_add_image(librados::IoCtx *ioctx, const std::string &oid,
323 const std::string &name, const std::string &id);
324 int dir_remove_image(librados::IoCtx *ioctx, const std::string &oid,
325 const std::string &name, const std::string &id);
326 void dir_remove_image(librados::ObjectWriteOperation *op,
327 const std::string &name, const std::string &id);
328 // atomic remove and add
329 void dir_rename_image(librados::ObjectWriteOperation *op,
330 const std::string &src, const std::string &dest,
331 const std::string &id);
332 void dir_state_assert(librados::ObjectOperation *op,
333 cls::rbd::DirectoryState directory_state);
334 int dir_state_assert(librados::IoCtx *ioctx, const std::string &oid,
335 cls::rbd::DirectoryState directory_state);
336 void dir_state_set(librados::ObjectWriteOperation *op,
337 cls::rbd::DirectoryState directory_state);
338 int dir_state_set(librados::IoCtx *ioctx, const std::string &oid,
339 cls::rbd::DirectoryState directory_state);
340
341 // operations on the rbd_object_map.$image_id object
342 void object_map_load_start(librados::ObjectReadOperation *op);
343 int object_map_load_finish(ceph::buffer::list::const_iterator *it,
344 ceph::BitVector<2> *object_map);
345 int object_map_load(librados::IoCtx *ioctx, const std::string &oid,
346 ceph::BitVector<2> *object_map);
347 void object_map_save(librados::ObjectWriteOperation *rados_op,
348 const ceph::BitVector<2> &object_map);
349 void object_map_resize(librados::ObjectWriteOperation *rados_op,
350 uint64_t object_count, uint8_t default_state);
351 void object_map_update(librados::ObjectWriteOperation *rados_op,
352 uint64_t start_object_no, uint64_t end_object_no,
353 uint8_t new_object_state,
354 const boost::optional<uint8_t> &current_object_state);
355 void object_map_snap_add(librados::ObjectWriteOperation *rados_op);
356 void object_map_snap_remove(librados::ObjectWriteOperation *rados_op,
357 const ceph::BitVector<2> &object_map);
358
359 // class operations on the old format, kept for
360 // backwards compatibility
361 void old_snapshot_add(librados::ObjectWriteOperation *rados_op,
362 snapid_t snap_id, const std::string &snap_name);
363 void old_snapshot_remove(librados::ObjectWriteOperation *rados_op,
364 const std::string &snap_name);
365 void old_snapshot_rename(librados::ObjectWriteOperation *rados_op,
366 snapid_t src_snap_id, const std::string &dst_name);
367
368 void old_snapshot_list_start(librados::ObjectReadOperation *op);
369 int old_snapshot_list_finish(ceph::buffer::list::const_iterator *it,
370 std::vector<std::string> *names,
371 std::vector<uint64_t> *sizes,
372 ::SnapContext *snapc);
373 int old_snapshot_list(librados::IoCtx *ioctx, const std::string &oid,
374 std::vector<std::string> *names,
375 std::vector<uint64_t> *sizes,
376 ::SnapContext *snapc);
377
378 // operations on the rbd_mirroring object
379 void mirror_uuid_get_start(librados::ObjectReadOperation *op);
380 int mirror_uuid_get_finish(ceph::buffer::list::const_iterator *it,
381 std::string *uuid);
382 int mirror_uuid_get(librados::IoCtx *ioctx, std::string *uuid);
383 int mirror_uuid_set(librados::IoCtx *ioctx, const std::string &uuid);
384 void mirror_mode_get_start(librados::ObjectReadOperation *op);
385 int mirror_mode_get_finish(ceph::buffer::list::const_iterator *it,
386 cls::rbd::MirrorMode *mirror_mode);
387 int mirror_mode_get(librados::IoCtx *ioctx,
388 cls::rbd::MirrorMode *mirror_mode);
389 int mirror_mode_set(librados::IoCtx *ioctx,
390 cls::rbd::MirrorMode mirror_mode);
391
392 int mirror_peer_ping(librados::IoCtx *ioctx,
393 const std::string& site_name,
394 const std::string& fsid);
395 void mirror_peer_ping(librados::ObjectWriteOperation *op,
396 const std::string& site_name,
397 const std::string& fsid);
398 void mirror_peer_list_start(librados::ObjectReadOperation *op);
399 int mirror_peer_list_finish(ceph::buffer::list::const_iterator *it,
400 std::vector<cls::rbd::MirrorPeer> *peers);
401 int mirror_peer_list(librados::IoCtx *ioctx,
402 std::vector<cls::rbd::MirrorPeer> *peers);
403 int mirror_peer_add(librados::IoCtx *ioctx,
404 const cls::rbd::MirrorPeer& mirror_peer);
405 void mirror_peer_add(librados::ObjectWriteOperation *op,
406 const cls::rbd::MirrorPeer& mirror_peer);
407 int mirror_peer_remove(librados::IoCtx *ioctx,
408 const std::string &uuid);
409 int mirror_peer_set_client(librados::IoCtx *ioctx,
410 const std::string &uuid,
411 const std::string &client_name);
412 int mirror_peer_set_cluster(librados::IoCtx *ioctx,
413 const std::string &uuid,
414 const std::string &cluster_name);
415 int mirror_peer_set_direction(
416 librados::IoCtx *ioctx, const std::string &uuid,
417 cls::rbd::MirrorPeerDirection mirror_peer_direction);
418
419 void mirror_image_list_start(librados::ObjectReadOperation *op,
420 const std::string &start, uint64_t max_return);
421 int mirror_image_list_finish(ceph::buffer::list::const_iterator *it,
422 std::map<std::string, std::string> *mirror_image_ids);
423 int mirror_image_list(librados::IoCtx *ioctx,
424 const std::string &start, uint64_t max_return,
425 std::map<std::string, std::string> *mirror_image_ids);
426 void mirror_image_get_image_id_start(librados::ObjectReadOperation *op,
427 const std::string &global_image_id);
428 int mirror_image_get_image_id_finish(ceph::buffer::list::const_iterator *it,
429 std::string *image_id);
430 int mirror_image_get_image_id(librados::IoCtx *ioctx,
431 const std::string &global_image_id,
432 std::string *image_id);
433 int mirror_image_get(librados::IoCtx *ioctx, const std::string &image_id,
434 cls::rbd::MirrorImage *mirror_image);
435 void mirror_image_get_start(librados::ObjectReadOperation *op,
436 const std::string &image_id);
437 int mirror_image_get_finish(ceph::buffer::list::const_iterator *iter,
438 cls::rbd::MirrorImage *mirror_image);
439 void mirror_image_set(librados::ObjectWriteOperation *op,
440 const std::string &image_id,
441 const cls::rbd::MirrorImage &mirror_image);
442 int mirror_image_set(librados::IoCtx *ioctx, const std::string &image_id,
443 const cls::rbd::MirrorImage &mirror_image);
444 void mirror_image_remove(librados::ObjectWriteOperation *op,
445 const std::string &image_id);
446 int mirror_image_remove(librados::IoCtx *ioctx,
447 const std::string &image_id);
448 int mirror_image_status_set(librados::IoCtx *ioctx,
449 const std::string &global_image_id,
450 const cls::rbd::MirrorImageSiteStatus &status);
451 void mirror_image_status_set(librados::ObjectWriteOperation *op,
452 const std::string &global_image_id,
453 const cls::rbd::MirrorImageSiteStatus &status);
454 int mirror_image_status_get(librados::IoCtx *ioctx,
455 const std::string &global_image_id,
456 cls::rbd::MirrorImageStatus *status);
457 void mirror_image_status_get_start(librados::ObjectReadOperation *op,
458 const std::string &global_image_id);
459 int mirror_image_status_get_finish(ceph::buffer::list::const_iterator *iter,
460 cls::rbd::MirrorImageStatus *status);
461 int mirror_image_status_list(librados::IoCtx *ioctx,
462 const std::string &start, uint64_t max_return,
463 std::map<std::string, cls::rbd::MirrorImage> *images,
464 std::map<std::string, cls::rbd::MirrorImageStatus> *statuses);
465 void mirror_image_status_list_start(librados::ObjectReadOperation *op,
466 const std::string &start,
467 uint64_t max_return);
468 int mirror_image_status_list_finish(ceph::buffer::list::const_iterator *iter,
469 std::map<std::string, cls::rbd::MirrorImage> *images,
470 std::map<std::string, cls::rbd::MirrorImageStatus> *statuses);
471 int mirror_image_status_get_summary(
472 librados::IoCtx *ioctx,
473 const std::vector<cls::rbd::MirrorPeer>& mirror_peer_sites,
474 std::map<cls::rbd::MirrorImageStatusState, int32_t> *states);
475 void mirror_image_status_get_summary_start(
476 librados::ObjectReadOperation *op,
477 const std::vector<cls::rbd::MirrorPeer>& mirror_peer_sites);
478 int mirror_image_status_get_summary_finish(
479 ceph::buffer::list::const_iterator *iter,
480 std::map<cls::rbd::MirrorImageStatusState, int32_t> *states);
481 int mirror_image_status_remove_down(librados::IoCtx *ioctx);
482 void mirror_image_status_remove_down(librados::ObjectWriteOperation *op);
483
484 int mirror_image_instance_get(librados::IoCtx *ioctx,
485 const std::string &global_image_id,
486 entity_inst_t *instance);
487 void mirror_image_instance_get_start(librados::ObjectReadOperation *op,
488 const std::string &global_image_id);
489 int mirror_image_instance_get_finish(ceph::buffer::list::const_iterator *iter,
490 entity_inst_t *instance);
491 int mirror_image_instance_list(librados::IoCtx *ioctx,
492 const std::string &start, uint64_t max_return,
493 std::map<std::string, entity_inst_t> *instances);
494 void mirror_image_instance_list_start(librados::ObjectReadOperation *op,
495 const std::string &start,
496 uint64_t max_return);
497 int mirror_image_instance_list_finish(ceph::buffer::list::const_iterator *iter,
498 std::map<std::string, entity_inst_t> *instances);
499
500 void mirror_instances_list_start(librados::ObjectReadOperation *op);
501 int mirror_instances_list_finish(ceph::buffer::list::const_iterator *iter,
502 std::vector<std::string> *instance_ids);
503 int mirror_instances_list(librados::IoCtx *ioctx,
504 std::vector<std::string> *instance_ids);
505 void mirror_instances_add(librados::ObjectWriteOperation *op,
506 const std::string &instance_id);
507 int mirror_instances_add(librados::IoCtx *ioctx,
508 const std::string &instance_id);
509 void mirror_instances_remove(librados::ObjectWriteOperation *op,
510 const std::string &instance_id);
511 int mirror_instances_remove(librados::IoCtx *ioctx,
512 const std::string &instance_id);
513
514 // image mapping related routines
515 void mirror_image_map_list_start(librados::ObjectReadOperation *op,
516 const std::string &start_after,
517 uint64_t max_read);
518 int mirror_image_map_list_finish(ceph::buffer::list::const_iterator *iter,
519 std::map<std::string, cls::rbd::MirrorImageMap> *image_mapping);
520 int mirror_image_map_list(librados::IoCtx *ioctx,
521 const std::string &start_after, uint64_t max_read,
522 std::map<std::string, cls::rbd::MirrorImageMap> *image_mapping);
523 void mirror_image_map_update(librados::ObjectWriteOperation *op,
524 const std::string &global_image_id,
525 const cls::rbd::MirrorImageMap &image_map);
526 void mirror_image_map_remove(librados::ObjectWriteOperation *op,
527 const std::string &global_image_id);
528
529 void mirror_image_snapshot_unlink_peer(librados::ObjectWriteOperation *op,
530 snapid_t snap_id,
531 const std::string &mirror_peer_uuid);
532 int mirror_image_snapshot_unlink_peer(librados::IoCtx *ioctx,
533 const std::string &oid,
534 snapid_t snap_id,
535 const std::string &mirror_peer_uuid);
536 void mirror_image_snapshot_set_copy_progress(librados::ObjectWriteOperation *op,
537 snapid_t snap_id, bool complete,
538 uint64_t copy_progress);
539 int mirror_image_snapshot_set_copy_progress(librados::IoCtx *ioctx,
540 const std::string &oid,
541 snapid_t snap_id, bool complete,
542 uint64_t copy_progress);
543
544 // Groups functions
545 int group_dir_list(librados::IoCtx *ioctx, const std::string &oid,
546 const std::string &start, uint64_t max_return,
547 std::map<std::string, std::string> *groups);
548 int group_dir_add(librados::IoCtx *ioctx, const std::string &oid,
549 const std::string &name, const std::string &id);
550 int group_dir_rename(librados::IoCtx *ioctx, const std::string &oid,
551 const std::string &src, const std::string &dest,
552 const std::string &id);
553 int group_dir_remove(librados::IoCtx *ioctx, const std::string &oid,
554 const std::string &name, const std::string &id);
555 int group_image_remove(librados::IoCtx *ioctx, const std::string &oid,
556 const cls::rbd::GroupImageSpec &spec);
557 int group_image_list(librados::IoCtx *ioctx, const std::string &oid,
558 const cls::rbd::GroupImageSpec &start,
559 uint64_t max_return,
560 std::vector<cls::rbd::GroupImageStatus> *images);
561 int group_image_set(librados::IoCtx *ioctx, const std::string &oid,
562 const cls::rbd::GroupImageStatus &st);
563 int image_group_add(librados::IoCtx *ioctx, const std::string &oid,
564 const cls::rbd::GroupSpec &group_spec);
565 int image_group_remove(librados::IoCtx *ioctx, const std::string &oid,
566 const cls::rbd::GroupSpec &group_spec);
567 void image_group_get_start(librados::ObjectReadOperation *op);
568 int image_group_get_finish(ceph::buffer::list::const_iterator *iter,
569 cls::rbd::GroupSpec *group_spec);
570 int image_group_get(librados::IoCtx *ioctx, const std::string &oid,
571 cls::rbd::GroupSpec *group_spec);
572 int group_snap_set(librados::IoCtx *ioctx, const std::string &oid,
573 const cls::rbd::GroupSnapshot &snapshot);
574 int group_snap_remove(librados::IoCtx *ioctx, const std::string &oid,
575 const std::string &snap_id);
576 int group_snap_get_by_id(librados::IoCtx *ioctx, const std::string &oid,
577 const std::string &snap_id,
578 cls::rbd::GroupSnapshot *snapshot);
579 int group_snap_list(librados::IoCtx *ioctx, const std::string &oid,
580 const cls::rbd::GroupSnapshot &start,
581 uint64_t max_return,
582 std::vector<cls::rbd::GroupSnapshot> *snapshots);
583
584 // operations on rbd_trash object
585 void trash_add(librados::ObjectWriteOperation *op,
586 const std::string &id,
587 const cls::rbd::TrashImageSpec &trash_spec);
588 int trash_add(librados::IoCtx *ioctx, const std::string &id,
589 const cls::rbd::TrashImageSpec &trash_spec);
590 void trash_remove(librados::ObjectWriteOperation *op,
591 const std::string &id);
592 int trash_remove(librados::IoCtx *ioctx, const std::string &id);
593 void trash_list_start(librados::ObjectReadOperation *op,
594 const std::string &start, uint64_t max_return);
595 int trash_list_finish(ceph::buffer::list::const_iterator *it,
596 std::map<std::string, cls::rbd::TrashImageSpec> *entries);
597 int trash_list(librados::IoCtx *ioctx,
598 const std::string &start, uint64_t max_return,
599 std::map<std::string, cls::rbd::TrashImageSpec> *entries);
600 void trash_get_start(librados::ObjectReadOperation *op,
601 const std::string &id);
602 int trash_get_finish(ceph::buffer::list::const_iterator *it,
603 cls::rbd::TrashImageSpec *trash_spec);
604 int trash_get(librados::IoCtx *ioctx, const std::string &id,
605 cls::rbd::TrashImageSpec *trash_spec);
606 void trash_state_set(librados::ObjectWriteOperation *op,
607 const std::string &id,
608 const cls::rbd::TrashImageState &trash_state,
609 const cls::rbd::TrashImageState &expect_state);
610 int trash_state_set(librados::IoCtx *ioctx, const std::string &id,
611 const cls::rbd::TrashImageState &trash_state,
612 const cls::rbd::TrashImageState &expect_state);
613
614 // operations on rbd_namespace object
615 void namespace_add(librados::ObjectWriteOperation *op,
616 const std::string &name);
617 int namespace_add(librados::IoCtx *ioctx, const std::string &name);
618 void namespace_remove(librados::ObjectWriteOperation *op,
619 const std::string &name);
620 int namespace_remove(librados::IoCtx *ioctx, const std::string &name);
621 void namespace_list_start(librados::ObjectReadOperation *op,
622 const std::string &start, uint64_t max_return);
623 int namespace_list_finish(ceph::buffer::list::const_iterator *it,
624 std::list<std::string> *entries);
625 int namespace_list(librados::IoCtx *ioctx,
626 const std::string &start, uint64_t max_return,
627 std::list<std::string> *entries);
628
629 // operations on data objects
630 void assert_snapc_seq(neorados::WriteOp* op,
631 uint64_t snapc_seq,
632 cls::rbd::AssertSnapcSeqState state);
633 void assert_snapc_seq(librados::ObjectWriteOperation *op,
634 uint64_t snapc_seq,
635 cls::rbd::AssertSnapcSeqState state);
636 int assert_snapc_seq(librados::IoCtx *ioctx, const std::string &oid,
637 uint64_t snapc_seq,
638 cls::rbd::AssertSnapcSeqState state);
639
640 void copyup(neorados::WriteOp* op, ceph::buffer::list data);
641 void copyup(librados::ObjectWriteOperation *op, ceph::buffer::list data);
642 int copyup(librados::IoCtx *ioctx, const std::string &oid,
643 ceph::buffer::list data);
644
645 void sparse_copyup(neorados::WriteOp* op,
646 const std::vector<std::pair<uint64_t, uint64_t>>& extent_map,
647 ceph::buffer::list data);
648 void sparse_copyup(librados::ObjectWriteOperation *op,
649 const std::map<uint64_t, uint64_t> &extent_map,
650 ceph::buffer::list data);
651 int sparse_copyup(librados::IoCtx *ioctx, const std::string &oid,
652 const std::map<uint64_t, uint64_t> &extent_map,
653 ceph::buffer::list data);
654
655 void sparsify(librados::ObjectWriteOperation *op, size_t sparse_size,
656 bool remove_empty);
657 int sparsify(librados::IoCtx *ioctx, const std::string &oid, size_t sparse_size,
658 bool remove_empty);
659
660 } // namespace cls_client
661 } // namespace librbd
662
663 #endif // CEPH_LIBRBD_CLS_RBD_CLIENT_H