From: Venky Shankar Date: Sun, 5 Mar 2017 06:17:02 +0000 (+0530) Subject: test / librbd: create_image_full_pp() / clone_image_pp() helpers X-Git-Tag: v12.0.1~165^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=164fffaf868099dc6d6c80b24113a1bf22137c3a;p=ceph.git test / librbd: create_image_full_pp() / clone_image_pp() helpers Signed-off-by: Venky Shankar --- diff --git a/src/test/librbd/test_librbd.cc b/src/test/librbd/test_librbd.cc index 3dcf44290e81..46f22decb0d7 100644 --- a/src/test/librbd/test_librbd.cc +++ b/src/test/librbd/test_librbd.cc @@ -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) diff --git a/src/test/librbd/test_support.cc b/src/test/librbd/test_support.cc index ced5dcf1fa99..db16131df05e 100644 --- a/src/test/librbd/test_support.cc +++ b/src/test/librbd/test_support.cc @@ -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); diff --git a/src/test/librbd/test_support.h b/src/test/librbd/test_support.h index 785b5f5c5c2e..16e76a65147d 100644 --- a/src/test/librbd/test_support.h +++ b/src/test/librbd/test_support.h @@ -5,10 +5,19 @@ #include "include/rbd/librbd.hpp" #include +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);