]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cls_rbd_client: support asynchronous add_child.
authorDongsheng Yang <dongsheng.yang@easystack.cn>
Thu, 17 Nov 2016 09:20:25 +0000 (04:20 -0500)
committerDongsheng Yang <dongsheng.yang@easystack.cn>
Mon, 13 Mar 2017 10:55:12 +0000 (18:55 +0800)
Signed-off-by: Dongsheng Yang <dongsheng.yang@easystack.cn>
src/cls/rbd/cls_rbd_client.cc
src/cls/rbd/cls_rbd_client.h

index ed60a2f3a991586404dae3e5ab1cd2edacef6ec6..2a5f6e74d2388b1e923e88b0355498ae42c86328 100644 (file)
@@ -411,13 +411,21 @@ namespace librbd {
     int add_child(librados::IoCtx *ioctx, const std::string &oid,
                  const ParentSpec &pspec, const std::string &c_imageid)
     {
-      bufferlist in, out;
+      librados::ObjectWriteOperation op;
+      add_child(&op, pspec, c_imageid);
+      return ioctx->operate(oid, &op);
+    }
+
+    void add_child(librados::ObjectWriteOperation *op,
+                 const ParentSpec pspec, const std::string &c_imageid)
+    {
+      bufferlist in;
       ::encode(pspec.pool_id, in);
       ::encode(pspec.image_id, in);
       ::encode(pspec.snap_id, in);
       ::encode(c_imageid, in);
 
-      return ioctx->exec(oid, "rbd", "add_child", in, out);
+      op->exec("rbd", "add_child", in);
     }
 
     void remove_child(librados::ObjectWriteOperation *op,
index 81f799b04a8ef308014109267e1e5b51123c20b1..0cd232b804624654f2c325e4654b2c228721cfbe 100644 (file)
@@ -91,6 +91,8 @@ namespace librbd {
     void remove_parent(librados::ObjectWriteOperation *op);
     int add_child(librados::IoCtx *ioctx, const std::string &oid,
                  const ParentSpec &pspec, const std::string &c_imageid);
+    void add_child(librados::ObjectWriteOperation *op,
+                 const ParentSpec pspec, const std::string &c_imageid);
     void remove_child(librados::ObjectWriteOperation *op,
                      const ParentSpec &pspec, const std::string &c_imageid);
     int remove_child(librados::IoCtx *ioctx, const std::string &oid,