From: Ricardo Dias Date: Mon, 10 Apr 2017 13:26:21 +0000 (+0100) Subject: librbd: added group image remove by id to API X-Git-Tag: v12.0.2~106^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9438ee935357fd281f2365577b56ce84a9629454;p=ceph-ci.git librbd: added group image remove by id to API Signed-off-by: Ricardo Dias --- diff --git a/src/include/rbd/librbd.h b/src/include/rbd/librbd.h index 8f95b526a30..b435feac1ee 100644 --- a/src/include/rbd/librbd.h +++ b/src/include/rbd/librbd.h @@ -827,6 +827,9 @@ CEPH_RBD_API int rbd_group_image_add( CEPH_RBD_API int rbd_group_image_remove( rados_ioctx_t group_p, const char *group_name, rados_ioctx_t image_p, const char *image_name); +CEPH_RBD_API int rbd_group_image_remove_by_id( + rados_ioctx_t group_p, const char *group_name, + rados_ioctx_t image_p, const char *image_id); CEPH_RBD_API int rbd_group_image_list( rados_ioctx_t group_p, const char *group_name, rbd_group_image_status_t *images, diff --git a/src/include/rbd/librbd.hpp b/src/include/rbd/librbd.hpp index 2881e0094b9..f404494b1be 100644 --- a/src/include/rbd/librbd.hpp +++ b/src/include/rbd/librbd.hpp @@ -193,6 +193,8 @@ public: IoCtx& image_io_ctx, const char *image_name); int group_image_remove(IoCtx& io_ctx, const char *group_name, IoCtx& image_io_ctx, const char *image_name); + int group_image_remove_by_id(IoCtx& io_ctx, const char *group_name, + IoCtx& image_io_ctx, const char *image_id); int group_image_list(IoCtx& io_ctx, const char *group_name, std::vector *images); diff --git a/src/librbd/api/Group.cc b/src/librbd/api/Group.cc index 7e60fc52021..22339ea4e44 100644 --- a/src/librbd/api/Group.cc +++ b/src/librbd/api/Group.cc @@ -235,6 +235,30 @@ int Group::image_remove(librados::IoCtx& group_ioctx, const char *group_name, << " group name " << group_name << " image " << &image_ioctx << " name " << image_name << dendl; + string image_id; + int r = cls_client::dir_get_id(&image_ioctx, RBD_DIRECTORY, image_name, + &image_id); + if (r < 0) { + lderr(cct) << "error reading image id object: " + << cpp_strerror(-r) << dendl; + return r; + } + + return Group::image_remove_by_id(group_ioctx, group_name, image_ioctx, + image_id.c_str()); +} + +template +int Group::image_remove_by_id(librados::IoCtx& group_ioctx, + const char *group_name, + librados::IoCtx& image_ioctx, + const char *image_id) +{ + CephContext *cct = (CephContext *)group_ioctx.cct(); + ldout(cct, 20) << "group_remove_image_by_id " << &group_ioctx + << " group name " << group_name << " image " + << &image_ioctx << " id " << image_id << dendl; + string group_id; int r = cls_client::dir_get_id(&group_ioctx, RBD_GROUP_DIRECTORY, group_name, @@ -250,19 +274,9 @@ int Group::image_remove(librados::IoCtx& group_ioctx, const char *group_name, ldout(cct, 20) << "adding image to group name " << group_name << " group id " << group_header_oid << dendl; - string image_id; - r = cls_client::dir_get_id(&image_ioctx, RBD_DIRECTORY, image_name, - &image_id); - if (r < 0) { - lderr(cct) << "error reading image id object: " - << cpp_strerror(-r) << dendl; - return r; - } - string image_header_oid = util::header_name(image_id); - ldout(cct, 20) << "removing image " << image_name - << " image id " << image_header_oid << dendl; + ldout(cct, 20) << "removing " << " image id " << image_header_oid << dendl; cls::rbd::GroupSpec group_spec(group_id, group_ioctx.get_id()); diff --git a/src/librbd/api/Group.h b/src/librbd/api/Group.h index 4773cb5af74..bcc772ffe73 100644 --- a/src/librbd/api/Group.h +++ b/src/librbd/api/Group.h @@ -27,6 +27,10 @@ struct Group { librados::IoCtx& image_ioctx, const char *image_name); static int image_remove(librados::IoCtx& group_ioctx, const char *group_name, librados::IoCtx& image_ioctx, const char *image_name); + static int image_remove_by_id(librados::IoCtx& group_ioctx, + const char *group_name, + librados::IoCtx& image_ioctx, + const char *image_id); static int image_list(librados::IoCtx& group_ioctx, const char *group_name, std::vector *images); diff --git a/src/librbd/librbd.cc b/src/librbd/librbd.cc index 5be4e460bd2..865240f6270 100644 --- a/src/librbd/librbd.cc +++ b/src/librbd/librbd.cc @@ -723,6 +723,21 @@ namespace librbd { return r; } + int RBD::group_image_remove_by_id(IoCtx& group_ioctx, const char *group_name, + IoCtx& image_ioctx, const char *image_id) + { + TracepointProvider::initialize(get_cct(group_ioctx)); + tracepoint(librbd, group_image_remove_by_id_enter, + group_ioctx.get_pool_name().c_str(), + group_ioctx.get_id(), group_name, + image_ioctx.get_pool_name().c_str(), + image_ioctx.get_id(), image_id); + int r = librbd::api::Group<>::image_remove_by_id(group_ioctx, group_name, + image_ioctx, image_id); + tracepoint(librbd, group_image_remove_by_id_exit, r); + return r; + } + int RBD::group_image_list(IoCtx& group_ioctx, const char *group_name, std::vector *images) { @@ -4037,6 +4052,31 @@ extern "C" int rbd_group_image_remove( return r; } +extern "C" int rbd_group_image_remove_by_id(rados_ioctx_t group_p, + const char *group_name, + rados_ioctx_t image_p, + const char *image_id) +{ + librados::IoCtx group_ioctx; + librados::IoCtx image_ioctx; + + librados::IoCtx::from_rados_ioctx_t(group_p, group_ioctx); + librados::IoCtx::from_rados_ioctx_t(image_p, image_ioctx); + + TracepointProvider::initialize(get_cct(group_ioctx)); + tracepoint(librbd, group_image_remove_by_id_enter, + group_ioctx.get_pool_name().c_str(), + group_ioctx.get_id(), group_name, + image_ioctx.get_pool_name().c_str(), + image_ioctx.get_id(), image_id); + + int r = librbd::api::Group<>::image_remove_by_id(group_ioctx, group_name, + image_ioctx, image_id); + + tracepoint(librbd, group_image_remove_by_id_exit, r); + return r; +} + extern "C" int rbd_group_image_list(rados_ioctx_t group_p, const char *group_name, rbd_group_image_status_t *images, diff --git a/src/tracing/librbd.tp b/src/tracing/librbd.tp index c5a23eb1547..95ccaa66955 100644 --- a/src/tracing/librbd.tp +++ b/src/tracing/librbd.tp @@ -2350,6 +2350,32 @@ TRACEPOINT_EVENT(librbd, group_image_remove_exit, ) ) +TRACEPOINT_EVENT(librbd, group_image_remove_by_id_enter, + TP_ARGS( + const char*, pool_name, + int64_t, id, + const char*, group_name, + const char*, image_pool_name, + int64_t, image_ioctx_id, + const char*, image_id), + TP_FIELDS( + ctf_string(pool_name, pool_name) + ctf_integer(int64_t, id, id) + ctf_string(group_name, group_name) + ctf_string(image_pool_name, image_pool_name) + ctf_integer(int64_t, image_ioctx_id, image_ioctx_id) + ctf_string(image_id, image_id) + ) +) + +TRACEPOINT_EVENT(librbd, group_image_remove_by_id_exit, + TP_ARGS( + int, retval), + TP_FIELDS( + ctf_integer(int, retval, retval) + ) +) + TRACEPOINT_EVENT(librbd, group_image_list_enter, TP_ARGS( const char*, pool_name,