]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
librbd: added missing C API version for rbd_snap_get_group_namespace
authorJason Dillaman <dillaman@redhat.com>
Thu, 11 Jan 2018 01:56:33 +0000 (20:56 -0500)
committerJason Dillaman <dillaman@redhat.com>
Thu, 11 Jan 2018 15:38:23 +0000 (10:38 -0500)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/include/rbd/librbd.h
src/include/rbd/librbd.hpp
src/librbd/api/Snapshot.cc
src/librbd/api/Snapshot.h
src/librbd/librbd.cc
src/tools/rbd/action/Snap.cc
src/tracing/librbd.tp

index e178002badacb0bb2fba7de23a61c82ede6ce4a7..59f61383d80e1692c89bada3f01cd57365104645 100644 (file)
@@ -185,6 +185,12 @@ typedef enum {
   SNAP_NAMESPACE_TYPE_UNKNOWN = -1,
 } rbd_snap_namespace_type_t;
 
+typedef struct {
+  int64_t group_pool;
+  char *group_name;
+  char *group_snap_name;
+} rbd_snap_group_namespace_t;
+
 typedef enum {
   RBD_LOCK_MODE_EXCLUSIVE = 0,
   RBD_LOCK_MODE_SHARED = 1,
@@ -542,6 +548,13 @@ CEPH_RBD_API int rbd_snap_set(rbd_image_t image, const char *snapname);
 CEPH_RBD_API int rbd_snap_get_namespace_type(rbd_image_t image,
                                             uint64_t snap_id,
                                             rbd_snap_namespace_type_t *namespace_type);
+CEPH_RBD_API int rbd_snap_get_namespace_type(rbd_image_t image,
+                                            uint64_t snap_id,
+                                            rbd_snap_namespace_type_t *namespace_type);
+CEPH_RBD_API int rbd_snap_get_group_namespace(rbd_image_t image,
+                                              uint64_t snap_id,
+                                              rbd_snap_group_namespace_t *group_snap);
+CEPH_RBD_API void rbd_snap_group_namespace_cleanup(rbd_snap_group_namespace_t *group_snap);
 
 CEPH_RBD_API int rbd_flatten(rbd_image_t image);
 
@@ -952,9 +965,6 @@ CEPH_RBD_API int rbd_group_snap_list(rados_ioctx_t group_p,
                                      size_t *snaps_size);
 CEPH_RBD_API void rbd_group_snap_list_cleanup(rbd_group_snap_spec_t *snaps,
                                               size_t len);
-CEPH_RBD_API int rbd_snap_get_namespace_type(rbd_image_t image,
-                                            uint64_t snap_id,
-                                            rbd_snap_namespace_type_t *namespace_type);
 
 #ifdef __cplusplus
 }
