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