From: Dongsheng Yang Date: Thu, 17 Nov 2016 09:20:25 +0000 (-0500) Subject: cls_rbd_client: support asynchronous add_child. X-Git-Tag: v12.0.1~15^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=354e84da035f57d44fca5562b058ded266581eea;p=ceph.git cls_rbd_client: support asynchronous add_child. Signed-off-by: Dongsheng Yang --- diff --git a/src/cls/rbd/cls_rbd_client.cc b/src/cls/rbd/cls_rbd_client.cc index ed60a2f3a991..2a5f6e74d238 100644 --- a/src/cls/rbd/cls_rbd_client.cc +++ b/src/cls/rbd/cls_rbd_client.cc @@ -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, diff --git a/src/cls/rbd/cls_rbd_client.h b/src/cls/rbd/cls_rbd_client.h index 81f799b04a8e..0cd232b80462 100644 --- a/src/cls/rbd/cls_rbd_client.h +++ b/src/cls/rbd/cls_rbd_client.h @@ -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,