index b814a23e980d757beec7d99c61346b1c5f7992a4..a25cba05c00f7fd27b82d6ac05b9ccae5297692f 100644 (file)
@@ -34,20 +34,20 @@ namespace librbd {
   typedef void *completion_t;
   typedef void (*callback_t)(completion_t cb, void *arg);
 
-  typedef struct {
-    int64_t group_pool;
-    std::string group_name;
-    std::string group_snap_name;
-  } group_snap_t;
-
-  typedef rbd_snap_namespace_type_t snap_namespace_type_t;
-
   typedef struct {
     uint64_t id;
     uint64_t size;
     std::string name;
   } snap_info_t;
 
+  typedef rbd_snap_namespace_type_t snap_namespace_type_t;
+
+  typedef struct {
+    int64_t group_pool;
+    std::string group_name;
+    std::string group_snap_name;
+  } snap_group_namespace_t;
+
   typedef struct {
     std::string client;
     std::string cookie;
@@ -380,7 +380,8 @@ public:
   int snap_get_timestamp(uint64_t snap_id, struct timespec *timestamp);
   int snap_get_namespace_type(uint64_t snap_id,
                               snap_namespace_type_t *namespace_type);
-  int snap_get_group(uint64_t snap_id, group_snap_t *group_snap);
+  int snap_get_group_namespace(uint64_t snap_id,
+                               snap_group_namespace_t *group_namespace);
 
   /* I/O */
   ssize_t read(uint64_t ofs, size_t len, ceph::bufferlist& bl);
index aebb8d6958341e16dd171b4084508e42ca0fa8d0..b29a5f74d92f301381d2374c2fa854c5242f9729 100644 (file)
@@ -21,10 +21,11 @@ class GetGroupVisitor : public boost::static_visitor<int> {
 public:
   CephContext* cct;
   librados::IoCtx *image_ioctx;
-  group_snap_t group_snap;
+  snap_group_namespace_t *group_snap;
 
-  explicit GetGroupVisitor(CephContext* cct, librados::IoCtx *_image_ioctx)
-    : cct(cct), image_ioctx(_image_ioctx) {};
+  explicit GetGroupVisitor(CephContext* cct, librados::IoCtx *_image_ioctx,
+                           snap_group_namespace_t *group_snap)
+    : cct(cct), image_ioctx(_image_ioctx), group_snap(group_snap) {};
 
   template <typename T>
   inline int operator()(const T&) const {
@@ -64,9 +65,9 @@ public:
       return r;
     }
 
-    group_snap.group_pool = group_ioctx.get_id();
-    group_snap.group_name = group_name;
-    group_snap.group_snap_name = group_snapshot.name;
+    group_snap->group_pool = group_ioctx.get_id();
+    group_snap->group_name = group_name;
+    group_snap->group_snap_name = group_snapshot.name;
     return 0;
   }
 };
@@ -74,19 +75,19 @@ public:
 } // anonymous namespace
 
 template <typename I>
