From: Jason Dillaman Date: Tue, 13 Dec 2016 20:58:42 +0000 (-0500) Subject: librbd: remove consistency group rbd cli and API support X-Git-Tag: v12.1.3~23^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F16875%2Fhead;p=ceph.git librbd: remove consistency group rbd cli and API support Signed-off-by: Jason Dillaman --- diff --git a/src/include/rbd/librbd.h b/src/include/rbd/librbd.h index af782e6e457..f266c76fcab 100644 --- a/src/include/rbd/librbd.h +++ b/src/include/rbd/librbd.h @@ -142,26 +142,6 @@ typedef struct { bool up; } rbd_mirror_image_status_t; -typedef enum { - GROUP_IMAGE_STATE_ATTACHED, - GROUP_IMAGE_STATE_INCOMPLETE -} rbd_group_image_state_t; - -typedef struct { - char *name; - int64_t pool; -} rbd_group_image_spec_t; - -typedef struct { - rbd_group_image_spec_t spec; - rbd_group_image_state_t state; -} rbd_group_image_status_t; - -typedef struct { - char *name; - int64_t pool; -} rbd_group_spec_t; - typedef enum { RBD_LOCK_MODE_EXCLUSIVE = 0, RBD_LOCK_MODE_SHARED = 1, @@ -820,11 +800,6 @@ CEPH_RBD_API int rbd_aio_mirror_image_get_status(rbd_image_t image, size_t status_size, rbd_completion_t c); -// RBD consistency groups support functions -CEPH_RBD_API int rbd_group_create(rados_ioctx_t p, const char *name); -CEPH_RBD_API int rbd_group_remove(rados_ioctx_t p, const char *name); -CEPH_RBD_API int rbd_group_list(rados_ioctx_t p, char *names, size_t *size); - /** * Register an image metadata change watcher. * @@ -846,30 +821,6 @@ CEPH_RBD_API int rbd_update_watch(rbd_image_t image, uint64_t *handle, */ CEPH_RBD_API int rbd_update_unwatch(rbd_image_t image, uint64_t handle); - -CEPH_RBD_API int rbd_group_image_add( - 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( - 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, - size_t *image_size); -CEPH_RBD_API int rbd_image_get_group(rados_ioctx_t image_p, - const char *image_name, - rbd_group_spec_t *group_spec); -CEPH_RBD_API void rbd_group_spec_cleanup(rbd_group_spec_t *group_spec); -CEPH_RBD_API void rbd_group_image_status_cleanup( - rbd_group_image_status_t *image - ); -CEPH_RBD_API void rbd_group_image_status_list_cleanup( - rbd_group_image_status_t *images, - size_t len); #ifdef __cplusplus } #endif diff --git a/src/include/rbd/librbd.hpp b/src/include/rbd/librbd.hpp index bbf4270bc24..7220514e05c 100644 --- a/src/include/rbd/librbd.hpp +++ b/src/include/rbd/librbd.hpp @@ -71,19 +71,6 @@ namespace librbd { bool up; } mirror_image_status_t; - typedef rbd_group_image_state_t group_image_state_t; - - typedef struct { - std::string name; - int64_t pool; - group_image_state_t state; - } group_image_status_t; - - typedef struct { - std::string name; - int64_t pool; - } group_spec_t; - typedef rbd_image_info_t image_info_t; class CEPH_RBD_API ProgressContext @@ -185,20 +172,6 @@ public: int mirror_image_status_summary(IoCtx& io_ctx, std::map *states); - // RBD consistency groups support functions - int group_create(IoCtx& io_ctx, const char *group_name); - int group_remove(IoCtx& io_ctx, const char *group_name); - int group_list(IoCtx& io_ctx, std::vector *names); - - int group_image_add(IoCtx& io_ctx, const char *group_name, - 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); - private: /* We don't allow assignment or copying */ RBD(const RBD& rhs); @@ -259,7 +232,6 @@ public: std::string *parent_id, std::string *parent_snapname); int old_format(uint8_t *old); int size(uint64_t *size); - int get_group(group_spec_t *group_spec); int features(uint64_t *features); int update_features(uint64_t features, bool enabled); int overlap(uint64_t *overlap); diff --git a/src/librbd/CMakeLists.txt b/src/librbd/CMakeLists.txt index e596bd5f499..1b04ec91ab8 100644 --- a/src/librbd/CMakeLists.txt +++ b/src/librbd/CMakeLists.txt @@ -22,7 +22,6 @@ set(librbd_internal_srcs Utils.cc Watcher.cc api/DiffIterate.cc - api/Group.cc api/Image.cc api/Mirror.cc cache/ImageWriteback.cc diff --git a/src/librbd/api/Group.cc b/src/librbd/api/Group.cc deleted file mode 100644 index 090a98074c0..00000000000 --- a/src/librbd/api/Group.cc +++ /dev/null @@ -1,419 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -// vim: ts=8 sw=2 smarttab - -#include "librbd/api/Group.h" -#include "common/errno.h" -#include "librbd/ImageState.h" -#include "librbd/Utils.h" -#include "librbd/io/AioCompletion.h" - -#define dout_subsys ceph_subsys_rbd -#undef dout_prefix -#define dout_prefix *_dout << "librbd::api::Group: " << __func__ << ": " - -using std::map; -using std::pair; -using std::set; -using std::string; -using std::vector; -// list binds to list() here, so std::list is explicitly used below - -using ceph::bufferlist; -using librados::snap_t; -using librados::IoCtx; -using librados::Rados; - -namespace librbd { -namespace api { - -// Consistency groups functions - -template -int Group::create(librados::IoCtx& io_ctx, const char *group_name) -{ - CephContext *cct = (CephContext *)io_ctx.cct(); - - Rados rados(io_ctx); - uint64_t bid = rados.get_instance_id(); - - uint32_t extra = rand() % 0xFFFFFFFF; - ostringstream bid_ss; - bid_ss << std::hex << bid << std::hex << extra; - string id = bid_ss.str(); - - ldout(cct, 2) << "adding consistency group to directory..." << dendl; - - int r = cls_client::group_dir_add(&io_ctx, RBD_GROUP_DIRECTORY, group_name, - id); - if (r < 0) { - lderr(cct) << "error adding consistency group to directory: " - << cpp_strerror(r) - << dendl; - return r; - } - string header_oid = util::group_header_name(id); - - r = cls_client::group_create(&io_ctx, header_oid); - if (r < 0) { - lderr(cct) << "error writing header: " << cpp_strerror(r) << dendl; - goto err_remove_from_dir; - } - - return 0; - -err_remove_from_dir: - int remove_r = cls_client::group_dir_remove(&io_ctx, RBD_GROUP_DIRECTORY, - group_name, id); - if (remove_r < 0) { - lderr(cct) << "error cleaning up consistency group from rbd_directory " - << "object after creation failed: " << cpp_strerror(remove_r) - << dendl; - } - - return r; -} - -template -int Group::remove(librados::IoCtx& io_ctx, const char *group_name) -{ - CephContext *cct((CephContext *)io_ctx.cct()); - ldout(cct, 20) << "io_ctx=" << &io_ctx << " " << group_name << dendl; - - std::vector images; - int r = image_list(io_ctx, group_name, &images); - if (r < 0 && r != -ENOENT) { - lderr(cct) << "error listing group images" << dendl; - return r; - } - - for (auto i : images) { - librados::Rados rados(io_ctx); - IoCtx image_ioctx; - rados.ioctx_create2(i.pool, image_ioctx); - r = image_remove(io_ctx, group_name, image_ioctx, i.name.c_str()); - if (r < 0 && r != -ENOENT) { - lderr(cct) << "error removing image from a group" << dendl; - return r; - } - } - - std::string group_id; - r = cls_client::dir_get_id(&io_ctx, RBD_GROUP_DIRECTORY, - std::string(group_name), &group_id); - if (r < 0 && r != -ENOENT) { - lderr(cct) << "error getting id of group" << dendl; - return r; - } - - string header_oid = util::group_header_name(group_id); - - r = io_ctx.remove(header_oid); - if (r < 0 && r != -ENOENT) { - lderr(cct) << "error removing header: " << cpp_strerror(-r) << dendl; - return r; - } - - r = cls_client::group_dir_remove(&io_ctx, RBD_GROUP_DIRECTORY, group_name, - group_id); - if (r < 0 && r != -ENOENT) { - lderr(cct) << "error removing group from directory" << dendl; - return r; - } - - return 0; -} - -template -int Group::list(IoCtx& io_ctx, vector *names) -{ - CephContext *cct = (CephContext *)io_ctx.cct(); - ldout(cct, 20) << "io_ctx=" << &io_ctx << dendl; - - int max_read = 1024; - string last_read = ""; - int r; - do { - map groups; - r = cls_client::group_dir_list(&io_ctx, RBD_GROUP_DIRECTORY, last_read, - max_read, &groups); - if (r < 0) { - if (r != -ENOENT) { - lderr(cct) << "error listing group in directory: " - << cpp_strerror(r) << dendl; - } else { - r = 0; - } - return r; - } - for (pair group : groups) { - names->push_back(group.first); - } - if (!groups.empty()) { - last_read = groups.rbegin()->first; - } - r = groups.size(); - } while (r == max_read); - - return 0; -} - -template -int Group::image_add(librados::IoCtx& group_ioctx, const char *group_name, - librados::IoCtx& image_ioctx, const char *image_name) -{ - CephContext *cct = (CephContext *)group_ioctx.cct(); - ldout(cct, 20) << "io_ctx=" << &group_ioctx - << " group name " << group_name << " image " - << &image_ioctx << " name " << image_name << dendl; - - string group_id; - - int r = cls_client::dir_get_id(&group_ioctx, RBD_GROUP_DIRECTORY, group_name, - &group_id); - if (r < 0) { - lderr(cct) << "error reading consistency group id object: " - << cpp_strerror(r) - << dendl; - return r; - } - string group_header_oid = util::group_header_name(group_id); - - - 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) << "adding image " << image_name - << " image id " << image_header_oid << dendl; - - cls::rbd::GroupImageStatus incomplete_st( - image_id, image_ioctx.get_id(), - cls::rbd::GROUP_IMAGE_LINK_STATE_INCOMPLETE); - cls::rbd::GroupImageStatus attached_st( - image_id, image_ioctx.get_id(), cls::rbd::GROUP_IMAGE_LINK_STATE_ATTACHED); - - r = cls_client::group_image_set(&group_ioctx, group_header_oid, - incomplete_st); - - cls::rbd::GroupSpec group_spec(group_id, group_ioctx.get_id()); - - if (r < 0) { - lderr(cct) << "error adding image reference to consistency group: " - << cpp_strerror(-r) << dendl; - return r; - } - - r = cls_client::image_add_group(&image_ioctx, image_header_oid, group_spec); - if (r < 0) { - lderr(cct) << "error adding group reference to image: " - << cpp_strerror(-r) << dendl; - cls::rbd::GroupImageSpec spec(image_id, image_ioctx.get_id()); - cls_client::group_image_remove(&group_ioctx, group_header_oid, spec); - // Ignore errors in the clean up procedure. - return r; - } - - r = cls_client::group_image_set(&group_ioctx, group_header_oid, - attached_st); - - return r; -} - -template -int Group::image_remove(librados::IoCtx& group_ioctx, const char *group_name, - librados::IoCtx& image_ioctx, const char *image_name) -{ - CephContext *cct = (CephContext *)group_ioctx.cct(); - ldout(cct, 20) << "io_ctx=" << &group_ioctx - << " 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, - &group_id); - if (r < 0) { - lderr(cct) << "error reading consistency group id object: " - << cpp_strerror(r) - << dendl; - return r; - } - string group_header_oid = util::group_header_name(group_id); - - ldout(cct, 20) << "adding image to group name " << group_name - << " group id " << group_header_oid << dendl; - - string image_header_oid = util::header_name(image_id); - - ldout(cct, 20) << "removing " << " image id " << image_header_oid << dendl; - - cls::rbd::GroupSpec group_spec(group_id, group_ioctx.get_id()); - - cls::rbd::GroupImageStatus incomplete_st( - image_id, image_ioctx.get_id(), - cls::rbd::GROUP_IMAGE_LINK_STATE_INCOMPLETE); - - cls::rbd::GroupImageSpec spec(image_id, image_ioctx.get_id()); - - r = cls_client::group_image_set(&group_ioctx, group_header_oid, - incomplete_st); - - if (r < 0) { - lderr(cct) << "couldn't put image into removing state: " - << cpp_strerror(-r) << dendl; - return r; - } - - r = cls_client::image_remove_group(&image_ioctx, image_header_oid, - group_spec); - if ((r < 0) && (r != -ENOENT)) { - lderr(cct) << "couldn't remove group reference from image" - << cpp_strerror(-r) << dendl; - return r; - } - - r = cls_client::group_image_remove(&group_ioctx, group_header_oid, spec); - if (r < 0) { - lderr(cct) << "couldn't remove image from group" - << cpp_strerror(-r) << dendl; - return r; - } - - return 0; -} - -template -int Group::image_list(librados::IoCtx& group_ioctx, - const char *group_name, - std::vector *images) -{ - CephContext *cct = (CephContext *)group_ioctx.cct(); - ldout(cct, 20) << "io_ctx=" << &group_ioctx - << " group name " << group_name << dendl; - - string group_id; - - int r = cls_client::dir_get_id(&group_ioctx, RBD_GROUP_DIRECTORY, - group_name, &group_id); - if (r < 0) { - lderr(cct) << "error reading consistency group id object: " - << cpp_strerror(r) - << dendl; - return r; - } - string group_header_oid = util::group_header_name(group_id); - - ldout(cct, 20) << "listing images in group name " - << group_name << " group id " << group_header_oid << dendl; - - std::vector image_ids; - - const int max_read = 1024; - do { - std::vector image_ids_page; - cls::rbd::GroupImageSpec start_last; - - r = cls_client::group_image_list(&group_ioctx, group_header_oid, - start_last, max_read, &image_ids_page); - - if (r < 0) { - lderr(cct) << "error reading image list from consistency group: " - << cpp_strerror(-r) << dendl; - return r; - } - image_ids.insert(image_ids.end(), - image_ids_page.begin(), image_ids_page.end()); - - if (image_ids_page.size() > 0) - start_last = image_ids_page.rbegin()->spec; - - r = image_ids_page.size(); - } while (r == max_read); - - for (auto i : image_ids) { - librados::Rados rados(group_ioctx); - IoCtx ioctx; - rados.ioctx_create2(i.spec.pool_id, ioctx); - std::string image_name; - r = cls_client::dir_get_name(&ioctx, RBD_DIRECTORY, - i.spec.image_id, &image_name); - if (r < 0) { - return r; - } - - images->push_back( - group_image_status_t { - image_name, - i.spec.pool_id, - static_cast(i.state)}); - } - - return 0; -} - -template -int Group::image_get_group(I *ictx, group_spec_t *group_spec) -{ - int r = ictx->state->refresh_if_required(); - if (r < 0) - return r; - - if (-1 != ictx->group_spec.pool_id) { - librados::Rados rados(ictx->md_ctx); - IoCtx ioctx; - rados.ioctx_create2(ictx->group_spec.pool_id, ioctx); - - std::string group_name; - r = cls_client::dir_get_name(&ioctx, RBD_GROUP_DIRECTORY, - ictx->group_spec.group_id, &group_name); - if (r < 0) - return r; - group_spec->pool = ictx->group_spec.pool_id; - group_spec->name = group_name; - } else { - group_spec->pool = -1; - group_spec->name = ""; - } - - return 0; -} - -} // namespace api -} // namespace librbd - -template class librbd::api::Group; diff --git a/src/librbd/api/Group.h b/src/librbd/api/Group.h deleted file mode 100644 index bcc772ffe73..00000000000 --- a/src/librbd/api/Group.h +++ /dev/null @@ -1,46 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -// vim: ts=8 sw=2 smarttab - -#ifndef CEPH_LIBRBD_API_GROUP_H -#define CEPH_LIBRBD_API_GROUP_H - -#include "include/rbd/librbd.hpp" -#include -#include - -namespace librados { struct IoCtx; } - -namespace librbd { - -struct ImageCtx; - -namespace api { - -template -struct Group { - - static int create(librados::IoCtx& io_ctx, const char *imgname); - static int remove(librados::IoCtx& io_ctx, const char *group_name); - static int list(librados::IoCtx& io_ctx, std::vector *names); - - static int image_add(librados::IoCtx& group_ioctx, const char *group_name, - 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); - - static int image_get_group(ImageCtxT *ictx, group_spec_t *group_spec); - -}; - -} // namespace api -} // namespace librbd - -extern template class librbd::api::Group; - -#endif // CEPH_LIBRBD_API_GROUP_H diff --git a/src/librbd/librbd.cc b/src/librbd/librbd.cc index 999ac25233a..31889b822a6 100644 --- a/src/librbd/librbd.cc +++ b/src/librbd/librbd.cc @@ -28,7 +28,6 @@ #include "librbd/internal.h" #include "librbd/Operations.h" #include "librbd/api/DiffIterate.h" -#include "librbd/api/Group.h" #include "librbd/api/Mirror.h" #include "librbd/io/AioCompletion.h" #include "librbd/io/ImageRequestWQ.h" @@ -153,19 +152,6 @@ struct C_UpdateWatchCB : public librbd::UpdateWatchCtx { } }; -void group_image_status_cpp_to_c(const librbd::group_image_status_t &cpp_status, - rbd_group_image_status_t *c_status) { - c_status->spec.name = strdup(cpp_status.name.c_str()); - c_status->spec.pool = cpp_status.pool; - c_status->state = cpp_status.state; -} - -void group_spec_cpp_to_c(const librbd::group_spec_t &cpp_spec, - rbd_group_spec_t *c_spec) { - c_spec->name = strdup(cpp_spec.name.c_str()); - c_spec->pool = cpp_spec.pool; -} - void mirror_image_info_cpp_to_c(const librbd::mirror_image_info_t &cpp_info, rbd_mirror_image_info_t *c_info) { c_info->global_id = strdup(cpp_info.global_id.c_str()); @@ -675,95 +661,6 @@ namespace librbd { return librbd::api::Mirror<>::image_status_summary(io_ctx, states); } - int RBD::group_create(IoCtx& io_ctx, const char *group_name) - { - TracepointProvider::initialize(get_cct(io_ctx)); - tracepoint(librbd, group_create_enter, io_ctx.get_pool_name().c_str(), - io_ctx.get_id(), group_name); - int r = librbd::api::Group<>::create(io_ctx, group_name); - tracepoint(librbd, group_create_exit, r); - return r; - } - - int RBD::group_remove(IoCtx& io_ctx, const char *group_name) - { - TracepointProvider::initialize(get_cct(io_ctx)); - tracepoint(librbd, group_remove_enter, io_ctx.get_pool_name().c_str(), - io_ctx.get_id(), group_name); - int r = librbd::api::Group<>::remove(io_ctx, group_name); - tracepoint(librbd, group_remove_exit, r); - return r; - } - - int RBD::group_list(IoCtx& io_ctx, vector *names) - { - TracepointProvider::initialize(get_cct(io_ctx)); - tracepoint(librbd, group_list_enter, io_ctx.get_pool_name().c_str(), - io_ctx.get_id()); - - int r = librbd::api::Group<>::list(io_ctx, names); - if (r >= 0) { - for (auto itr : *names) { - tracepoint(librbd, group_list_entry, itr.c_str()); - } - } - tracepoint(librbd, group_list_exit, r); - return r; - } - - int RBD::group_image_add(IoCtx& group_ioctx, const char *group_name, - IoCtx& image_ioctx, const char *image_name) - { - TracepointProvider::initialize(get_cct(group_ioctx)); - tracepoint(librbd, group_image_add_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_name); - int r = librbd::api::Group<>::image_add(group_ioctx, group_name, - image_ioctx, image_name); - tracepoint(librbd, group_image_add_exit, r); - return r; - } - - int RBD::group_image_remove(IoCtx& group_ioctx, const char *group_name, - IoCtx& image_ioctx, const char *image_name) - { - TracepointProvider::initialize(get_cct(group_ioctx)); - tracepoint(librbd, group_image_remove_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_name); - int r = librbd::api::Group<>::image_remove(group_ioctx, group_name, - image_ioctx, image_name); - tracepoint(librbd, group_image_remove_exit, r); - 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) - { - TracepointProvider::initialize(get_cct(group_ioctx)); - tracepoint(librbd, group_image_list_enter, group_ioctx.get_pool_name().c_str(), - group_ioctx.get_id(), group_name); - int r = librbd::api::Group<>::image_list(group_ioctx, group_name, images); - tracepoint(librbd, group_image_list_exit, r); - return r; - } - - RBD::AioCompletion::AioCompletion(void *cb_arg, callback_t complete_cb) { pc = reinterpret_cast(librbd::io::AioCompletion::create( @@ -965,15 +862,6 @@ namespace librbd { return r; } - int Image::get_group(group_spec_t *group_spec) - { - ImageCtx *ictx = (ImageCtx *)ctx; - tracepoint(librbd, image_get_group_enter, ictx->name.c_str()); - int r = librbd::api::Group<>::image_get_group(ictx, group_spec); - tracepoint(librbd, image_get_group_exit, r); - return r; - } - int Image::features(uint64_t *features) { ImageCtx *ictx = (ImageCtx *)ctx; @@ -4115,214 +4003,3 @@ extern "C" void rbd_aio_release(rbd_completion_t c) comp->release(); } -extern "C" int rbd_group_create(rados_ioctx_t p, const char *name) -{ - librados::IoCtx io_ctx; - librados::IoCtx::from_rados_ioctx_t(p, io_ctx); - TracepointProvider::initialize(get_cct(io_ctx)); - tracepoint(librbd, group_create_enter, io_ctx.get_pool_name().c_str(), - io_ctx.get_id(), name); - int r = librbd::api::Group<>::create(io_ctx, name); - tracepoint(librbd, group_create_exit, r); - return r; -} - -extern "C" int rbd_group_remove(rados_ioctx_t p, const char *name) -{ - librados::IoCtx io_ctx; - librados::IoCtx::from_rados_ioctx_t(p, io_ctx); - TracepointProvider::initialize(get_cct(io_ctx)); - tracepoint(librbd, group_remove_enter, io_ctx.get_pool_name().c_str(), - io_ctx.get_id(), name); - int r = librbd::api::Group<>::remove(io_ctx, name); - tracepoint(librbd, group_remove_exit, r); - return r; -} - -extern "C" int rbd_group_list(rados_ioctx_t p, char *names, size_t *size) -{ - librados::IoCtx io_ctx; - librados::IoCtx::from_rados_ioctx_t(p, io_ctx); - TracepointProvider::initialize(get_cct(io_ctx)); - tracepoint(librbd, group_list_enter, io_ctx.get_pool_name().c_str(), - io_ctx.get_id()); - - vector cpp_names; - int r = librbd::list(io_ctx, cpp_names); - if (r < 0) { - tracepoint(librbd, group_list_exit, r); - return r; - } - - size_t expected_size = 0; - - for (size_t i = 0; i < cpp_names.size(); i++) { - expected_size += cpp_names[i].size() + 1; - } - if (*size < expected_size) { - *size = expected_size; - tracepoint(librbd, group_list_exit, -ERANGE); - return -ERANGE; - } - - if (!names) - return -EINVAL; - - names[expected_size] = '\0'; - for (int i = 0; i < (int)cpp_names.size(); i++) { - const char* name = cpp_names[i].c_str(); - tracepoint(librbd, group_list_entry, name); - strcpy(names, name); - names += strlen(names) + 1; - } - tracepoint(librbd, group_list_exit, (int)expected_size); - return (int)expected_size; -} - -extern "C" int rbd_group_image_add( - rados_ioctx_t group_p, const char *group_name, - rados_ioctx_t image_p, const char *image_name) -{ - 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_add_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_name); - - int r = librbd::api::Group<>::image_add(group_ioctx, group_name, image_ioctx, - image_name); - - tracepoint(librbd, group_image_add_exit, r); - return r; -} - -extern "C" int rbd_group_image_remove( - rados_ioctx_t group_p, const char *group_name, - rados_ioctx_t image_p, const char *image_name) -{ - 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_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_name); - - int r = librbd::api::Group<>::image_remove(group_ioctx, group_name, - image_ioctx, image_name); - - tracepoint(librbd, group_image_remove_exit, r); - 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, - size_t *image_size) -{ - librados::IoCtx group_ioctx; - librados::IoCtx::from_rados_ioctx_t(group_p, group_ioctx); - - TracepointProvider::initialize(get_cct(group_ioctx)); - tracepoint(librbd, group_image_list_enter, group_ioctx.get_pool_name().c_str(), - group_ioctx.get_id(), group_name); - - std::vector cpp_images; - int r = librbd::api::Group<>::image_list(group_ioctx, group_name, - &cpp_images); - - if (r == -ENOENT) { - tracepoint(librbd, group_image_list_exit, 0); - return 0; - } - - if (r < 0) { - tracepoint(librbd, group_image_list_exit, r); - return r; - } - - if (*image_size < cpp_images.size()) { - tracepoint(librbd, group_image_list_exit, -ERANGE); - return -ERANGE; - } - - for (size_t i = 0; i < cpp_images.size(); ++i) { - group_image_status_cpp_to_c(cpp_images[i], &images[i]); - } - - tracepoint(librbd, group_image_list_exit, r); - return r; -} - -extern "C" int rbd_image_get_group(rados_ioctx_t image_p, - const char *image_name, - rbd_group_spec_t *c_group_spec) -{ - librados::IoCtx io_ctx; - librados::IoCtx::from_rados_ioctx_t(image_p, io_ctx); - - librbd::ImageCtx *ictx = new librbd::ImageCtx(image_name, "", "", io_ctx, false); - int r = ictx->state->open(false); - if (r < 0) { - tracepoint(librbd, open_image_exit, r); - return r; - } - - tracepoint(librbd, image_get_group_enter, ictx->name.c_str()); - librbd::group_spec_t group_spec; - r = librbd::api::Group<>::image_get_group(ictx, &group_spec); - group_spec_cpp_to_c(group_spec, c_group_spec); - tracepoint(librbd, image_get_group_exit, r); - ictx->state->close(); - return r; -} - -extern "C" void rbd_group_spec_cleanup(rbd_group_spec_t *group_spec) { - free(group_spec->name); -} - -extern "C" void rbd_group_image_status_cleanup( - rbd_group_image_status_t *image) { - free(image->spec.name); -} - -extern "C" void rbd_group_image_status_list_cleanup( - rbd_group_image_status_t *images, - size_t len) { - for (size_t i = 0; i < len; ++i) { - rbd_group_image_status_cleanup(&images[i]); - } -} diff --git a/src/test/cli/rbd/help.t b/src/test/cli/rbd/help.t index 7c38ae60255..a3b1fd951ea 100644 --- a/src/test/cli/rbd/help.t +++ b/src/test/cli/rbd/help.t @@ -20,12 +20,6 @@ feature enable Enable the specified image feature. flatten Fill clone with parent data (make it independent). - group create Create a consistency group. - group image add Add an image to a consistency group. - group image list List images in a consistency group. - group image remove Remove an image from a consistency group. - group list (group ls) List rbd consistency groups. - group remove (group rm) Delete a consistency group. image-meta get Image metadata get the value associated with the key. image-meta list Image metadata list keys with values. @@ -426,104 +420,6 @@ --image arg image name --no-progress disable progress output - rbd help group create - usage: rbd group create [--pool ] [--group ] - - - Create a consistency group. - - Positional arguments - group specification - (example: [/]) - - Optional arguments - -p [ --pool ] arg pool name - --group arg group name - - rbd help group image add - usage: rbd group image add [--group-pool ] [--group ] - [--image-pool ] [--image ] - [--pool ] - - - Add an image to a consistency group. - - Positional arguments - group specification - (example: [/]) - image specification - (example: [/]) - - Optional arguments - --group-pool arg group pool name - --group arg group name - --image-pool arg image pool name - --image arg image name - -p [ --pool ] arg pool name unless overridden - - rbd help group image list - usage: rbd group image list [--format ] [--pretty-format] - [--pool ] [--group ] - - - List images in a consistency group. - - Positional arguments - group specification - (example: [/]) - - Optional arguments - --format arg output format [plain, json, or xml] - --pretty-format pretty formatting (json and xml) - -p [ --pool ] arg pool name - --group arg group name - - rbd help group image remove - usage: rbd group image remove [--group-pool ] [--group ] - [--image-pool ] [--image ] - [--pool ] [--image-id ] - - - Remove an image from a consistency group. - - Positional arguments - group specification - (example: [/]) - image specification - (example: [/]) - - Optional arguments - --group-pool arg group pool name - --group arg group name - --image-pool arg image pool name - --image arg image name - -p [ --pool ] arg pool name unless overridden - --image-id arg image id - - rbd help group list - usage: rbd group list [--pool ] [--format ] [--pretty-format] - - List rbd consistency groups. - - Optional arguments - -p [ --pool ] arg pool name - --format arg output format [plain, json, or xml] - --pretty-format pretty formatting (json and xml) - - rbd help group remove - usage: rbd group remove [--pool ] [--group ] - - - Delete a consistency group. - - Positional arguments - group specification - (example: [/]) - - Optional arguments - -p [ --pool ] arg pool name - --group arg group name - rbd help image-meta get usage: rbd image-meta get [--pool ] [--image ] diff --git a/src/test/librbd/CMakeLists.txt b/src/test/librbd/CMakeLists.txt index a73f2e634bb..2833d22e68a 100644 --- a/src/test/librbd/CMakeLists.txt +++ b/src/test/librbd/CMakeLists.txt @@ -6,7 +6,6 @@ set(librbd_test test_internal.cc test_mirroring.cc test_BlockGuard.cc - test_Groups.cc test_MirroringWatcher.cc test_ObjectMap.cc test_Operations.cc diff --git a/src/test/librbd/test_Groups.cc b/src/test/librbd/test_Groups.cc deleted file mode 100644 index 39f30959abb..00000000000 --- a/src/test/librbd/test_Groups.cc +++ /dev/null @@ -1,91 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -// vim: ts=8 sw=2 smarttab -#include "test/librbd/test_fixture.h" -#include "test/librbd/test_support.h" -#include "include/int_types.h" -#include "include/stringify.h" -#include "include/rados/librados.h" -#include "include/rbd/librbd.hpp" -#include "common/Cond.h" -#include "common/errno.h" -#include "common/Mutex.h" -#include "common/RWLock.h" -#include "cls/lock/cls_lock_client.h" -#include "cls/lock/cls_lock_types.h" -#include "librbd/internal.h" -#include "librbd/ImageCtx.h" -#include "librbd/ImageWatcher.h" -#include "librbd/WatchNotifyTypes.h" -#include "librbd/io/AioCompletion.h" -#include "librbd/io/ImageRequestWQ.h" -#include "test/librados/test.h" -#include "gtest/gtest.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace ceph; -using namespace boost::assign; -using namespace librbd::watch_notify; - -void register_test_groups() { -} - -class TestLibCG : public TestFixture { - -}; - -TEST_F(TestLibCG, group_create) -{ - librados::IoCtx ioctx; - ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); - - librbd::RBD rbd; - ASSERT_EQ(0, rbd.group_create(ioctx, "mygroup")); - - vector groups; - ASSERT_EQ(0, rbd.group_list(ioctx, &groups)); - ASSERT_EQ(1U, groups.size()); - ASSERT_EQ("mygroup", groups[0]); - - ASSERT_EQ(0, rbd.group_remove(ioctx, "mygroup")); - - groups.clear(); - ASSERT_EQ(0, rbd.group_list(ioctx, &groups)); - ASSERT_EQ(0U, groups.size()); -} - -TEST_F(TestLibCG, add_image) -{ - librados::IoCtx ioctx; - ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); - - const char *group_name = "mycg"; - const char *image_name = "myimage"; - librbd::RBD rbd; - ASSERT_EQ(0, rbd.group_create(ioctx, group_name)); - int order = 14; - ASSERT_EQ(0, rbd.create2(ioctx, image_name, 65535, - RBD_FEATURE_LAYERING, &order)); // Specified features make image of new format. - - ASSERT_EQ(0, rbd.group_image_add(ioctx, group_name, ioctx, image_name)); - - vector images; - ASSERT_EQ(0, rbd.group_image_list(ioctx, group_name, &images)); - ASSERT_EQ(1U, images.size()); - ASSERT_EQ("myimage", images[0].name); - ASSERT_EQ(ioctx.get_id(), images[0].pool); - - ASSERT_EQ(0, rbd.group_image_remove(ioctx, group_name, ioctx, image_name)); - - images.clear(); - ASSERT_EQ(0, rbd.group_image_list(ioctx, group_name, &images)); - ASSERT_EQ(0U, images.size()); -} diff --git a/src/test/librbd/test_main.cc b/src/test/librbd/test_main.cc index 0aa6aeeb81c..be6145c4b2b 100644 --- a/src/test/librbd/test_main.cc +++ b/src/test/librbd/test_main.cc @@ -10,7 +10,6 @@ extern void register_test_librbd(); #ifdef TEST_LIBRBD_INTERNALS -extern void register_test_groups(); extern void register_test_image_watcher(); extern void register_test_internal(); extern void register_test_journal_entries(); @@ -25,7 +24,6 @@ int main(int argc, char **argv) { register_test_librbd(); #ifdef TEST_LIBRBD_INTERNALS - register_test_groups(); register_test_image_watcher(); register_test_internal(); register_test_journal_entries(); diff --git a/src/tools/rbd/CMakeLists.txt b/src/tools/rbd/CMakeLists.txt index ad4005ebf0a..e9b0b171de3 100644 --- a/src/tools/rbd/CMakeLists.txt +++ b/src/tools/rbd/CMakeLists.txt @@ -15,7 +15,6 @@ set(rbd_srcs action/Export.cc action/Feature.cc action/Flatten.cc - action/Group.cc action/ImageMeta.cc action/Import.cc action/Info.cc diff --git a/src/tools/rbd/action/Group.cc b/src/tools/rbd/action/Group.cc deleted file mode 100644 index 40ebd4d9927..00000000000 --- a/src/tools/rbd/action/Group.cc +++ /dev/null @@ -1,401 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -// vim: ts=8 sw=2 smarttab - -#include - -#include "tools/rbd/ArgumentTypes.h" -#include "tools/rbd/Shell.h" -#include "tools/rbd/Utils.h" -#include "include/rbd_types.h" -#include "cls/rbd/cls_rbd_types.h" -#include "common/errno.h" -#include "common/Formatter.h" - -namespace rbd { -namespace action { -namespace consgrp { - -namespace at = argument_types; -namespace po = boost::program_options; - -int execute_create(const po::variables_map &vm) { - size_t arg_index = 0; - - std::string group_name; - std::string pool_name; - - int r = utils::get_pool_group_names(vm, at::ARGUMENT_MODIFIER_NONE, - &arg_index, &pool_name, &group_name); - if (r < 0) { - return r; - } - - librados::Rados rados; - librados::IoCtx io_ctx; - - r = utils::init(pool_name, &rados, &io_ctx); - if (r < 0) { - return r; - } - librbd::RBD rbd; - r = rbd.group_create(io_ctx, group_name.c_str()); - if (r < 0) { - std::cerr << "rbd: create error: " << cpp_strerror(r) << std::endl; - return r; - } - - return 0; -} - -int execute_list(const po::variables_map &vm) { - - size_t arg_index = 0; - std::string pool_name = utils::get_pool_name(vm, &arg_index); - - at::Format::Formatter formatter; - int r = utils::get_formatter(vm, &formatter); - if (r < 0) { - return r; - } - Formatter *f = formatter.get(); - - librados::Rados rados; - librados::IoCtx io_ctx; - r = utils::init(pool_name, &rados, &io_ctx); - if (r < 0) { - return r; - } - - librbd::RBD rbd; - std::vector names; - r = rbd.group_list(io_ctx, &names); - if (r < 0) - return r; - - if (f) - f->open_array_section("consistency_groups"); - for (auto i : names) { - if (f) - f->dump_string("name", i); - else - std::cout << i << std::endl; - } - if (f) { - f->close_section(); - f->flush(std::cout); - } - - return 0; -} - -int execute_remove(const po::variables_map &vm) { - size_t arg_index = 0; - - std::string group_name; - std::string pool_name; - - int r = utils::get_pool_group_names(vm, at::ARGUMENT_MODIFIER_NONE, - &arg_index, &pool_name, &group_name); - if (r < 0) { - return r; - } - - librados::Rados rados; - librados::IoCtx io_ctx; - - r = utils::init(pool_name, &rados, &io_ctx); - if (r < 0) { - return r; - } - librbd::RBD rbd; - - r = rbd.group_remove(io_ctx, group_name.c_str()); - if (r < 0) { - std::cerr << "rbd: remove error: " << cpp_strerror(r) << std::endl; - return r; - } - - return 0; -} - -int execute_add(const po::variables_map &vm) { - size_t arg_index = 0; - // Parse group data. - std::string group_name; - std::string group_pool_name; - - int r = utils::get_special_pool_group_names(vm, &arg_index, - &group_pool_name, - &group_name); - if (r < 0) { - std::cerr << "rbd: image add error: " << cpp_strerror(r) << std::endl; - return r; - } - - std::string image_name; - std::string image_pool_name; - - r = utils::get_special_pool_image_names(vm, &arg_index, - &image_pool_name, - &image_name); - - if (r < 0) { - std::cerr << "rbd: image add error: " << cpp_strerror(r) << std::endl; - return r; - } - - librados::Rados rados; - - librados::IoCtx cg_io_ctx; - r = utils::init(group_pool_name, &rados, &cg_io_ctx); - if (r < 0) { - return r; - } - - librados::IoCtx image_io_ctx; - r = utils::init(image_pool_name, &rados, &image_io_ctx); - if (r < 0) { - return r; - } - - librbd::RBD rbd; - r = rbd.group_image_add(cg_io_ctx, group_name.c_str(), - image_io_ctx, image_name.c_str()); - if (r < 0) { - std::cerr << "rbd: add image error: " << cpp_strerror(r) << std::endl; - return r; - } - - return 0; -} - -int execute_remove_image(const po::variables_map &vm) { - size_t arg_index = 0; - - std::string group_name; - std::string group_pool_name; - - int r = utils::get_special_pool_group_names(vm, &arg_index, - &group_pool_name, - &group_name); - if (r < 0) { - std::cerr << "rbd: image remove error: " << cpp_strerror(r) << std::endl; - return r; - } - - std::string image_name; - std::string image_pool_name; - std::string image_id; - - if (vm.count(at::IMAGE_ID)) { - image_id = vm[at::IMAGE_ID].as(); - } - - bool has_image_spec = utils::check_if_image_spec_present( - vm, at::ARGUMENT_MODIFIER_NONE, arg_index); - - if (!image_id.empty() && has_image_spec) { - std::cerr << "rbd: trying to access image using both name and id. " - << std::endl; - return -EINVAL; - } - - if (image_id.empty()) { - r = utils::get_special_pool_image_names(vm, &arg_index, &image_pool_name, - &image_name); - } else { - image_pool_name = utils::get_pool_name(vm, &arg_index); - } - - if (r < 0) { - std::cerr << "rbd: image remove error: " << cpp_strerror(r) << std::endl; - return r; - } - - librados::Rados rados; - - librados::IoCtx cg_io_ctx; - r = utils::init(group_pool_name, &rados, &cg_io_ctx); - if (r < 0) { - return r; - } - - librados::IoCtx image_io_ctx; - r = utils::init(image_pool_name, &rados, &image_io_ctx); - if (r < 0) { - return r; - } - - librbd::RBD rbd; - if (image_id.empty()) { - r = rbd.group_image_remove(cg_io_ctx, group_name.c_str(), - image_io_ctx, image_name.c_str()); - } else { - r = rbd.group_image_remove_by_id(cg_io_ctx, group_name.c_str(), - image_io_ctx, image_id.c_str()); - } - if (r < 0) { - std::cerr << "rbd: remove image error: " << cpp_strerror(r) << std::endl; - return r; - } - - return 0; -} - -int execute_list_images(const po::variables_map &vm) { - size_t arg_index = 0; - std::string group_name; - std::string pool_name; - - int r = utils::get_pool_group_names(vm, at::ARGUMENT_MODIFIER_NONE, - &arg_index, &pool_name, &group_name); - if (r < 0) { - return r; - } - - if (group_name.empty()) { - std::cerr << "rbd: " - << "consistency group name was not specified" << std::endl; - return -EINVAL; - } - - at::Format::Formatter formatter; - r = utils::get_formatter(vm, &formatter); - if (r < 0) { - return r; - } - Formatter *f = formatter.get(); - - librados::Rados rados; - librados::IoCtx io_ctx; - r = utils::init(pool_name, &rados, &io_ctx); - if (r < 0) { - return r; - } - - librbd::RBD rbd; - std::vector images; - - r = rbd.group_image_list(io_ctx, group_name.c_str(), &images); - - if (r == -ENOENT) - r = 0; - - if (r < 0) - return r; - - if (f) - f->open_array_section("consistency_groups"); - - for (auto i : images) { - std::string image_name = i.name; - int64_t pool_id = i.pool; - int state = i.state; - std::string state_string; - if (cls::rbd::GROUP_IMAGE_LINK_STATE_INCOMPLETE == state) { - state_string = "incomplete"; - } - if (f) { - f->dump_string("image name", image_name); - f->dump_int("pool id", pool_id); - f->dump_int("state", state); - } else - std::cout << pool_id << "." << image_name << " " << state_string << std::endl; - } - - if (f) { - f->close_section(); - f->flush(std::cout); - } - - return 0; -} - -void get_create_arguments(po::options_description *positional, - po::options_description *options) { - at::add_group_spec_options(positional, options, at::ARGUMENT_MODIFIER_NONE); -} - -void get_remove_arguments(po::options_description *positional, - po::options_description *options) { - at::add_group_spec_options(positional, options, at::ARGUMENT_MODIFIER_NONE); -} - -void get_list_arguments(po::options_description *positional, - po::options_description *options) { - add_pool_option(options, at::ARGUMENT_MODIFIER_NONE); - at::add_format_options(options); -} - -void get_add_arguments(po::options_description *positional, - po::options_description *options) { - positional->add_options() - (at::GROUP_SPEC.c_str(), - "group specification\n" - "(example: [/])"); - - at::add_special_pool_option(options, "group"); - at::add_group_option(options, at::ARGUMENT_MODIFIER_NONE); - - positional->add_options() - (at::IMAGE_SPEC.c_str(), - "image specification\n" - "(example: [/])"); - - at::add_special_pool_option(options, "image"); - at::add_image_option(options, at::ARGUMENT_MODIFIER_NONE); - - at::add_pool_option(options, at::ARGUMENT_MODIFIER_NONE, - " unless overridden"); -} - -void get_remove_image_arguments(po::options_description *positional, - po::options_description *options) { - positional->add_options() - (at::GROUP_SPEC.c_str(), - "group specification\n" - "(example: [/])"); - - at::add_special_pool_option(options, "group"); - at::add_group_option(options, at::ARGUMENT_MODIFIER_NONE); - - positional->add_options() - (at::IMAGE_SPEC.c_str(), - "image specification\n" - "(example: [/])"); - - at::add_special_pool_option(options, "image"); - at::add_image_option(options, at::ARGUMENT_MODIFIER_NONE); - - at::add_pool_option(options, at::ARGUMENT_MODIFIER_NONE, - " unless overridden"); - at::add_image_id_option(options); -} - -void get_list_images_arguments(po::options_description *positional, - po::options_description *options) { - at::add_format_options(options); - at::add_group_spec_options(positional, options, at::ARGUMENT_MODIFIER_NONE); -} - -Shell::Action action_create( - {"group", "create"}, {}, "Create a consistency group.", - "", &get_create_arguments, &execute_create); -Shell::Action action_remove( - {"group", "remove"}, {"group", "rm"}, "Delete a consistency group.", - "", &get_remove_arguments, &execute_remove); -Shell::Action action_list( - {"group", "list"}, {"group", "ls"}, "List rbd consistency groups.", - "", &get_list_arguments, &execute_list); -Shell::Action action_add( - {"group", "image", "add"}, {}, "Add an image to a consistency group.", - "", &get_add_arguments, &execute_add); -Shell::Action action_remove_image( - {"group", "image", "remove"}, {}, "Remove an image from a consistency group.", - "", &get_remove_image_arguments, &execute_remove_image); -Shell::Action action_list_images( - {"group", "image", "list"}, {}, "List images in a consistency group.", - "", &get_list_images_arguments, &execute_list_images); -} // namespace group -} // namespace action -} // namespace rbd diff --git a/src/tools/rbd/action/Info.cc b/src/tools/rbd/action/Info.cc index d415c9a5859..7944c0cf74a 100644 --- a/src/tools/rbd/action/Info.cc +++ b/src/tools/rbd/action/Info.cc @@ -130,16 +130,6 @@ static int do_show_info(librados::IoCtx &io_ctx, librbd::Image& image, std::string prefix = image.get_block_name_prefix(); - librbd::group_spec_t group_spec; - r = image.get_group(&group_spec); - if (r < 0) { - return r; - } - - std::string group_string = ""; - if (-1 != group_spec.pool) - group_string = stringify(group_spec.pool) + "." + group_spec.name; - struct timespec create_timestamp; image.get_create_timestamp(&create_timestamp); @@ -189,15 +179,6 @@ static int do_show_info(librados::IoCtx &io_ctx, librbd::Image& image, format_flags(f, flags); } - if (!group_string.empty()) { - if (f) { - f->dump_string("group", group_string); - } else { - std::cout << "\tconsistency group: " << group_string - << std::endl; - } - } - if (!create_timestamp_str.empty()) { if (f) { f->dump_string("create_timestamp", create_timestamp_str); diff --git a/src/tools/rbd/action/Remove.cc b/src/tools/rbd/action/Remove.cc index b407534252b..10e601499f7 100644 --- a/src/tools/rbd/action/Remove.cc +++ b/src/tools/rbd/action/Remove.cc @@ -70,23 +70,6 @@ int execute(const po::variables_map &vm) { << "it crashed. Try again after closing/unmapping it or " << "waiting 30s for the crashed client to timeout." << std::endl; - } else if (r == -EMLINK) { - librbd::Image image; - int image_r = utils::open_image(io_ctx, image_name, true, &image); - librbd::group_spec_t group_spec; - if (image_r == 0) { - image_r = image.get_group(&group_spec); - } - if (image_r == 0) - std::cerr << "rbd: error: image belongs to a consistency group " - << group_spec.pool << "." << group_spec.name; - else - std::cerr << "rbd: error: image belongs to a consistency group"; - - std::cerr << std::endl - << "Remove the image from the consistency group and try again." - << std::endl; - image.close(); } else { std::cerr << "rbd: delete error: " << cpp_strerror(r) << std::endl; } diff --git a/src/tracing/librbd.tp b/src/tracing/librbd.tp index 5b8d3966131..7a60e07035a 100644 --- a/src/tracing/librbd.tp +++ b/src/tracing/librbd.tp @@ -2283,72 +2283,6 @@ TRACEPOINT_EVENT(librbd, stat_exit, ) ) -TRACEPOINT_EVENT(librbd, group_create_enter, - TP_ARGS( - const char*, pool_name, - int64_t, id, - const char*, groupname), - TP_FIELDS( - ctf_string(pool_name, pool_name) - ctf_integer(int64_t, id, id) - ctf_string(groupname, groupname) - ) -) - -TRACEPOINT_EVENT(librbd, group_create_exit, - TP_ARGS( - int, retval), - TP_FIELDS( - ctf_integer(int, retval, retval) - ) -) - -TRACEPOINT_EVENT(librbd, group_remove_enter, - TP_ARGS( - const char*, pool_name, - int64_t, id, - const char*, groupname), - TP_FIELDS( - ctf_string(pool_name, pool_name) - ctf_integer(int64_t, id, id) - ctf_string(groupname, groupname) - ) -) - -TRACEPOINT_EVENT(librbd, group_remove_exit, - TP_ARGS( - int, retval), - TP_FIELDS( - ctf_integer(int, retval, retval) - ) -) - -TRACEPOINT_EVENT(librbd, group_list_enter, - TP_ARGS( - const char*, pool_name, - int64_t, id), - TP_FIELDS( - ctf_string(pool_name, pool_name) - ctf_integer(int64_t, id, id) - ) -) - -TRACEPOINT_EVENT(librbd, group_list_entry, - TP_ARGS( - const char*, name), - TP_FIELDS( - ctf_string(name, name) - ) -) - -TRACEPOINT_EVENT(librbd, group_list_exit, - TP_ARGS( - int, retval), - TP_FIELDS( - ctf_integer(int, retval, retval) - ) -) - TRACEPOINT_EVENT(librbd, update_watch_enter, TP_ARGS( void*, imagectx, @@ -2386,117 +2320,3 @@ TRACEPOINT_EVENT(librbd, update_unwatch_exit, ctf_integer(int, retval, retval) ) ) - -TRACEPOINT_EVENT(librbd, group_image_add_enter, - TP_ARGS( - const char*, pool_name, - int64_t, id, - const char*, group_name, - const char*, image_pool_name, - int64_t, image_id, - const char*, image_name), - 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_id, image_id) - ctf_string(image_name, image_name) - ) -) - -TRACEPOINT_EVENT(librbd, group_image_add_exit, - TP_ARGS( - int, retval), - TP_FIELDS( - ctf_integer(int, retval, retval) - ) -) - -TRACEPOINT_EVENT(librbd, group_image_remove_enter, - TP_ARGS( - const char*, pool_name, - int64_t, id, - const char*, group_name, - const char*, image_pool_name, - int64_t, image_id, - const char*, image_name), - 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_id, image_id) - ctf_string(image_name, image_name) - ) -) - -TRACEPOINT_EVENT(librbd, group_image_remove_exit, - TP_ARGS( - int, retval), - TP_FIELDS( - ctf_integer(int, retval, retval) - ) -) - -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, - int64_t, id, - const char*, group_name), - TP_FIELDS( - ctf_string(pool_name, pool_name) - ctf_integer(int64_t, id, id) - ctf_string(group_name, group_name) - ) -) - -TRACEPOINT_EVENT(librbd, group_image_list_exit, - TP_ARGS( - int, retval), - TP_FIELDS( - ctf_integer(int, retval, retval) - ) -) - -TRACEPOINT_EVENT(librbd, image_get_group_enter, - TP_ARGS( - const char*, image_name), - TP_FIELDS( - ctf_string(image_name, image_name) - ) -) - -TRACEPOINT_EVENT(librbd, image_get_group_exit, - TP_ARGS( - int, retval), - TP_FIELDS( - ctf_integer(int, retval, retval) - ) -)