]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: update C interface and tests
authorJosh Durgin <josh.durgin@dreamhost.com>
Wed, 26 Jan 2011 23:15:07 +0000 (15:15 -0800)
committerYehuda Sadeh <yehuda.sadeh@dreamhost.com>
Mon, 7 Feb 2011 22:41:57 +0000 (14:41 -0800)
src/include/librbd.h
src/librbd.cc
src/testlibrbd.c

index d97d1bc88d9aac590b36da2a9becfb910167414b..71e254357b0079a66e1213952cdff4c190616ec0 100644 (file)
@@ -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
index 456c04b9c09efc12f2c4ae250be3543e059215a2..cdbb7c747ec25da3499fe7a856c0e09ddc5a73e3 100644 (file)
@@ -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<string> 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<librbd::snap_info_t> 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
index 59b35d989d1f5bee009a6a817d76b4708a0ffe59..53d7f851b6f7d703c265dce092e3b8484445a8a5 100644 (file)
 #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;
 }