From 691d23fb6028c0cc190e04a8089ee44f2da25b7b Mon Sep 17 00:00:00 2001 From: Josh Durgin Date: Wed, 26 Jan 2011 15:15:07 -0800 Subject: [PATCH] librbd: update C interface and tests --- src/include/librbd.h | 23 ++++++++------ src/librbd.cc | 47 +++++++++++++++++---------- src/testlibrbd.c | 75 +++++++++++++++++++++++--------------------- 3 files changed, 84 insertions(+), 61 deletions(-) diff --git a/src/include/librbd.h b/src/include/librbd.h index d97d1bc88d9a..71e254357b00 100644 --- a/src/include/librbd.h +++ b/src/include/librbd.h @@ -34,6 +34,7 @@ extern "C" { #define LIBRBD_SUPPORTS_WATCH 0 typedef void *rbd_snap_t; +typedef void *rbd_pool_t; typedef struct { uint64_t id; @@ -54,21 +55,25 @@ void rbd_shutdown(); void librbd_version(int *major, int *minor, int *extra); +/* pools */ +int rbd_open_pool(const char *pool_name, rbd_pool_t *pool); +int rbd_close_pool(rbd_pool_t pool); + /* images */ -int rbd_create_image(const char* pool, const char *name, size_t size); -int rbd_remove_image(const char* pool, const char *name); -int rbd_resize_image(const char* pool, const char *name, size_t size); -int rbd_stat_image(const char* pool, const char *name, rbd_image_info_t *info); -size_t rbd_list_images(const char* pool, char **names, size_t max_names); +int rbd_create(rbd_pool_t pool, const char *name, size_t size); +int rbd_remove(rbd_pool_t pool, const char *name); +int rbd_resize(rbd_pool_t pool, const char *name, size_t size); +int rbd_stat(rbd_pool_t pool, const char *name, rbd_image_info_t *info); +size_t rbd_list(rbd_pool_t pool, char **names, size_t max_names); /* snapshots */ -int rbd_create_snap(const char* pool, const char *image, +int rbd_create_snap(rbd_pool_t pool, const char *image, const char *snapname); -int rbd_remove_snap(const char* pool, const char *image, +int rbd_remove_snap(rbd_pool_t pool, const char *image, const char *snapname); -int rbd_rollback_snap(const char* pool, const char *image, +int rbd_rollback_snap(rbd_pool_t pool, const char *image, const char *snapname); -size_t rbd_list_snaps(const char* pool, const char *image, +size_t rbd_list_snaps(rbd_pool_t pool, const char *image, rbd_snap_info_t *snaps, size_t max_snaps); #ifdef __cplusplus diff --git a/src/librbd.cc b/src/librbd.cc index 456c04b9c09e..cdbb7c747ec2 100644 --- a/src/librbd.cc +++ b/src/librbd.cc @@ -952,7 +952,6 @@ extern "C" void librbd_version(int *major, int *minor, int *extra) *extra = LIBRBD_VER_EXTRA; } -#if 0 // C++ interface first static librbd::RBD rbd; extern "C" int rbd_initialize(int argc, const char **argv) @@ -965,26 +964,42 @@ extern "C" void rbd_shutdown() rbd.shutdown(); } +extern "C" int rbd_open_pool(const char *pool_name, rbd_pool_t *pool) +{ + librbd::pool_t cpp_pool; + int r = rbd.open_pool(pool_name, &cpp_pool); + if (r < 0) + return r; + + *pool = (rbd_pool_t) cpp_pool; + return 0; +} + +extern "C" int rbd_close_pool(rbd_pool_t pool) +{ + return rbd.close_pool((librbd::pool_t) pool); +} + /* images */ -extern "C" int rbd_create_image(const char *pool, const char *name, size_t size) +extern "C" int rbd_create(rbd_pool_t pool, const char *name, size_t size) { - return rbd.create_image(pool, name, size); + return rbd.create(pool, name, size); } -extern "C" int rbd_remove_image(const char *pool, const char *name) +extern "C" int rbd_remove(rbd_pool_t pool, const char *name) { - return rbd.remove_image(pool, name); + return rbd.remove(pool, name); } -extern "C" int rbd_resize_image(const char *pool, const char *name, size_t size) +extern "C" int rbd_resize(rbd_pool_t pool, const char *name, size_t size) { - return rbd.resize_image(pool, name, size); + return rbd.resize(pool, name, size); } -extern "C" int rbd_stat_image(const char *pool, const char *name, rbd_image_info_t *info) +extern "C" int rbd_stat(rbd_pool_t pool, const char *name, rbd_image_info_t *info) { librbd::image_info_t cpp_info; - int r = rbd.stat_image(pool, name, cpp_info); + int r = rbd.stat(pool, name, cpp_info); if (r < 0) return r; @@ -995,10 +1010,11 @@ extern "C" int rbd_stat_image(const char *pool, const char *name, rbd_image_info return 0; } -extern "C" size_t rbd_list_images(const char *pool, char **names, size_t max_names) +extern "C" size_t rbd_list(rbd_pool_t pool, char **names, size_t max_names) { std::vector cpp_names; - int r = rbd.list_images(pool, cpp_names); + librbd::pool_t cpp_pool = (librbd::pool_t) pool; + int r = rbd.list(cpp_pool, cpp_names); if (r == -ENOENT) return 0; if (r < 0) @@ -1015,22 +1031,22 @@ extern "C" size_t rbd_list_images(const char *pool, char **names, size_t max_nam } /* snapshots */ -extern "C" int rbd_create_snap(const char *pool, const char *image, const char *snap_name) +extern "C" int rbd_create_snap(rbd_pool_t pool, const char *image, const char *snap_name) { return rbd.create_snap(pool, image, snap_name); } -extern "C" int rbd_remove_snap(const char *pool, const char *image, const char *snap_name) +extern "C" int rbd_remove_snap(rbd_pool_t pool, const char *image, const char *snap_name) { return rbd.remove_snap(pool, image, snap_name); } -extern "C" int rbd_rollback_snap(const char *pool, const char *image, const char *snap_name) +extern "C" int rbd_rollback_snap(rbd_pool_t pool, const char *image, const char *snap_name) { return rbd.rollback_snap(pool, image, snap_name); } -extern "C" size_t rbd_list_snaps(const char *pool, const char *image, rbd_snap_info_t *snaps, size_t max_snaps) +extern "C" size_t rbd_list_snaps(rbd_pool_t pool, const char *image, rbd_snap_info_t *snaps, size_t max_snaps) { std::vector cpp_snaps; int r = rbd.list_snaps(pool, image, cpp_snaps); @@ -1050,4 +1066,3 @@ extern "C" size_t rbd_list_snaps(const char *pool, const char *image, rbd_snap_i } return cpp_snaps.size(); } -#endif diff --git a/src/testlibrbd.c b/src/testlibrbd.c index 59b35d989d1f..53d7f851b6f7 100644 --- a/src/testlibrbd.c +++ b/src/testlibrbd.c @@ -29,32 +29,32 @@ #define TEST_SNAP "testsnap" #define MB_BYTES(mb) (mb << 20) -void test_create_and_stat(const char *name, size_t size) +void test_create_and_stat(rbd_pool_t pool, const char *name, size_t size) { rbd_image_info_t info; - assert(rbd_create_image(TEST_POOL, name, size) == 0); - assert(rbd_stat_image(TEST_POOL, name, &info) == 0); + assert(rbd_create(pool, name, size) == 0); + assert(rbd_stat(pool, name, &info) == 0); printf("image has size %llu and order %d\n", (unsigned long long) info.size, info.order); assert(info.size == size); } -void test_resize_and_stat(const char *name, size_t size) +void test_resize_and_stat(rbd_pool_t pool, const char *name, size_t size) { rbd_image_info_t info; - assert(rbd_resize_image(TEST_POOL, name, size) == 0); - assert(rbd_stat_image(TEST_POOL, name, &info) == 0); + assert(rbd_resize(pool, name, size) == 0); + assert(rbd_stat(pool, name, &info) == 0); printf("image has size %llu and order %d\n", (unsigned long long) info.size, info.order); assert(info.size == size); } -void test_ls(int num_expected, ...) +void test_ls(rbd_pool_t pool, int num_expected, ...) { char **names; int num_images, i, j; char *expected; va_list ap; names = (char **) malloc(sizeof(char **) * 10); - num_images = rbd_list_images(TEST_POOL, names, 10); + num_images = rbd_list(pool, names, 10); printf("num images is: %d\nexpected: %d\n", num_images, num_expected); assert(num_images == num_expected); @@ -87,24 +87,24 @@ void test_ls(int num_expected, ...) free(names); } -void test_delete(const char *name) +void test_delete(rbd_pool_t pool, const char *name) { - assert(rbd_remove_image(TEST_POOL, name) == 0); + assert(rbd_remove(pool, name) == 0); } -void test_create_snap(const char *image, const char *name) +void test_create_snap(rbd_pool_t pool, const char *image, const char *name) { - assert(rbd_create_snap(TEST_POOL, image, name) == 0); + assert(rbd_create_snap(pool, image, name) == 0); } -void test_ls_snaps(char *image, int num_expected, ...) +void test_ls_snaps(rbd_pool_t pool, char *image, int num_expected, ...) { rbd_snap_info_t *snaps; int num_snaps, i, j, expected_size; char *expected; va_list ap; snaps = (rbd_snap_info_t *) malloc(sizeof(rbd_snap_info_t *) * 10); - num_snaps = rbd_list_snaps(TEST_POOL, image, snaps, 10); + num_snaps = rbd_list_snaps(pool, image, snaps, 10); printf("num snaps is: %d\nexpected: %d\n", num_snaps, num_expected); assert(num_snaps == num_expected); @@ -138,33 +138,36 @@ void test_ls_snaps(char *image, int num_expected, ...) free(snaps); } -void test_delete_snap(const char *image, const char *name) +void test_delete_snap(rbd_pool_t pool, const char *image, const char *name) { - assert(rbd_remove_snap(TEST_POOL, image, name) == 0); + assert(rbd_remove_snap(pool, image, name) == 0); } int main(int argc, const char **argv) { - rbd_initialize(0, NULL); - test_ls(0); - test_create_and_stat(TEST_IMAGE, MB_BYTES(1)); - test_ls(1, TEST_IMAGE); - test_ls_snaps(TEST_IMAGE, 0); - test_create_snap(TEST_IMAGE, TEST_SNAP); - test_ls_snaps(TEST_IMAGE, 1, TEST_SNAP, MB_BYTES(1)); - test_resize_and_stat(TEST_IMAGE, MB_BYTES(2)); - test_create_snap(TEST_IMAGE, TEST_SNAP "1"); - test_ls_snaps(TEST_IMAGE, 2, TEST_SNAP, MB_BYTES(1), TEST_SNAP "1", MB_BYTES(2)); - test_delete_snap(TEST_IMAGE, TEST_SNAP); - test_ls_snaps(TEST_IMAGE, 1, TEST_SNAP "1", MB_BYTES(2)); - test_delete_snap(TEST_IMAGE, TEST_SNAP "1"); - test_ls_snaps(TEST_IMAGE, 0); - test_create_and_stat(TEST_IMAGE "1", MB_BYTES(2)); - test_ls(2, TEST_IMAGE, TEST_IMAGE "1"); - test_delete(TEST_IMAGE); - test_ls(1, TEST_IMAGE "1"); - test_delete(TEST_IMAGE "1"); - test_ls(0); + rbd_pool_t pool; + assert(rbd_initialize(0, NULL) == 0); + assert(rbd_open_pool(TEST_POOL, &pool) == 0); + test_ls(pool, 0); + test_create_and_stat(pool, TEST_IMAGE, MB_BYTES(1)); + test_ls(pool, 1, TEST_IMAGE); + test_ls_snaps(pool, TEST_IMAGE, 0); + test_create_snap(pool, TEST_IMAGE, TEST_SNAP); + test_ls_snaps(pool, TEST_IMAGE, 1, TEST_SNAP, MB_BYTES(1)); + test_resize_and_stat(pool, TEST_IMAGE, MB_BYTES(2)); + test_create_snap(pool, TEST_IMAGE, TEST_SNAP "1"); + test_ls_snaps(pool, TEST_IMAGE, 2, TEST_SNAP, MB_BYTES(1), TEST_SNAP "1", MB_BYTES(2)); + test_delete_snap(pool, TEST_IMAGE, TEST_SNAP); + test_ls_snaps(pool, TEST_IMAGE, 1, TEST_SNAP "1", MB_BYTES(2)); + test_delete_snap(pool, TEST_IMAGE, TEST_SNAP "1"); + test_ls_snaps(pool, TEST_IMAGE, 0); + test_create_and_stat(pool, TEST_IMAGE "1", MB_BYTES(2)); + test_ls(pool, 2, TEST_IMAGE, TEST_IMAGE "1"); + test_delete(pool, TEST_IMAGE); + test_ls(pool, 1, TEST_IMAGE "1"); + test_delete(pool, TEST_IMAGE "1"); + test_ls(pool, 0); + rbd_close_pool(pool); rbd_shutdown(); return 0; } -- 2.47.3