]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test / librbd: create_image_full_pp() / clone_image_pp() helpers
authorVenky Shankar <vshankar@redhat.com>
Sun, 5 Mar 2017 06:17:02 +0000 (11:47 +0530)
committerVenky Shankar <vshankar@redhat.com>
Mon, 6 Mar 2017 11:38:16 +0000 (17:08 +0530)
Signed-off-by: Venky Shankar <vshankar@redhat.com>
src/test/librbd/test_librbd.cc
src/test/librbd/test_support.cc
src/test/librbd/test_support.h

index 3dcf44290e816c31fba89b2c133e85cd19106496..46f22decb0d77e54062d095a3e1bd08e48fb1afb 100644 (file)
@@ -93,9 +93,6 @@ static int get_features(bool *old_format, uint64_t *features)
   return 0;
 }
 
-static const uint64_t IMAGE_STRIPE_UNIT = 65536;
-static const uint64_t IMAGE_STRIPE_COUNT = 16;
-
 static int create_image_full(rados_ioctx_t ioctx, const char *name,
                              uint64_t size, int *order, int old_format,
                              uint64_t features)
index ced5dcf1fa997163be2a3dc7b499169b6c6527c1..db16131df05e9218cdfa2076d7a1f9ef9915e19c 100644 (file)
@@ -22,6 +22,33 @@ bool is_feature_enabled(uint64_t feature) {
   return (get_features(&features) && (features & feature) == feature);
 }
 
+int create_image_full_pp(librbd::RBD &rbd, librados::IoCtx &ioctx,
+                         const std::string &name, uint64_t size,
+                         uint64_t features, bool old_format, int *order)
+{
+  if (old_format) {
+    librados::Rados rados(ioctx);
+    int r = rados.conf_set("rbd_default_format", "1");
+    if (r < 0) {
+      return r;
+    }
+    return rbd.create(ioctx, name.c_str(), size, order);
+  } else if ((features & RBD_FEATURE_STRIPINGV2) != 0) {
+    uint64_t stripe_unit = IMAGE_STRIPE_UNIT;
+    if (*order) {
+      // use a conservative stripe_unit for non default order
+      stripe_unit = (1ull << (*order-1));
+    }
+
+    printf("creating image with stripe unit: %ld, stripe count: %ld\n",
+           stripe_unit, IMAGE_STRIPE_COUNT);
+    return rbd.create3(ioctx, name.c_str(), size, features, order, stripe_unit,
+                       IMAGE_STRIPE_COUNT);
+  } else {
+    return rbd.create2(ioctx, name.c_str(), size, features, order);
+  }
+}
+
 int create_image_pp(librbd::RBD &rbd, librados::IoCtx &ioctx,
                     const std::string &name, uint64_t size) {
   int order = 0;
@@ -39,6 +66,24 @@ int create_image_pp(librbd::RBD &rbd, librados::IoCtx &ioctx,
   }
 }
 
+int clone_image_pp(librbd::RBD &rbd, librbd::Image &p_image, librados::IoCtx &p_ioctx,
+                   const char *p_name, const char *p_snap_name, librados::IoCtx &c_ioctx,
+                   const char *c_name, uint64_t features)
+{
+  uint64_t stripe_unit = p_image.get_stripe_unit();
+  uint64_t stripe_count = p_image.get_stripe_count();
+
+  librbd::image_info_t p_info;
+  int r = p_image.stat(p_info, sizeof(p_info));
+  if (r < 0) {
+    return r;
+  }
+
+  int c_order = p_info.order;
+  return rbd.clone2(p_ioctx, p_name, p_snap_name, c_ioctx, c_name,
+                    features, &c_order, stripe_unit, stripe_count);
+}
+
 int get_image_id(librbd::Image &image, std::string *image_id)
 {
   int r = image.get_id(image_id);
index 785b5f5c5c2ec7d16d70735e4951943a92d0e6e7..16e76a65147d7466d258a7d088b7eb9979d0252a 100644 (file)
@@ -5,10 +5,19 @@
 #include "include/rbd/librbd.hpp"
 #include <string>
 
+static const uint64_t IMAGE_STRIPE_UNIT = 65536;
+static const uint64_t IMAGE_STRIPE_COUNT = 16;
+
 bool get_features(uint64_t *features);
 bool is_feature_enabled(uint64_t feature);
 int create_image_pp(librbd::RBD &rbd, librados::IoCtx &ioctx,
                     const std::string &name, uint64_t size);
+int create_image_full_pp(librbd::RBD &rbd, librados::IoCtx &ioctx,
+                         const std::string &name, uint64_t size,
+                         uint64_t features, bool old_format, int *order);
+int clone_image_pp(librbd::RBD &rbd, librbd::Image &p_image, librados::IoCtx &p_ioctx,
+                   const char *p_name, const char *p_snap_name, librados::IoCtx &c_ioctx,
+                   const char *c_name, uint64_t features);
 int get_image_id(librbd::Image &image, std::string *image_id);
 int create_image_data_pool(librados::Rados &rados, std::string &data_pool, bool *created);