]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cls/rbd: add async versions of some group functions
authorMykola Golub <mgolub@suse.com>
Fri, 15 Jan 2021 16:23:37 +0000 (16:23 +0000)
committerPrasanna Kumar Kalever <prasanna.kalever@redhat.com>
Thu, 24 Apr 2025 15:56:21 +0000 (21:26 +0530)
Signed-off-by: Mykola Golub <mgolub@suse.com>
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
src/cls/rbd/cls_rbd_client.cc
src/cls/rbd/cls_rbd_client.h

index 76f4d9a07ee456a6fe7683750acdd8b67b75c172..97b7f94b6df7df3d23a30c258c50e4e8f4d664e3 100644 (file)
@@ -3002,6 +3002,14 @@ int group_dir_list(librados::IoCtx *ioctx, const std::string &oid,
   return 0;
 }
 
+void group_dir_add(librados::ObjectWriteOperation *op,
+                   const std::string &name, const std::string &id) {
+  bufferlist bl;
+  encode(name, bl);
+  encode(id, bl);
+  op->exec("rbd", "group_dir_add", bl);
+}
+
 int group_dir_add(librados::IoCtx *ioctx, const std::string &oid,
                   const std::string &name, const std::string &id)
 {
@@ -3026,6 +3034,14 @@ int group_dir_rename(librados::IoCtx *ioctx, const std::string &oid,
   return ioctx->operate(oid, &op);
 }
 
+void group_dir_remove(librados::ObjectWriteOperation *op,
+                      const std::string &name, const std::string &id) {
+  bufferlist bl;
+  encode(name, bl);
+  encode(id, bl);
+  op->exec("rbd", "group_dir_remove", bl);
+}
+
 int group_dir_remove(librados::IoCtx *ioctx, const std::string &oid,
                      const std::string &name, const std::string &id)
 {
@@ -3037,34 +3053,34 @@ int group_dir_remove(librados::IoCtx *ioctx, const std::string &oid,
   return ioctx->operate(oid, &op);
 }
 
-int group_image_remove(librados::IoCtx *ioctx, const std::string &oid,
-                       const cls::rbd::GroupImageSpec &spec)
-{
+void group_image_remove(librados::ObjectWriteOperation *op,
+                       const cls::rbd::GroupImageSpec &spec) {
   bufferlist bl;
   encode(spec, bl);
+  op->exec("rbd", "group_image_remove", bl);
+}
 
+int group_image_remove(librados::IoCtx *ioctx, const std::string &oid,
+                       const cls::rbd::GroupImageSpec &spec) {
   librados::ObjectWriteOperation op;
-  op.exec("rbd", "group_image_remove", bl);
+  group_image_remove(&op, spec);
+
   return ioctx->operate(oid, &op);
 }
 
-int group_image_list(librados::IoCtx *ioctx,
-                     const std::string &oid,
-                     const cls::rbd::GroupImageSpec &start,
-                     uint64_t max_return,
-                     std::vector<cls::rbd::GroupImageStatus> *images)
-{
-  bufferlist bl, bl2;
+void group_image_list_start(librados::ObjectReadOperation *op,
+                            const cls::rbd::GroupImageSpec &start,
+                            uint64_t max_return) {
+  bufferlist bl;
   encode(start, bl);
   encode(max_return, bl);
+  op->exec("rbd", "group_image_list", bl);
+}
 
-  int r = ioctx->exec(oid, "rbd", "group_image_list", bl, bl2);
-  if (r < 0)
-    return r;
-
-  auto iter = bl2.cbegin();
+int group_image_list_finish(bufferlist::const_iterator *iter,
+                            std::vector<cls::rbd::GroupImageStatus> *images) {
   try {
-    decode(*images, iter);
+    decode(*images, *iter);
   } catch (const ceph::buffer::error &err) {
     return -EBADMSG;
   }
@@ -3072,36 +3088,67 @@ int group_image_list(librados::IoCtx *ioctx,
   return 0;
 }
 
-int group_image_set(librados::IoCtx *ioctx, const std::string &oid,
-                    const cls::rbd::GroupImageStatus &st)
-{
+int group_image_list(librados::IoCtx *ioctx,
+                     const std::string &oid,
+                     const cls::rbd::GroupImageSpec &start,
+                     uint64_t max_return,
+                     std::vector<cls::rbd::GroupImageStatus> *images) {
+  librados::ObjectReadOperation op;
+  group_image_list_start(&op, start, max_return);
+
+  bufferlist out_bl;
+  int r = ioctx->operate(oid, &op, &out_bl);
+  if (r < 0) {
+    return r;
+  }
+
+  auto it = out_bl.cbegin();
+  return group_image_list_finish(&it, images);
+}
+
+void group_image_set(librados::ObjectWriteOperation *op,
+                     const cls::rbd::GroupImageStatus &state) {
   bufferlist bl;
-  encode(st, bl);
+  encode(state, bl);
+  op->exec("rbd", "group_image_set", bl);
+}
 
+int group_image_set(librados::IoCtx *ioctx, const std::string &oid,
+                    const cls::rbd::GroupImageStatus &state) {
   librados::ObjectWriteOperation op;
-  op.exec("rbd", "group_image_set", bl);
+  group_image_set(&op, state);
+
   return ioctx->operate(oid, &op);
 }
 
-int image_group_add(librados::IoCtx *ioctx, const std::string &oid,
-                    const cls::rbd::GroupSpec &group_spec)
-{
+void image_group_add(librados::ObjectWriteOperation *op,
+                     const cls::rbd::GroupSpec &group_spec) {
   bufferlist bl;
   encode(group_spec, bl);
+  op->exec("rbd", "image_group_add", bl);
+}
 
+int image_group_add(librados::IoCtx *ioctx, const std::string &oid,
+                    const cls::rbd::GroupSpec &group_spec) {
   librados::ObjectWriteOperation op;
-  op.exec("rbd", "image_group_add", bl);
+  image_group_add(&op, group_spec);
+
   return ioctx->operate(oid, &op);
 }
 
-int image_group_remove(librados::IoCtx *ioctx, const std::string &oid,
-                       const cls::rbd::GroupSpec &group_spec)
-{
+void image_group_remove(librados::ObjectWriteOperation *op,
+                        const cls::rbd::GroupSpec &group_spec) {
   bufferlist bl;
   encode(group_spec, bl);
+  op->exec("rbd", "image_group_remove", bl);
+}
 
+int image_group_remove(librados::IoCtx *ioctx, const std::string &oid,
+                       const cls::rbd::GroupSpec &group_spec)
+{
   librados::ObjectWriteOperation op;
-  op.exec("rbd", "image_group_remove", bl);
+  image_group_remove(&op, group_spec);
+
   return ioctx->operate(oid, &op);
 }
 
@@ -3138,6 +3185,13 @@ int image_group_get(librados::IoCtx *ioctx, const std::string &oid,
   return image_group_get_finish(&iter, group_spec);
 }
 
+void group_snap_set(librados::ObjectWriteOperation *op,
+                    const cls::rbd::GroupSnapshot &snapshot) {
+  bufferlist bl;
+  encode(snapshot, bl);
+  op->exec("rbd", "group_snap_set", bl);
+}
+
 int group_snap_set(librados::IoCtx *ioctx, const std::string &oid,
                    const cls::rbd::GroupSnapshot &snapshot)
 {
@@ -3163,25 +3217,38 @@ int group_snap_remove(librados::IoCtx *ioctx, const std::string &oid,
 
 int group_snap_get_by_id(librados::IoCtx *ioctx, const std::string &oid,
                          const std::string &snap_id,
-                         cls::rbd::GroupSnapshot *snapshot)
-{
-  using ceph::encode;
-  using ceph::decode;
-  bufferlist inbl, outbl;
+                         cls::rbd::GroupSnapshot *snapshot) {
+  librados::ObjectReadOperation op;
+  group_snap_get_by_id_start(&op, snap_id);
 
-  encode(snap_id, inbl);
-  int r = ioctx->exec(oid, "rbd", "group_snap_get_by_id", inbl, outbl);
+  bufferlist out_bl;
+  int r = ioctx->operate(oid, &op, &out_bl);
+  if (r < 0) {
+    return r;
+  }
+
+  auto iter = out_bl.cbegin();
+  r = group_snap_get_by_id_finish(&iter, snapshot);
   if (r < 0) {
     return r;
   }
+  return 0;
+}
 
-  auto iter = outbl.cbegin();
+void group_snap_get_by_id_start(librados::ObjectReadOperation *op,
+                                const std::string &snap_id) {
+  bufferlist bl;
+  encode(snap_id, bl);
+  op->exec("rbd", "group_snap_get_by_id", bl);
+}
+
+int group_snap_get_by_id_finish(ceph::buffer::list::const_iterator *iter,
+                                cls::rbd::GroupSnapshot *snapshot) {
   try {
-    decode(*snapshot, iter);
+    decode(*snapshot, *iter);
   } catch (const ceph::buffer::error &err) {
     return -EBADMSG;
   }
-
   return 0;
 }
 
index 88fd1a1cc4f684f1c55e4f4c004d92c405cbd7d7..36282ec9438bff07f33801df83fa4d96bb89a500 100644 (file)
@@ -641,23 +641,40 @@ int mirror_group_instance_list_finish(
 int group_dir_list(librados::IoCtx *ioctx, const std::string &oid,
                    const std::string &start, uint64_t max_return,
                    std::map<std::string, std::string> *groups);
+void group_dir_add(librados::ObjectWriteOperation *op,
+                   const std::string &name, const std::string &id);
 int group_dir_add(librados::IoCtx *ioctx, const std::string &oid,
                   const std::string &name, const std::string &id);
 int group_dir_rename(librados::IoCtx *ioctx, const std::string &oid,
                      const std::string &src, const std::string &dest,
                      const std::string &id);
+void group_dir_remove(librados::ObjectWriteOperation *op,
+                      const std::string &name, const std::string &id);
 int group_dir_remove(librados::IoCtx *ioctx, const std::string &oid,
                      const std::string &name, const std::string &id);
+void group_image_remove(librados::ObjectWriteOperation *op,
+                        const cls::rbd::GroupImageSpec &spec);
 int group_image_remove(librados::IoCtx *ioctx, const std::string &oid,
                        const cls::rbd::GroupImageSpec &spec);
+void group_image_list_start(librados::ObjectReadOperation *op,
+                            const cls::rbd::GroupImageSpec &start,
+                            uint64_t max_return);
+int group_image_list_finish(ceph::buffer::list::const_iterator *iter,
+                            std::vector<cls::rbd::GroupImageStatus> *images);
 int group_image_list(librados::IoCtx *ioctx, const std::string &oid,
                      const cls::rbd::GroupImageSpec &start,
                      uint64_t max_return,
                      std::vector<cls::rbd::GroupImageStatus> *images);
+void group_image_set(librados::ObjectWriteOperation *op,
+                     const cls::rbd::GroupImageStatus &st);
 int group_image_set(librados::IoCtx *ioctx, const std::string &oid,
                     const cls::rbd::GroupImageStatus &st);
+void image_group_add(librados::ObjectWriteOperation *op,
+                     const cls::rbd::GroupSpec &group_spec);
 int image_group_add(librados::IoCtx *ioctx, const std::string &oid,
                     const cls::rbd::GroupSpec &group_spec);
+void image_group_remove(librados::ObjectWriteOperation *op,
+                        const cls::rbd::GroupSpec &group_spec);
 int image_group_remove(librados::IoCtx *ioctx, const std::string &oid,
                        const cls::rbd::GroupSpec &group_spec);
 void image_group_get_start(librados::ObjectReadOperation *op);
@@ -665,6 +682,8 @@ int image_group_get_finish(ceph::buffer::list::const_iterator *iter,
                            cls::rbd::GroupSpec *group_spec);
 int image_group_get(librados::IoCtx *ioctx, const std::string &oid,
                     cls::rbd::GroupSpec *group_spec);
+void group_snap_set(librados::ObjectWriteOperation *op,
+                    const cls::rbd::GroupSnapshot &snapshot);
 int group_snap_set(librados::IoCtx *ioctx, const std::string &oid,
                    const cls::rbd::GroupSnapshot &snapshot);
 int group_snap_remove(librados::IoCtx *ioctx, const std::string &oid,
@@ -677,6 +696,10 @@ void group_snap_list_start(librados::ObjectReadOperation *op,
                            uint64_t max_return);
 int group_snap_list_finish(ceph::buffer::list::const_iterator *iter,
                            std::vector<cls::rbd::GroupSnapshot> *snapshots);
+void group_snap_get_by_id_start(librados::ObjectReadOperation *op,
+                                const std::string &snap_id);
+int group_snap_get_by_id_finish(ceph::buffer::list::const_iterator *iter,
+                                cls::rbd::GroupSnapshot *snapshot);
 int group_snap_list(librados::IoCtx *ioctx, const std::string &oid,
                     const cls::rbd::GroupSnapshot &start,
                     uint64_t max_return,
@@ -689,7 +712,6 @@ int group_snap_list_order_finish(ceph::buffer::list::const_iterator *iter,
 int group_snap_list_order(librados::IoCtx *ioctx, const std::string &oid,
                           const std::string &snap_id, uint64_t max_return,
                           std::map<std::string, uint64_t> *snap_order);
 // operations on rbd_trash object
 void trash_add(librados::ObjectWriteOperation *op,
                const std::string &id,