1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_LIBRBD_CLS_RBD_CLIENT_H
5 #define CEPH_LIBRBD_CLS_RBD_CLIENT_H
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"
14 namespace ceph
{ template <uint8_t> class BitVector
; }
15 namespace neorados
{ struct WriteOp
; }
18 namespace cls_client
{
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
);
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
,
36 int set_features(librados::IoCtx
*ioctx
, const std::string
&oid
,
37 uint64_t features
, uint64_t mask
);
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
);
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
);
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
,
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
,
57 void set_size(librados::ObjectWriteOperation
*op
, uint64_t size
);
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
);
64 void set_flags(librados::ObjectWriteOperation
*op
, snapid_t snap_id
,
65 uint64_t flags
, uint64_t mask
);
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
);
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
);
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
);
100 void parent_overlap_get_start(librados::ObjectReadOperation
* op
,
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
,
106 std::optional
<uint64_t>* parent_overlap
);
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
);
115 void parent_detach(librados::ObjectWriteOperation
* op
);
116 int parent_detach(librados::IoCtx
*ioctx
, const std::string
&oid
);
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
);
137 void snapshot_get_start(librados::ObjectReadOperation
* op
,
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
);
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
,
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
);
160 /// NOTE: remove after Luminous is retired
161 void get_snapshot_name_start(librados::ObjectReadOperation
*op
,
163 int get_snapshot_name_finish(ceph::buffer::list::const_iterator
*it
,
165 int get_snapshot_name(librados::IoCtx
*ioctx
, const std::string
&oid
,
166 snapid_t snap_id
, std::string
*name
);
168 /// NOTE: remove after Luminous is retired
169 void get_snapshot_timestamp_start(librados::ObjectReadOperation
*op
,
171 int get_snapshot_timestamp_finish(ceph::buffer::list::const_iterator
*it
,
173 int get_snapshot_timestamp(librados::IoCtx
*ioctx
, const std::string
&oid
,
174 snapid_t snap_id
, utime_t
*timestamp
);
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
);
182 /// NOTE: remove protection after clone v1 is retired
183 void get_protection_status_start(librados::ObjectReadOperation
*op
,
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
);
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
);
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
,
199 void snapshot_set_limit(librados::ObjectWriteOperation
*op
,
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
);
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
);
214 void get_create_timestamp_start(librados::ObjectReadOperation
*op
);
215 int get_create_timestamp_finish(ceph::buffer::list::const_iterator
*it
,
217 int get_create_timestamp(librados::IoCtx
*ioctx
, const std::string
&oid
,
220 void get_access_timestamp_start(librados::ObjectReadOperation
*op
);
221 int get_access_timestamp_finish(ceph::buffer::list::const_iterator
*it
,
223 int get_access_timestamp(librados::IoCtx
*ioctx
, const std::string
&oid
,
226 void set_access_timestamp(librados::ObjectWriteOperation
*op
);
227 int set_access_timestamp(librados::IoCtx
*ioctx
, const std::string
&oid
);
229 void get_modify_timestamp_start(librados::ObjectReadOperation
*op
);
230 int get_modify_timestamp_finish(ceph::buffer::list::const_iterator
*it
,
232 int get_modify_timestamp(librados::IoCtx
*ioctx
, const std::string
&oid
,
235 void set_modify_timestamp(librados::ObjectWriteOperation
*op
);
236 int set_modify_timestamp(librados::IoCtx
*ioctx
, const std::string
&oid
);
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
,
257 int metadata_get(librados::IoCtx
*ioctx
, const std::string
&oid
,
258 const std::string
&key
, std::string
*v
);
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
,
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
,
269 const cls::rbd::ChildImageSpec
& child_image
);
270 void children_list_start(librados::ObjectReadOperation
*op
,
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
,
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
);
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
);
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
);
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
);
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> ¤t_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
);
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
);
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
);
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
,
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
);
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
);
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(librados::IoCtx
*ioctx
,
482 const std::string
&global_image_id
);
483 void mirror_image_status_remove(librados::ObjectWriteOperation
*op
,
484 const std::string
&global_image_id
);
485 int mirror_image_status_remove_down(librados::IoCtx
*ioctx
);
486 void mirror_image_status_remove_down(librados::ObjectWriteOperation
*op
);
488 int mirror_image_instance_get(librados::IoCtx
*ioctx
,
489 const std::string
&global_image_id
,
490 entity_inst_t
*instance
);
491 void mirror_image_instance_get_start(librados::ObjectReadOperation
*op
,
492 const std::string
&global_image_id
);
493 int mirror_image_instance_get_finish(ceph::buffer::list::const_iterator
*iter
,
494 entity_inst_t
*instance
);
495 int mirror_image_instance_list(librados::IoCtx
*ioctx
,
496 const std::string
&start
, uint64_t max_return
,
497 std::map
<std::string
, entity_inst_t
> *instances
);
498 void mirror_image_instance_list_start(librados::ObjectReadOperation
*op
,
499 const std::string
&start
,
500 uint64_t max_return
);
501 int mirror_image_instance_list_finish(ceph::buffer::list::const_iterator
*iter
,
502 std::map
<std::string
, entity_inst_t
> *instances
);
504 void mirror_instances_list_start(librados::ObjectReadOperation
*op
);
505 int mirror_instances_list_finish(ceph::buffer::list::const_iterator
*iter
,
506 std::vector
<std::string
> *instance_ids
);
507 int mirror_instances_list(librados::IoCtx
*ioctx
,
508 std::vector
<std::string
> *instance_ids
);
509 void mirror_instances_add(librados::ObjectWriteOperation
*op
,
510 const std::string
&instance_id
);
511 int mirror_instances_add(librados::IoCtx
*ioctx
,
512 const std::string
&instance_id
);
513 void mirror_instances_remove(librados::ObjectWriteOperation
*op
,
514 const std::string
&instance_id
);
515 int mirror_instances_remove(librados::IoCtx
*ioctx
,
516 const std::string
&instance_id
);
518 // image mapping related routines
519 void mirror_image_map_list_start(librados::ObjectReadOperation
*op
,
520 const std::string
&start_after
,
522 int mirror_image_map_list_finish(ceph::buffer::list::const_iterator
*iter
,
523 std::map
<std::string
, cls::rbd::MirrorImageMap
> *image_mapping
);
524 int mirror_image_map_list(librados::IoCtx
*ioctx
,
525 const std::string
&start_after
, uint64_t max_read
,
526 std::map
<std::string
, cls::rbd::MirrorImageMap
> *image_mapping
);
527 void mirror_image_map_update(librados::ObjectWriteOperation
*op
,
528 const std::string
&global_image_id
,
529 const cls::rbd::MirrorImageMap
&image_map
);
530 void mirror_image_map_remove(librados::ObjectWriteOperation
*op
,
531 const std::string
&global_image_id
);
533 void mirror_image_snapshot_unlink_peer(librados::ObjectWriteOperation
*op
,
535 const std::string
&mirror_peer_uuid
);
536 int mirror_image_snapshot_unlink_peer(librados::IoCtx
*ioctx
,
537 const std::string
&oid
,
539 const std::string
&mirror_peer_uuid
);
540 void mirror_image_snapshot_set_copy_progress(librados::ObjectWriteOperation
*op
,
541 snapid_t snap_id
, bool complete
,
542 uint64_t copy_progress
);
543 int mirror_image_snapshot_set_copy_progress(librados::IoCtx
*ioctx
,
544 const std::string
&oid
,
545 snapid_t snap_id
, bool complete
,
546 uint64_t copy_progress
);
549 int group_dir_list(librados::IoCtx
*ioctx
, const std::string
&oid
,
550 const std::string
&start
, uint64_t max_return
,
551 std::map
<std::string
, std::string
> *groups
);
552 int group_dir_add(librados::IoCtx
*ioctx
, const std::string
&oid
,
553 const std::string
&name
, const std::string
&id
);
554 int group_dir_rename(librados::IoCtx
*ioctx
, const std::string
&oid
,
555 const std::string
&src
, const std::string
&dest
,
556 const std::string
&id
);
557 int group_dir_remove(librados::IoCtx
*ioctx
, const std::string
&oid
,
558 const std::string
&name
, const std::string
&id
);
559 int group_image_remove(librados::IoCtx
*ioctx
, const std::string
&oid
,
560 const cls::rbd::GroupImageSpec
&spec
);
561 int group_image_list(librados::IoCtx
*ioctx
, const std::string
&oid
,
562 const cls::rbd::GroupImageSpec
&start
,
564 std::vector
<cls::rbd::GroupImageStatus
> *images
);
565 int group_image_set(librados::IoCtx
*ioctx
, const std::string
&oid
,
566 const cls::rbd::GroupImageStatus
&st
);
567 int image_group_add(librados::IoCtx
*ioctx
, const std::string
&oid
,
568 const cls::rbd::GroupSpec
&group_spec
);
569 int image_group_remove(librados::IoCtx
*ioctx
, const std::string
&oid
,
570 const cls::rbd::GroupSpec
&group_spec
);
571 void image_group_get_start(librados::ObjectReadOperation
*op
);
572 int image_group_get_finish(ceph::buffer::list::const_iterator
*iter
,
573 cls::rbd::GroupSpec
*group_spec
);
574 int image_group_get(librados::IoCtx
*ioctx
, const std::string
&oid
,
575 cls::rbd::GroupSpec
*group_spec
);
576 int group_snap_set(librados::IoCtx
*ioctx
, const std::string
&oid
,
577 const cls::rbd::GroupSnapshot
&snapshot
);
578 int group_snap_remove(librados::IoCtx
*ioctx
, const std::string
&oid
,
579 const std::string
&snap_id
);
580 int group_snap_get_by_id(librados::IoCtx
*ioctx
, const std::string
&oid
,
581 const std::string
&snap_id
,
582 cls::rbd::GroupSnapshot
*snapshot
);
583 int group_snap_list(librados::IoCtx
*ioctx
, const std::string
&oid
,
584 const cls::rbd::GroupSnapshot
&start
,
586 std::vector
<cls::rbd::GroupSnapshot
> *snapshots
);
588 // operations on rbd_trash object
589 void trash_add(librados::ObjectWriteOperation
*op
,
590 const std::string
&id
,
591 const cls::rbd::TrashImageSpec
&trash_spec
);
592 int trash_add(librados::IoCtx
*ioctx
, const std::string
&id
,
593 const cls::rbd::TrashImageSpec
&trash_spec
);
594 void trash_remove(librados::ObjectWriteOperation
*op
,
595 const std::string
&id
);
596 int trash_remove(librados::IoCtx
*ioctx
, const std::string
&id
);
597 void trash_list_start(librados::ObjectReadOperation
*op
,
598 const std::string
&start
, uint64_t max_return
);
599 int trash_list_finish(ceph::buffer::list::const_iterator
*it
,
600 std::map
<std::string
, cls::rbd::TrashImageSpec
> *entries
);
601 int trash_list(librados::IoCtx
*ioctx
,
602 const std::string
&start
, uint64_t max_return
,
603 std::map
<std::string
, cls::rbd::TrashImageSpec
> *entries
);
604 void trash_get_start(librados::ObjectReadOperation
*op
,
605 const std::string
&id
);
606 int trash_get_finish(ceph::buffer::list::const_iterator
*it
,
607 cls::rbd::TrashImageSpec
*trash_spec
);
608 int trash_get(librados::IoCtx
*ioctx
, const std::string
&id
,
609 cls::rbd::TrashImageSpec
*trash_spec
);
610 void trash_state_set(librados::ObjectWriteOperation
*op
,
611 const std::string
&id
,
612 const cls::rbd::TrashImageState
&trash_state
,
613 const cls::rbd::TrashImageState
&expect_state
);
614 int trash_state_set(librados::IoCtx
*ioctx
, const std::string
&id
,
615 const cls::rbd::TrashImageState
&trash_state
,
616 const cls::rbd::TrashImageState
&expect_state
);
618 // operations on rbd_namespace object
619 void namespace_add(librados::ObjectWriteOperation
*op
,
620 const std::string
&name
);
621 int namespace_add(librados::IoCtx
*ioctx
, const std::string
&name
);
622 void namespace_remove(librados::ObjectWriteOperation
*op
,
623 const std::string
&name
);
624 int namespace_remove(librados::IoCtx
*ioctx
, const std::string
&name
);
625 void namespace_list_start(librados::ObjectReadOperation
*op
,
626 const std::string
&start
, uint64_t max_return
);
627 int namespace_list_finish(ceph::buffer::list::const_iterator
*it
,
628 std::list
<std::string
> *entries
);
629 int namespace_list(librados::IoCtx
*ioctx
,
630 const std::string
&start
, uint64_t max_return
,
631 std::list
<std::string
> *entries
);
633 // operations on data objects
634 void assert_snapc_seq(neorados::WriteOp
* op
,
636 cls::rbd::AssertSnapcSeqState state
);
637 void assert_snapc_seq(librados::ObjectWriteOperation
*op
,
639 cls::rbd::AssertSnapcSeqState state
);
640 int assert_snapc_seq(librados::IoCtx
*ioctx
, const std::string
&oid
,
642 cls::rbd::AssertSnapcSeqState state
);
644 void copyup(neorados::WriteOp
* op
, ceph::buffer::list data
);
645 void copyup(librados::ObjectWriteOperation
*op
, ceph::buffer::list data
);
646 int copyup(librados::IoCtx
*ioctx
, const std::string
&oid
,
647 ceph::buffer::list data
);
649 void sparse_copyup(neorados::WriteOp
* op
,
650 const std::vector
<std::pair
<uint64_t, uint64_t>>& extent_map
,
651 ceph::buffer::list data
);
652 void sparse_copyup(librados::ObjectWriteOperation
*op
,
653 const std::map
<uint64_t, uint64_t> &extent_map
,
654 ceph::buffer::list data
);
655 int sparse_copyup(librados::IoCtx
*ioctx
, const std::string
&oid
,
656 const std::map
<uint64_t, uint64_t> &extent_map
,
657 ceph::buffer::list data
);
659 void sparsify(librados::ObjectWriteOperation
*op
, uint64_t sparse_size
,
661 int sparsify(librados::IoCtx
*ioctx
, const std::string
&oid
, uint64_t sparse_size
,
664 } // namespace cls_client
665 } // namespace librbd
667 #endif // CEPH_LIBRBD_CLS_RBD_CLIENT_H