int main(int argc, const char **argv) { rados_t cluster; rados_ioctx_t io_ctx; rbd_image_t image; srand(time(0)); assert(rados_create(&cluster, NULL) == 0); assert(rados_conf_parse_argv(cluster, argc, argv) == 0); assert(rados_conf_read_file(cluster, NULL) == 0); assert(rados_connect(cluster) == 0); if (rados_pool_lookup(cluster, TEST_POOL) != -ENOENT) { int r = rados_pool_delete(cluster, TEST_POOL); printf("rados_pool_delete returned %d\n", r); } int r = rados_pool_create(cluster, TEST_POOL); printf("rados_pool_create returned %d\n", r); assert(rados_ioctx_create(cluster, TEST_POOL, &io_ctx) == 0); test_ls(io_ctx, 0); test_create_and_stat(io_ctx, TEST_IMAGE, MB_BYTES(1)); assert(rbd_open(io_ctx, TEST_IMAGE, &image, NULL) == 0); test_ls(io_ctx, 1, TEST_IMAGE); test_ls_snaps(image, 0); test_create_snap(image, TEST_SNAP); test_ls_snaps(image, 1, TEST_SNAP, MB_BYTES(1)); test_resize_and_stat(image, MB_BYTES(2)); test_io(io_ctx, image); test_create_snap(image, TEST_SNAP "1"); test_ls_snaps(image, 2, TEST_SNAP, MB_BYTES(1), TEST_SNAP "1", MB_BYTES(2)); test_delete_snap(image, TEST_SNAP); test_ls_snaps(image, 1, TEST_SNAP "1", MB_BYTES(2)); test_delete_snap(image, TEST_SNAP "1"); test_ls_snaps(image, 0); test_io_to_snapshot(io_ctx, image, MB_BYTES(2)); assert(rbd_close(image) == 0); test_create_and_stat(io_ctx, TEST_IMAGE "1", MB_BYTES(2)); test_ls(io_ctx, 2, TEST_IMAGE, TEST_IMAGE "1"); test_delete(io_ctx, TEST_IMAGE); test_ls(io_ctx, 1, TEST_IMAGE "1"); test_delete(io_ctx, TEST_IMAGE "1"); test_ls(io_ctx, 0); rados_ioctx_destroy(io_ctx); rados_shutdown(cluster); return 0; }
ERL_NIF_TERM x_pool_lookup(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { uint64_t id; char pool_name[MAX_NAME_LEN]; if (!enif_get_uint64(env, argv[0], &id) || !enif_get_string(env, argv[1], pool_name, MAX_NAME_LEN, ERL_NIF_LATIN1)) { return enif_make_badarg(env); } rados_t cluster = map_cluster_get(id); if (cluster == NULL) { return enif_make_badarg(env); } int64_t err = rados_pool_lookup(cluster, pool_name); if (err < 0) { return make_error_tuple(env, -err); } return enif_make_tuple2(env, enif_make_atom(env, "ok"), enif_make_int64(env, err)); // Pool ID }
static VALUE rb_rados_cluster_pool_lookup(VALUE self, VALUE pool_name) { GET_CLUSTER(self); int64_t id; Check_Type(pool_name, T_STRING); char *cpool_name = StringValuePtr(pool_name); id = rados_pool_lookup(*wrapper->cluster, cpool_name); if (id == -2) { rb_raise(rb_const_get(mRados, rb_intern("PoolNotFound")), "%s", cpool_name); } else if (id < 0) { rb_raise(cRadosError, "error looking up lookup pool '%s': %s", cpool_name, strerror(-id)); } return INT2NUM(id); }