From: Jason Dillaman Date: Wed, 29 Mar 2017 20:22:40 +0000 (-0400) Subject: cls_rbd: async mirror_uuid_get support X-Git-Tag: v12.0.2~174^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=97c664330ada7bf588dcb071b007756923c0d9f6;p=ceph-ci.git cls_rbd: async mirror_uuid_get support Signed-off-by: Jason Dillaman --- diff --git a/src/cls/rbd/cls_rbd_client.cc b/src/cls/rbd/cls_rbd_client.cc index 2a5f6e74d23..1a3841060fb 100644 --- a/src/cls/rbd/cls_rbd_client.cc +++ b/src/cls/rbd/cls_rbd_client.cc @@ -1288,20 +1288,35 @@ namespace librbd { return 0; } + void mirror_uuid_get_start(librados::ObjectReadOperation *op) { + bufferlist bl; + op->exec("rbd", "mirror_uuid_get", bl); + } + + int mirror_uuid_get_finish(bufferlist::iterator *it, + std::string *uuid) { + try { + ::decode(*uuid, *it); + } catch (const buffer::error &err) { + return -EBADMSG; + } + return 0; + } + int mirror_uuid_get(librados::IoCtx *ioctx, std::string *uuid) { - bufferlist in_bl; + librados::ObjectReadOperation op; + mirror_uuid_get_start(&op); + bufferlist out_bl; - int r = ioctx->exec(RBD_MIRRORING, "rbd", "mirror_uuid_get", in_bl, - out_bl); + int r = ioctx->operate(RBD_MIRRORING, &op, &out_bl); if (r < 0) { return r; } - try { - bufferlist::iterator bl_it = out_bl.begin(); - ::decode(*uuid, bl_it); - } catch (const buffer::error &err) { - return -EBADMSG; + bufferlist::iterator it = out_bl.begin(); + r = mirror_uuid_get_finish(&it, uuid); + if (r < 0) { + return r; } return 0; } diff --git a/src/cls/rbd/cls_rbd_client.h b/src/cls/rbd/cls_rbd_client.h index 0cd232b8046..3512089b7e0 100644 --- a/src/cls/rbd/cls_rbd_client.h +++ b/src/cls/rbd/cls_rbd_client.h @@ -272,6 +272,9 @@ namespace librbd { ::SnapContext *snapc); // operations on the rbd_mirroring object + void mirror_uuid_get_start(librados::ObjectReadOperation *op); + int mirror_uuid_get_finish(bufferlist::iterator *it, + std::string *uuid); int mirror_uuid_get(librados::IoCtx *ioctx, std::string *uuid); int mirror_uuid_set(librados::IoCtx *ioctx, const std::string &uuid); void mirror_mode_get_start(librados::ObjectReadOperation *op);