]> git.proxmox.com Git - ceph.git/blame - ceph/src/cls/rbd/cls_rbd_client.h
update sources to v12.1.2
[ceph.git] / ceph / src / cls / rbd / cls_rbd_client.h
CommitLineData
7c673cae
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#ifndef 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/bit_vector.hpp"
10#include "common/snap_types.h"
7c673cae
FG
11#include "include/types.h"
12#include "librbd/Types.h"
13
7c673cae 14class Context;
31f18b77
FG
15namespace librados {
16 class ObjectReadOperation;
17 class IoCtx;
18 class ObjectWriteOperation;
19}
7c673cae
FG
20
21namespace librbd {
22 namespace cls_client {
23 // high-level interface to the header
24 void get_immutable_metadata_start(librados::ObjectReadOperation *op);
25 int get_immutable_metadata_finish(bufferlist::iterator *it,
26 std::string *object_prefix,
27 uint8_t *order);
28 int get_immutable_metadata(librados::IoCtx *ioctx, const std::string &oid,
29 std::string *object_prefix, uint8_t *order);
30
31 void get_mutable_metadata_start(librados::ObjectReadOperation *op,
32 bool read_only);
33 int get_mutable_metadata_finish(bufferlist::iterator *it,
34 uint64_t *size, uint64_t *features,
35 uint64_t *incompatible_features,
36 std::map<rados::cls::lock::locker_id_t,
37 rados::cls::lock::locker_info_t> *lockers,
38 bool *exclusive_lock, std::string *lock_tag,
39 ::SnapContext *snapc, ParentInfo *parent);
40 int get_mutable_metadata(librados::IoCtx *ioctx, const std::string &oid,
41 bool read_only, uint64_t *size, uint64_t *features,
42 uint64_t *incompatible_features,
43 map<rados::cls::lock::locker_id_t,
44 rados::cls::lock::locker_info_t> *lockers,
45 bool *exclusive_lock,
46 std::string *lock_tag,
47 ::SnapContext *snapc,
48 ParentInfo *parent);
49
50 // low-level interface (mainly for testing)
51 void create_image(librados::ObjectWriteOperation *op, uint64_t size,
52 uint8_t order, uint64_t features,
53 const std::string &object_prefix, int64_t data_pool_id);
54 int create_image(librados::IoCtx *ioctx, const std::string &oid,
55 uint64_t size, uint8_t order, uint64_t features,
56 const std::string &object_prefix, int64_t data_pool_id);
57 int get_features(librados::IoCtx *ioctx, const std::string &oid,
58 snapid_t snap_id, uint64_t *features);
59 void set_features(librados::ObjectWriteOperation *op, uint64_t features,
60 uint64_t mask);
61 int set_features(librados::IoCtx *ioctx, const std::string &oid,
62 uint64_t features, uint64_t mask);
63 int get_object_prefix(librados::IoCtx *ioctx, const std::string &oid,
64 std::string *object_prefix);
65 void get_data_pool_start(librados::ObjectReadOperation *op);
66 int get_data_pool_finish(bufferlist::iterator *it, int64_t *data_pool_id);
67 int get_data_pool(librados::IoCtx *ioctx, const std::string &oid,
68 int64_t *data_pool_id);
69 int get_size(librados::IoCtx *ioctx, const std::string &oid,
70 snapid_t snap_id, uint64_t *size, uint8_t *order);
71 int set_size(librados::IoCtx *ioctx, const std::string &oid,
72 uint64_t size);
73 void set_size(librados::ObjectWriteOperation *op, uint64_t size);
74 int get_parent(librados::IoCtx *ioctx, const std::string &oid,
75 snapid_t snap_id, ParentSpec *pspec,
76 uint64_t *parent_overlap);
77 int set_parent(librados::IoCtx *ioctx, const std::string &oid,
78 const ParentSpec &pspec, uint64_t parent_overlap);
79 void set_parent(librados::ObjectWriteOperation *op,
80 const ParentSpec &pspec, uint64_t parent_overlap);
81 void get_flags_start(librados::ObjectReadOperation *op,
82 const std::vector<snapid_t> &snap_ids);
83 int get_flags_finish(bufferlist::iterator *it, uint64_t *flags,
84 const std::vector<snapid_t> &snap_ids,
85 std::vector<uint64_t> *snap_flags);
86 int get_flags(librados::IoCtx *ioctx, const std::string &oid,
87 uint64_t *flags, const std::vector<snapid_t> &snap_ids,
88 vector<uint64_t> *snap_flags);
89 void set_flags(librados::ObjectWriteOperation *op, snapid_t snap_id,
90 uint64_t flags, uint64_t mask);
91 int remove_parent(librados::IoCtx *ioctx, const std::string &oid);
92 void remove_parent(librados::ObjectWriteOperation *op);
93 int add_child(librados::IoCtx *ioctx, const std::string &oid,
94 const ParentSpec &pspec, const std::string &c_imageid);
95 void add_child(librados::ObjectWriteOperation *op,
96 const ParentSpec pspec, const std::string &c_imageid);
97 void remove_child(librados::ObjectWriteOperation *op,
98 const ParentSpec &pspec, const std::string &c_imageid);
99 int remove_child(librados::IoCtx *ioctx, const std::string &oid,
100 const ParentSpec &pspec, const std::string &c_imageid);
101 void get_children_start(librados::ObjectReadOperation *op,
102 const ParentSpec &pspec);
103 int get_children_finish(bufferlist::iterator *it,
104 std::set<string> *children);
105 int get_children(librados::IoCtx *ioctx, const std::string &oid,
106 const ParentSpec &pspec, set<string>& children);
107 void snapshot_add(librados::ObjectWriteOperation *op, snapid_t snap_id,
108 const std::string &snap_name,
109 const cls::rbd::SnapshotNamespace &snap_namespace);
110 void snapshot_remove(librados::ObjectWriteOperation *op, snapid_t snap_id);
111 void snapshot_rename(librados::ObjectWriteOperation *op,
112 snapid_t src_snap_id,
113 const std::string &dst_name);
114 int get_snapcontext(librados::IoCtx *ioctx, const std::string &oid,
115 ::SnapContext *snapc);
116
117 void snapshot_list_start(librados::ObjectReadOperation *op,
118 const std::vector<snapid_t> &ids);
119 int snapshot_list_finish(bufferlist::iterator *it,
120 const std::vector<snapid_t> &ids,
121 std::vector<string> *names,
122 std::vector<uint64_t> *sizes,
123 std::vector<ParentInfo> *parents,
124 std::vector<uint8_t> *protection_statuses);
125 void snapshot_timestamp_list_start(librados::ObjectReadOperation *op,
126 const std::vector<snapid_t> &ids);
127
128 int snapshot_timestamp_list_finish(bufferlist::iterator *it,
129 const std::vector<snapid_t> &ids,
130 std::vector<utime_t> *timestamps);
131
132 int snapshot_timestamp_list(librados::IoCtx *ioctx, const std::string &oid,
133 const std::vector<snapid_t> &ids,
134 std::vector<utime_t> *timestamps);
135
136 int snapshot_list(librados::IoCtx *ioctx, const std::string &oid,
137 const std::vector<snapid_t> &ids,
138 std::vector<string> *names,
139 std::vector<uint64_t> *sizes,
140 std::vector<ParentInfo> *parents,
141 std::vector<uint8_t> *protection_statuses);
142
143 void snapshot_namespace_list_start(librados::ObjectReadOperation *op,
144 const std::vector<snapid_t> &ids);
145 int snapshot_namespace_list_finish(bufferlist::iterator *it,
146 const std::vector<snapid_t> &ids,
147 std::vector<cls::rbd::SnapshotNamespace> *namespaces);
148 int snapshot_namespace_list(librados::IoCtx *ioctx, const std::string &oid,
149 const std::vector<snapid_t> &ids,
150 std::vector<cls::rbd::SnapshotNamespace> *namespaces);
151
152 void get_all_features_start(librados::ObjectReadOperation *op);
153 int get_all_features_finish(bufferlist::iterator *it,
154 uint64_t *all_features);
155 int get_all_features(librados::IoCtx *ioctx, const std::string &oid,
156 uint64_t *all_features);
157
158 int copyup(librados::IoCtx *ioctx, const std::string &oid,
159 bufferlist data);
160 int get_protection_status(librados::IoCtx *ioctx, const std::string &oid,
161 snapid_t snap_id, uint8_t *protection_status);
162 int set_protection_status(librados::IoCtx *ioctx, const std::string &oid,
163 snapid_t snap_id, uint8_t protection_status);
164 void set_protection_status(librados::ObjectWriteOperation *op,
165 snapid_t snap_id, uint8_t protection_status);
166 int snapshot_get_limit(librados::IoCtx *ioctx, const std::string &oid,
167 uint64_t *limit);
168 void snapshot_set_limit(librados::ObjectWriteOperation *op,
169 uint64_t limit);
170
171 void get_stripe_unit_count_start(librados::ObjectReadOperation *op);
172 int get_stripe_unit_count_finish(bufferlist::iterator *it,
173 uint64_t *stripe_unit,
174 uint64_t *stripe_count);
175 int get_stripe_unit_count(librados::IoCtx *ioctx, const std::string &oid,
176 uint64_t *stripe_unit, uint64_t *stripe_count);
177
178 void set_stripe_unit_count(librados::ObjectWriteOperation *op,
179 uint64_t stripe_unit, uint64_t stripe_count);
180 int set_stripe_unit_count(librados::IoCtx *ioctx, const std::string &oid,
181 uint64_t stripe_unit, uint64_t stripe_count);
31f18b77
FG
182 void get_create_timestamp_start(librados::ObjectReadOperation *op);
183 int get_create_timestamp_finish(bufferlist::iterator *it,
184 utime_t *timestamp);
185 int get_create_timestamp(librados::IoCtx *ioctx, const std::string &oid,
186 utime_t *timestamp);
7c673cae
FG
187 int metadata_list(librados::IoCtx *ioctx, const std::string &oid,
188 const std::string &start, uint64_t max_return,
189 map<string, bufferlist> *pairs);
190 void metadata_list_start(librados::ObjectReadOperation *op,
191 const std::string &start, uint64_t max_return);
192 int metadata_list_finish(bufferlist::iterator *it,
193 std::map<std::string, bufferlist> *pairs);
194 void metadata_set(librados::ObjectWriteOperation *op,
195 const map<std::string, bufferlist> &data);
196 int metadata_set(librados::IoCtx *ioctx, const std::string &oid,
197 const map<std::string, bufferlist> &data);
198 void metadata_remove(librados::ObjectWriteOperation *op,
199 const std::string &key);
200 int metadata_remove(librados::IoCtx *ioctx, const std::string &oid,
201 const std::string &key);
202 int metadata_get(librados::IoCtx *ioctx, const std::string &oid,
203 const std::string &key, string *v);
204
205 // operations on rbd_id objects
206 void get_id_start(librados::ObjectReadOperation *op);
207 int get_id_finish(bufferlist::iterator *it, std::string *id);
208 int get_id(librados::IoCtx *ioctx, const std::string &oid, std::string *id);
209
210 void set_id(librados::ObjectWriteOperation *op, std::string id);
211 int set_id(librados::IoCtx *ioctx, const std::string &oid, std::string id);
212
213 // operations on rbd_directory objects
214 int dir_get_id(librados::IoCtx *ioctx, const std::string &oid,
215 const std::string &name, std::string *id);
216 void dir_get_id_start(librados::ObjectReadOperation *op,
217 const std::string &image_name);
218 int dir_get_id_finish(bufferlist::iterator *iter, std::string *image_id);
219 void dir_get_name_start(librados::ObjectReadOperation *op,
220 const std::string &id);
221 int dir_get_name_finish(bufferlist::iterator *it, std::string *name);
222 int dir_get_name(librados::IoCtx *ioctx, const std::string &oid,
223 const std::string &id, std::string *name);
224 void dir_list_start(librados::ObjectReadOperation *op,
225 const std::string &start, uint64_t max_return);
226 int dir_list_finish(bufferlist::iterator *it, map<string, string> *images);
227 int dir_list(librados::IoCtx *ioctx, const std::string &oid,
228 const std::string &start, uint64_t max_return,
229 map<string, string> *images);
230 void dir_add_image(librados::ObjectWriteOperation *op,
231 const std::string &name, const std::string &id);
232 int dir_add_image(librados::IoCtx *ioctx, const std::string &oid,
233 const std::string &name, const std::string &id);
234 int dir_remove_image(librados::IoCtx *ioctx, const std::string &oid,
235 const std::string &name, const std::string &id);
236 void dir_remove_image(librados::ObjectWriteOperation *op,
237 const std::string &name, const std::string &id);
238 // atomic remove and add
239 void dir_rename_image(librados::ObjectWriteOperation *op,
240 const std::string &src, const std::string &dest,
241 const std::string &id);
242
243 // operations on the rbd_object_map.$image_id object
244 void object_map_load_start(librados::ObjectReadOperation *op);
245 int object_map_load_finish(bufferlist::iterator *it,
246 ceph::BitVector<2> *object_map);
247 int object_map_load(librados::IoCtx *ioctx, const std::string &oid,
248 ceph::BitVector<2> *object_map);
249 void object_map_save(librados::ObjectWriteOperation *rados_op,
250 const ceph::BitVector<2> &object_map);
251 void object_map_resize(librados::ObjectWriteOperation *rados_op,
252 uint64_t object_count, uint8_t default_state);
253 void object_map_update(librados::ObjectWriteOperation *rados_op,
254 uint64_t start_object_no, uint64_t end_object_no,
255 uint8_t new_object_state,
256 const boost::optional<uint8_t> &current_object_state);
257 void object_map_snap_add(librados::ObjectWriteOperation *rados_op);
258 void object_map_snap_remove(librados::ObjectWriteOperation *rados_op,
259 const ceph::BitVector<2> &object_map);
260
261 // class operations on the old format, kept for
262 // backwards compatability
263 void old_snapshot_add(librados::ObjectWriteOperation *rados_op,
264 snapid_t snap_id, const std::string &snap_name);
265 void old_snapshot_remove(librados::ObjectWriteOperation *rados_op,
266 const std::string &snap_name);
267 void old_snapshot_rename(librados::ObjectWriteOperation *rados_op,
268 snapid_t src_snap_id, const std::string &dst_name);
269
270 void old_snapshot_list_start(librados::ObjectReadOperation *op);
271 int old_snapshot_list_finish(bufferlist::iterator *it,
272 std::vector<string> *names,
273 std::vector<uint64_t> *sizes,
274 ::SnapContext *snapc);
275 int old_snapshot_list(librados::IoCtx *ioctx, const std::string &oid,
276 std::vector<string> *names,
277 std::vector<uint64_t> *sizes,
278 ::SnapContext *snapc);
279
280 // operations on the rbd_mirroring object
281 void mirror_uuid_get_start(librados::ObjectReadOperation *op);
282 int mirror_uuid_get_finish(bufferlist::iterator *it,
283 std::string *uuid);
284 int mirror_uuid_get(librados::IoCtx *ioctx, std::string *uuid);
285 int mirror_uuid_set(librados::IoCtx *ioctx, const std::string &uuid);
286 void mirror_mode_get_start(librados::ObjectReadOperation *op);
287 int mirror_mode_get_finish(bufferlist::iterator *it,
288 cls::rbd::MirrorMode *mirror_mode);
289 int mirror_mode_get(librados::IoCtx *ioctx,
290 cls::rbd::MirrorMode *mirror_mode);
291 int mirror_mode_set(librados::IoCtx *ioctx,
292 cls::rbd::MirrorMode mirror_mode);
293 int mirror_peer_list(librados::IoCtx *ioctx,
294 std::vector<cls::rbd::MirrorPeer> *peers);
295 int mirror_peer_add(librados::IoCtx *ioctx, const std::string &uuid,
296 const std::string &cluster_name,
297 const std::string &client_name,
298 int64_t pool_id = -1);
299 int mirror_peer_remove(librados::IoCtx *ioctx,
300 const std::string &uuid);
301 int mirror_peer_set_client(librados::IoCtx *ioctx,
302 const std::string &uuid,
303 const std::string &client_name);
304 int mirror_peer_set_cluster(librados::IoCtx *ioctx,
305 const std::string &uuid,
306 const std::string &cluster_name);
307 void mirror_image_list_start(librados::ObjectReadOperation *op,
308 const std::string &start, uint64_t max_return);
309 int mirror_image_list_finish(bufferlist::iterator *it,
310 std::map<string, string> *mirror_image_ids);
311 int mirror_image_list(librados::IoCtx *ioctx,
312 const std::string &start, uint64_t max_return,
313 std::map<std::string, std::string> *mirror_image_ids);
314 void mirror_image_get_image_id_start(librados::ObjectReadOperation *op,
315 const std::string &global_image_id);
316 int mirror_image_get_image_id_finish(bufferlist::iterator *it,
317 std::string *image_id);
318 int mirror_image_get_image_id(librados::IoCtx *ioctx,
319 const std::string &global_image_id,
320 std::string *image_id);
321 int mirror_image_get(librados::IoCtx *ioctx, const std::string &image_id,
322 cls::rbd::MirrorImage *mirror_image);
323 void mirror_image_get_start(librados::ObjectReadOperation *op,
324 const std::string &image_id);
325 int mirror_image_get_finish(bufferlist::iterator *iter,
326 cls::rbd::MirrorImage *mirror_image);
327 void mirror_image_set(librados::ObjectWriteOperation *op,
328 const std::string &image_id,
329 const cls::rbd::MirrorImage &mirror_image);
330 int mirror_image_set(librados::IoCtx *ioctx, const std::string &image_id,
331 const cls::rbd::MirrorImage &mirror_image);
332 void mirror_image_remove(librados::ObjectWriteOperation *op,
333 const std::string &image_id);
334 int mirror_image_remove(librados::IoCtx *ioctx,
335 const std::string &image_id);
336 int mirror_image_status_set(librados::IoCtx *ioctx,
337 const std::string &global_image_id,
338 const cls::rbd::MirrorImageStatus &status);
339 void mirror_image_status_set(librados::ObjectWriteOperation *op,
340 const std::string &global_image_id,
341 const cls::rbd::MirrorImageStatus &status);
342 int mirror_image_status_remove(librados::IoCtx *ioctx,
343 const std::string &global_image_id);
344 void mirror_image_status_remove(librados::ObjectWriteOperation *op,
345 const std::string &global_image_id);
346 int mirror_image_status_get(librados::IoCtx *ioctx,
347 const std::string &global_image_id,
348 cls::rbd::MirrorImageStatus *status);
349 void mirror_image_status_get_start(librados::ObjectReadOperation *op,
350 const std::string &global_image_id);
351 int mirror_image_status_get_finish(bufferlist::iterator *iter,
352 cls::rbd::MirrorImageStatus *status);
353 int mirror_image_status_list(librados::IoCtx *ioctx,
354 const std::string &start, uint64_t max_return,
355 std::map<std::string, cls::rbd::MirrorImage> *images,
356 std::map<std::string, cls::rbd::MirrorImageStatus> *statuses);
357 void mirror_image_status_list_start(librados::ObjectReadOperation *op,
358 const std::string &start,
359 uint64_t max_return);
360 int mirror_image_status_list_finish(bufferlist::iterator *iter,
361 std::map<std::string, cls::rbd::MirrorImage> *images,
362 std::map<std::string, cls::rbd::MirrorImageStatus> *statuses);
363 int mirror_image_status_get_summary(librados::IoCtx *ioctx,
364 std::map<cls::rbd::MirrorImageStatusState, int> *states);
365 void mirror_image_status_get_summary_start(librados::ObjectReadOperation *op);
366 int mirror_image_status_get_summary_finish(bufferlist::iterator *iter,
367 std::map<cls::rbd::MirrorImageStatusState, int> *states);
368 int mirror_image_status_remove_down(librados::IoCtx *ioctx);
369 void mirror_image_status_remove_down(librados::ObjectWriteOperation *op);
370
371 void mirror_instances_list_start(librados::ObjectReadOperation *op);
372 int mirror_instances_list_finish(bufferlist::iterator *iter,
373 std::vector<std::string> *instance_ids);
374 int mirror_instances_list(librados::IoCtx *ioctx,
375 std::vector<std::string> *instance_ids);
376 void mirror_instances_add(librados::ObjectWriteOperation *op,
377 const std::string &instance_id);
378 int mirror_instances_add(librados::IoCtx *ioctx,
379 const std::string &instance_id);
380 void mirror_instances_remove(librados::ObjectWriteOperation *op,
381 const std::string &instance_id);
382 int mirror_instances_remove(librados::IoCtx *ioctx,
383 const std::string &instance_id);
384
385 // Consistency groups functions
386 int group_create(librados::IoCtx *ioctx, const std::string &oid);
387 int group_dir_list(librados::IoCtx *ioctx, const std::string &oid,
388 const std::string &start, uint64_t max_return,
389 map<string, string> *groups);
390 int group_dir_add(librados::IoCtx *ioctx, const std::string &oid,
391 const std::string &name, const std::string &id);
392 int group_dir_remove(librados::IoCtx *ioctx, const std::string &oid,
393 const std::string &name, const std::string &id);
394 int group_image_remove(librados::IoCtx *ioctx, const std::string &oid,
395 const cls::rbd::GroupImageSpec &spec);
396 int group_image_list(librados::IoCtx *ioctx, const std::string &oid,
397 const cls::rbd::GroupImageSpec &start,
398 uint64_t max_return,
399 std::vector<cls::rbd::GroupImageStatus> *images);
400 int group_image_set(librados::IoCtx *ioctx, const std::string &oid,
401 const cls::rbd::GroupImageStatus &st);
402 int image_add_group(librados::IoCtx *ioctx, const std::string &oid,
403 const cls::rbd::GroupSpec &group_spec);
404 int image_remove_group(librados::IoCtx *ioctx, const std::string &oid,
405 const cls::rbd::GroupSpec &group_spec);
406 void image_get_group_start(librados::ObjectReadOperation *op);
407 int image_get_group_finish(bufferlist::iterator *iter,
408 cls::rbd::GroupSpec *group_spec);
409 int image_get_group(librados::IoCtx *ioctx, const std::string &oid,
410 cls::rbd::GroupSpec *group_spec);
411
412 // operations on rbd_trash object
413 void trash_add(librados::ObjectWriteOperation *op,
414 const std::string &id,
415 const cls::rbd::TrashImageSpec &trash_spec);
416 int trash_add(librados::IoCtx *ioctx, const std::string &id,
417 const cls::rbd::TrashImageSpec &trash_spec);
418 void trash_remove(librados::ObjectWriteOperation *op,
419 const std::string &id);
420 int trash_remove(librados::IoCtx *ioctx, const std::string &id);
c07f9fc5
FG
421 void trash_list_start(librados::ObjectReadOperation *op,
422 const std::string &start, uint64_t max_return);
7c673cae
FG
423 int trash_list_finish(bufferlist::iterator *it,
424 map<string, cls::rbd::TrashImageSpec> *entries);
425 int trash_list(librados::IoCtx *ioctx,
c07f9fc5 426 const std::string &start, uint64_t max_return,
7c673cae
FG
427 map<string, cls::rbd::TrashImageSpec> *entries);
428 void trash_get_start(librados::ObjectReadOperation *op,
429 const std::string &id);
430 int trash_get_finish(bufferlist::iterator *it,
431 cls::rbd::TrashImageSpec *trash_spec);
432 int trash_get(librados::IoCtx *ioctx, const std::string &id,
433 cls::rbd::TrashImageSpec *trash_spec);
434
435 } // namespace cls_client
436} // namespace librbd
437#endif // CEPH_LIBRBD_CLS_RBD_CLIENT_H