mirror of
https://github.com/ceph/ceph
synced 2025-03-11 02:39:05 +00:00
test / librbd: create_image_full_pp() / clone_image_pp() helpers
Signed-off-by: Venky Shankar <vshankar@redhat.com>
This commit is contained in:
parent
f903f2f3fd
commit
164fffaf86
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user