-int Snapshot<I>::get_group(I *ictx, uint64_t snap_id,
-                           group_snap_t *group_snap) {
+int Snapshot<I>::get_group_namespace(I *ictx, uint64_t snap_id,
+                                     snap_group_namespace_t *group_snap) {
   const SnapInfo *snap_info;
   {
     RWLock::RLocker snap_locker(ictx->snap_lock);
     snap_info = ictx->get_snap_info(snap_id);
     if (snap_info) {
-      GetGroupVisitor ggv = GetGroupVisitor(ictx->cct, &ictx->data_ctx);
+      GetGroupVisitor ggv = GetGroupVisitor(ictx->cct, &ictx->data_ctx,
+                                            group_snap);
       int r = boost::apply_visitor(ggv, snap_info->snap_namespace);
       if (r < 0) {
        return r;
       }
-      *group_snap = ggv.group_snap;
     }
   }
   return 0;
index 83b1b3066595c8222d96b4ec1ec5e926090528bf..6629b6973d27eb33c6f2327b9ac02e284b3658cc 100644 (file)
@@ -15,8 +15,8 @@ namespace api {
 template <typename ImageCtxT = librbd::ImageCtx>
 struct Snapshot {
 
-  static int get_group(ImageCtxT *ictx, uint64_t snap_id,
-                      group_snap_t *group_snap);
+  static int get_group_namespace(ImageCtxT *ictx, uint64_t snap_id,
+                                 snap_group_namespace_t *group_snap);
 
   static int get_namespace_type(ImageCtxT *ictx, uint64_t snap_id,
                                snap_namespace_type_t *namespace_type);
index 0097639fd5d5053d13ce10eced4a2b7cbaa6cdb0..f87763caa5da195695ca696fc64119080d00317d 100644 (file)
@@ -1570,12 +1570,14 @@ namespace librbd {
     return r;
   }
 
-  int Image::snap_get_group(uint64_t snap_id,
-                           group_snap_t *group_snap) {
+  int Image::snap_get_group_namespace(uint64_t snap_id,
+                                     snap_group_namespace_t *group_snap) {
     ImageCtx *ictx = (ImageCtx *)ctx;
-    tracepoint(librbd, snap_get_group_enter, ictx, ictx->name.c_str());
-    int r = librbd::api::Snapshot<>::get_group(ictx, snap_id, group_snap);
-    tracepoint(librbd, snap_get_group_exit, r);
+    tracepoint(librbd, snap_get_group_namespace_enter, ictx,
+               ictx->name.c_str());
+    int r = librbd::api::Snapshot<>::get_group_namespace(ictx, snap_id,
+                                                         group_snap);
+    tracepoint(librbd, snap_get_group_namespace_exit, r);
     return r;
   }
 
@@ -4617,6 +4619,7 @@ extern "C" int rbd_group_snap_list(rados_ioctx_t group_p, const char *group_name
   int r = librbd::api::Group<>::snap_list(group_ioctx, group_name, &cpp_snaps);
 
   if (r == -ENOENT) {
+    *snaps_size = 0;
     tracepoint(librbd, group_snap_list_exit, 0);
     return 0;
   }
@@ -4642,7 +4645,7 @@ extern "C" int rbd_group_snap_list(rados_ioctx_t group_p, const char *group_name
 }
 
 extern "C" void rbd_group_snap_list_cleanup(rbd_group_snap_spec_t *snaps,
-                                                size_t len) {
+                                            size_t len) {
   for (size_t i = 0; i < len; ++i) {
     free(snaps[i].name);
   }
@@ -4659,6 +4662,31 @@ extern "C" int rbd_snap_get_namespace_type(rbd_image_t image,
   return r;
 }
 
+extern "C" int rbd_snap_get_group_namespace(rbd_image_t image, uint64_t snap_id,
+                                            rbd_snap_group_namespace_t *group_snap) {
+  librbd::ImageCtx *ictx = (librbd::ImageCtx *)image;
+  tracepoint(librbd, snap_get_group_namespace_enter, ictx,
+             ictx->name.c_str());
+
+  librbd::snap_group_namespace_t group_namespace;
+  int r = librbd::api::Snapshot<>::get_group_namespace(ictx, snap_id,
+                                                       &group_namespace);
+  if (r >= 0) {
+    group_snap->group_pool = group_namespace.group_pool;
+    group_snap->group_name = strdup(group_namespace.group_name.c_str());
+    group_snap->group_snap_name =
+      strdup(group_namespace.group_snap_name.c_str());
+  }
+
+  tracepoint(librbd, snap_get_group_namespace_exit, r);
+  return r;
+}
+
+extern "C" void rbd_snap_group_namespace_cleanup(rbd_snap_group_namespace_t *group_snap) {
+  free(group_snap->group_name);
+  free(group_snap->group_snap_name);
+}
+
 extern "C" int rbd_watchers_list(rbd_image_t image,
                                 rbd_image_watcher_t *watchers,
                                 size_t *max_watchers) {
index 06e2d01c1af57ee26549a9655d0ce2e399bc8f85..4cb756d1d0a89140a0876c4ca07d9ac15640c046 100644 (file)
@@ -74,10 +74,10 @@ int do_list_snaps(librbd::Image& image, Formatter *f, bool all_snaps, librados::
     if(timestamp.tv_sec != 0) {
       time_t tt = timestamp.tv_sec;
       tt_str = ctime(&tt);
-      tt_str = tt_str.substr(0, tt_str.length() - 1);  
+      tt_str = tt_str.substr(0, tt_str.length() - 1);
     }
-    librbd::group_snap_t group_snap;
-    int get_group_res = image.snap_get_group(s->id, &group_snap);
+    librbd::snap_group_namespace_t group_snap;
+    int get_group_res = image.snap_get_group_namespace(s->id, &group_snap);
 
     if (f) {
       f->open_object_section("snapshot");
index 5413f324bd6b16406063c42d1fb88c4467b1916d..0935b7c2b5df7825145e5972be1fff20af74e3c1 100644 (file)
@@ -2435,7 +2435,7 @@ TRACEPOINT_EVENT(librbd, snap_get_namespace_type_exit,
     )
 )
 
-TRACEPOINT_EVENT(librbd, snap_get_group_enter,
+TRACEPOINT_EVENT(librbd, snap_get_group_namespace_enter,
     TP_ARGS(
         void*, imagectx,
         const char*, name),
@@ -2445,7 +2445,7 @@ TRACEPOINT_EVENT(librbd, snap_get_group_enter,
     )
 )
 
-TRACEPOINT_EVENT(librbd, snap_get_group_exit,
+TRACEPOINT_EVENT(librbd, snap_get_group_namespace_exit,
     TP_ARGS(
         int, retval),
        TP_FIELDS(