]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: remove consistency group rbd cli and API support 16875/head
authorJason Dillaman <dillaman@redhat.com>
Tue, 13 Dec 2016 20:58:42 +0000 (15:58 -0500)
committerJason Dillaman <dillaman@redhat.com>
Mon, 7 Aug 2017 17:57:50 +0000 (13:57 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
15 files changed:
src/include/rbd/librbd.h
src/include/rbd/librbd.hpp
src/librbd/CMakeLists.txt
src/librbd/api/Group.cc [deleted file]
src/librbd/api/Group.h [deleted file]
src/librbd/librbd.cc
src/test/cli/rbd/help.t
src/test/librbd/CMakeLists.txt
src/test/librbd/test_Groups.cc [deleted file]
src/test/librbd/test_main.cc
src/tools/rbd/CMakeLists.txt
src/tools/rbd/action/Group.cc [deleted file]
src/tools/rbd/action/Info.cc
src/tools/rbd/action/Remove.cc
src/tracing/librbd.tp

index af782e6e457f7348e2180e424f2e8944204cc686..f266c76fcab2d9095c8d20853d567b3cf5b89a71 100644 (file)
@@ -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
index bbf4270bc245d7b13bd1eb4a5700acc3eccf7054..7220514e05cf0e521ae1273138a11fd0545afe52 100644 (file)
@@ -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<mirror_image_status_state_t, int> *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<std::string> *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<group_image_status_t> *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);
index e596bd5f499721c83196e55f19ccd28daa93e4f1..1b04ec91ab81f5b0051f99cb28d2cec0b11a3d77 100644 (file)
@@ -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 (file)
index 090a980..0000000
+++ /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 <typename I>
-int Group<I>::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 <typename I>
-int Group<I>::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<group_image_status_t> 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 <typename I>
-int Group<I>::list(IoCtx& io_ctx, vector<string> *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<string, string> 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<string, string> 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 <typename I>
-int Group<I>::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 <typename I>
-int Group<I>::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<I>::image_remove_by_id(group_ioctx, group_name, image_ioctx,
-                                      image_id.c_str());
-}
-
-template <typename I>
-int Group<I>::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 <typename I>
-int Group<I>::image_list(librados::IoCtx& group_ioctx,
-                    const char *group_name,
-                    std::vector<group_image_status_t> *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<cls::rbd::GroupImageStatus> image_ids;
-
-  const int max_read = 1024;
-  do {
-    std::vector<cls::rbd::GroupImageStatus> 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<group_image_state_t>(i.state)});
-  }
-
-  return 0;
-}
-
-template <typename I>
-int Group<I>::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<librbd::ImageCtx>;
diff --git a/src/librbd/api/Group.h b/src/librbd/api/Group.h
deleted file mode 100644 (file)
index bcc772f..0000000
+++ /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 <string>
-#include <vector>
-
-namespace librados { struct IoCtx; }
-
-namespace librbd {
-
-struct ImageCtx;
-
-namespace api {
-
-template <typename ImageCtxT = librbd::ImageCtx>
-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<std::string> *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<group_image_status_t> *images);
-
-  static int image_get_group(ImageCtxT *ictx, group_spec_t *group_spec);
-
-};
-
-} // namespace api
-} // namespace librbd
-
-extern template class librbd::api::Group<librbd::ImageCtx>;
-
-#endif // CEPH_LIBRBD_API_GROUP_H
index 999ac25233aa01fd001656ce3bea39d1569827e7..31889b822a6d9e3622a2004c833e3641f5ea98d3 100644 (file)
@@ -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<tracepoint_traits>(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<tracepoint_traits>(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<string> *names)
-  {
-    TracepointProvider::initialize<tracepoint_traits>(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<tracepoint_traits>(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<tracepoint_traits>(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<tracepoint_traits>(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<group_image_status_t> *images)
-  {
-    TracepointProvider::initialize<tracepoint_traits>(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<void*>(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<tracepoint_traits>(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<tracepoint_traits>(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<tracepoint_traits>(get_cct(io_ctx));
-  tracepoint(librbd, group_list_enter, io_ctx.get_pool_name().c_str(),
-             io_ctx.get_id());
-
-  vector<string> 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<tracepoint_traits>(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<tracepoint_traits>(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<tracepoint_traits>(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<tracepoint_traits>(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<librbd::group_image_status_t> 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]);
-  }
-}
index 7c38ae6025505964dcf163d31365448033dd5183..a3b1fd951ea42c9348a320ed2c1161fd34413ceb 100644 (file)
       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.
     --image arg          image name
     --no-progress        disable progress output
   
-  rbd help group create
-  usage: rbd group create [--pool <pool>] [--group <group>] 
-                          <group-spec> 
-  
-  Create a consistency group.
-  
-  Positional arguments
-    <group-spec>         group specification
-                         (example: [<pool-name>/]<group-name>)
-  
-  Optional arguments
-    -p [ --pool ] arg    pool name
-    --group arg          group name
-  
-  rbd help group image add
-  usage: rbd group image add [--group-pool <group-pool>] [--group <group>] 
-                             [--image-pool <image-pool>] [--image <image>] 
-                             [--pool <pool>] 
-                             <group-spec> <image-spec> 
-  
-  Add an image to a consistency group.
-  
-  Positional arguments
-    <group-spec>         group specification
-                         (example: [<pool-name>/]<group-name>)
-    <image-spec>         image specification
-                         (example: [<pool-name>/]<image-name>)
-  
-  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 <format>] [--pretty-format] 
-                              [--pool <pool>] [--group <group>] 
-                              <group-spec> 
-  
-  List images in a consistency group.
-  
-  Positional arguments
-    <group-spec>         group specification
-                         (example: [<pool-name>/]<group-name>)
-  
-  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-pool>] [--group <group>] 
-                                [--image-pool <image-pool>] [--image <image>] 
-                                [--pool <pool>] [--image-id <image-id>] 
-                                <group-spec> <image-spec> 
-  
-  Remove an image from a consistency group.
-  
-  Positional arguments
-    <group-spec>         group specification
-                         (example: [<pool-name>/]<group-name>)
-    <image-spec>         image specification
-                         (example: [<pool-name>/]<image-name>)
-  
-  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 <pool>] [--format <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 <pool>] [--group <group>] 
-                          <group-spec> 
-  
-  Delete a consistency group.
-  
-  Positional arguments
-    <group-spec>         group specification
-                         (example: [<pool-name>/]<group-name>)
-  
-  Optional arguments
-    -p [ --pool ] arg    pool name
-    --group arg          group name
-  
   rbd help image-meta get
   usage: rbd image-meta get [--pool <pool>] [--image <image>] 
                             <image-spec> <key> 
index a73f2e634bb0ae92bfefb5b51705f05e03c0b4b7..2833d22e68a2629f17a9b8763ee22112773df589 100644 (file)
@@ -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 (file)
index 39f3095..0000000
+++ /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 <boost/assign/std/set.hpp>
-#include <boost/assign/std/map.hpp>
-#include <boost/bind.hpp>
-#include <boost/scope_exit.hpp>
-#include <boost/thread/thread.hpp>
-#include <iostream>
-#include <map>
-#include <set>
-#include <sstream>
-#include <vector>
-
-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<string> 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<librbd::group_image_status_t> 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());
-}
index 0aa6aeeb81c9603ac4d07b1569fa97aa40292007..be6145c4b2b3edfa89e00b903848b460b4308e53 100644 (file)
@@ -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();
index ad4005ebf0aec88c07037d5cbf422f7d5f09ac02..e9b0b171de3385a3b8b97f50862a4ac359f50579 100644 (file)
@@ -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 (file)
index 40ebd4d..0000000
+++ /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 <iostream>
-
-#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<std::string> 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<std::string>();
-  }
-
-  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<librbd::group_image_status_t> 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: [<pool-name>/]<group-name>)");
-
-  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: [<pool-name>/]<image-name>)");
-
-  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: [<pool-name>/]<group-name>)");
-
-  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: [<pool-name>/]<image-name>)");
-
-  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
index d415c9a5859603e7c0e501b301aa626bf5cf7f4e..7944c0cf74ac34d9711f854edd92a9f75fa0230b 100644 (file)
@@ -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);
index b407534252b95d94b69cf428aad89e795cceeb21..10e601499f70ec3f215f1426542eb1a874eb0ab7 100644 (file)
@@ -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;
     }
index 5b8d3966131448848a13f1e7bd661ac46d2be18f..7a60e07035aa1eae81efcfc05adb0830f5003c42 100644 (file)
@@ -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)
-    )
-)