return 0;
}
-static int do_show_info(const char *imgname, librbd::Image *image)
+static int do_show_info(const char *imgname, librbd::Image& image)
{
librbd::image_info_t info;
- int r = image->stat(info, sizeof(info));
+ int r = image.stat(info, sizeof(info));
if (r < 0)
return r;
return 0;
}
-static int do_resize(librbd::Image *image, size_t size)
+static int do_resize(librbd::Image& image, size_t size)
{
- int r = image->resize(size);
+ int r = image.resize(size);
if (r < 0)
return r;
return 0;
}
-static int do_list_snaps(librbd::Image *image)
+static int do_list_snaps(librbd::Image& image)
{
std::vector<librbd::snap_info_t> snaps;
- int r = image->snap_list(snaps);
+ int r = image.snap_list(snaps);
if (r < 0)
return r;
return 0;
}
-static int do_add_snap(librbd::Image *image, const char *snapname)
+static int do_add_snap(librbd::Image& image, const char *snapname)
{
- int r = image->snap_create(snapname);
+ int r = image.snap_create(snapname);
if (r < 0)
return r;
return 0;
}
-static int do_remove_snap(librbd::Image *image, const char *snapname)
+static int do_remove_snap(librbd::Image& image, const char *snapname)
{
- int r = image->snap_remove(snapname);
+ int r = image.snap_remove(snapname);
if (r < 0)
return r;
return 0;
}
-static int do_rollback_snap(librbd::Image *image, const char *snapname)
+static int do_rollback_snap(librbd::Image& image, const char *snapname)
{
- int r = image->snap_rollback(snapname);
+ int r = image.snap_rollback(snapname);
if (r < 0)
return r;
return 0;
}
-static int do_export(librbd::Image *image, const char *path)
+static int do_export(librbd::Image& image, const char *path)
{
int r;
librbd::image_info_t info;
if (fd < 0)
return -errno;
- r = image->stat(info, sizeof(info));
+ r = image.stat(info, sizeof(info));
if (r < 0)
return r;
- r = image->read_iterate(0, info.size, export_read_cb, (void *)&fd);
+ r = image.read_iterate(0, info.size, export_read_cb, (void *)&fd);
if (r < 0)
return r;
cerr << "image creation failed" << std::endl;
return r;
}
- librbd::Image *image = NULL;
+ librbd::Image image;
r = rbd.open(io_ctx, image, imgname);
if (r < 0) {
cerr << "failed to open image" << std::endl;
r = -ENOMEM;
goto done;
}
- r = image->aio_write(file_pos, len, bl, completion);
+ r = image.aio_write(file_pos, len, bl, completion);
if (r < 0)
goto done;
completion->wait_for_complete();
librados::Rados rados;
librbd::RBD rbd;
librados::IoCtx io_ctx, dest_io_ctx;
- std::auto_ptr < librbd::Image > image;
+ librbd::Image image;
vector<const char*> args;
DEFINE_CONF_VARS(usage_exit);
(opt_cmd == OPT_RESIZE || opt_cmd == OPT_INFO || opt_cmd == OPT_SNAP_LIST ||
opt_cmd == OPT_SNAP_CREATE || opt_cmd == OPT_SNAP_ROLLBACK ||
opt_cmd == OPT_SNAP_REMOVE || opt_cmd == OPT_EXPORT || opt_cmd == OPT_WATCH)) {
- librbd::Image *image_ptr = NULL;
- r = rbd.open(io_ctx, image_ptr, imgname);
+ r = rbd.open(io_ctx, image, imgname);
if (r < 0) {
cerr << "error opening image " << imgname << ": " << strerror(r) << std::endl;
exit(1);
}
- image.reset(image_ptr);
}
if (snapname) {
- r = image->snap_set(snapname);
+ r = image.snap_set(snapname);
if (r < 0 && !(r == -ENOENT && opt_cmd == OPT_SNAP_CREATE)) {
cerr << "error setting snapshot context: " << strerror(-r) << std::endl;
exit(1);
break;
case OPT_INFO:
- r = do_show_info(imgname, image.get());
+ r = do_show_info(imgname, image);
if (r < 0) {
cerr << "error: " << strerror(-r) << std::endl;
exit(1);
break;
case OPT_RESIZE:
- r = do_resize(image.get(), size);
+ r = do_resize(image, size);
if (r < 0) {
cerr << "resize error: " << strerror(-r) << std::endl;
exit(1);
usage();
exit(1);
}
- r = do_list_snaps(image.get());
+ r = do_list_snaps(image);
if (r < 0) {
cerr << "failed to list snapshots: " << strerror(-r) << std::endl;
exit(1);
usage();
exit(1);
}
- r = do_add_snap(image.get(), snapname);
+ r = do_add_snap(image, snapname);
if (r < 0) {
cerr << "failed to create snapshot: " << strerror(-r) << std::endl;
exit(1);
usage();
exit(1);
}
- r = do_rollback_snap(image.get(), snapname);
+ r = do_rollback_snap(image, snapname);
if (r < 0) {
cerr << "rollback failed: " << strerror(-r) << std::endl;
exit(1);
usage();
exit(1);
}
- r = do_remove_snap(image.get(), snapname);
+ r = do_remove_snap(image, snapname);
if (r < 0) {
cerr << "rollback failed: " << strerror(-r) << std::endl;
exit(1);
cerr << "pathname should be specified" << std::endl;
exit(1);
}
- r = do_export(image.get(), path);
+ r = do_export(image, path);
if (r < 0) {
cerr << "export error: " << strerror(-r) << std::endl;
exit(1);
void test_create_and_stat(librados::IoCtx& io_ctx, const char *name, size_t size)
{
librbd::image_info_t info;
- librbd::Image *image = NULL;
+ librbd::Image image;
int order = 0;
assert(rbd->create(io_ctx, name, size, &order) == 0);
assert(rbd->open(io_ctx, image, name, NULL) == 0);
- assert(image->stat(info, sizeof(info)) == 0);
+ assert(image.stat(info, sizeof(info)) == 0);
cout << "image has size " << info.size << " and order " << info.order << endl;
assert(info.size == size);
assert(info.order == order);
- delete image;
}
-void test_resize_and_stat(librbd::Image *image, size_t size)
+void test_resize_and_stat(librbd::Image& image, size_t size)
{
librbd::image_info_t info;
- assert(image->resize(size) == 0);
- assert(image->stat(info, sizeof(info)) == 0);
+ assert(image.resize(size) == 0);
+ assert(image.stat(info, sizeof(info)) == 0);
cout << "image has size " << info.size << " and order " << info.order << endl;
assert(info.size == size);
}
assert(rbd->remove(io_ctx, name) == 0);
}
-void test_create_snap(librbd::Image *image, const char *name)
+void test_create_snap(librbd::Image& image, const char *name)
{
- assert(image->snap_create(name) == 0);
+ assert(image.snap_create(name) == 0);
}
-void test_ls_snaps(librbd::Image *image, size_t num_expected, ...)
+void test_ls_snaps(librbd::Image& image, size_t num_expected, ...)
{
int r;
size_t i, j, expected_size;
char *expected;
va_list ap;
vector<librbd::snap_info_t> snaps;
- r = image->snap_list(snaps);
+ r = image.snap_list(snaps);
assert(r >= 0);
cout << "num snaps is: " << snaps.size() << endl
<< "expected: " << num_expected << endl;
}
}
-void test_delete_snap(librbd::Image *image, const char *name)
+void test_delete_snap(librbd::Image& image, const char *name)
{
- assert(image->snap_remove(name) == 0);
+ assert(image.snap_remove(name) == 0);
}
void simple_write_cb(librbd::completion_t cb, void *arg)
cout << "read completion cb called!" << endl;
}
-void aio_write_test_data(librbd::Image *image, const char *test_data, off_t off)
+void aio_write_test_data(librbd::Image& image, const char *test_data, off_t off)
{
ceph::bufferlist bl;
bl.append(test_data, strlen(test_data));
librbd::RBD::AioCompletion *comp = new librbd::RBD::AioCompletion(NULL, (librbd::callback_t) simple_write_cb);
printf("created completion\n");
- image->aio_write(off, strlen(test_data), bl, comp);
+ image.aio_write(off, strlen(test_data), bl, comp);
printf("started write\n");
comp->wait_for_complete();
int r = comp->get_return_value();
delete comp;
}
-void write_test_data(librbd::Image *image, const char *test_data, off_t off)
+void write_test_data(librbd::Image& image, const char *test_data, off_t off)
{
size_t written;
size_t len = strlen(test_data);
ceph::bufferlist bl;
bl.append(test_data, len);
- written = image->write(off, len, bl);
+ written = image.write(off, len, bl);
assert(written >= 0);
printf("wrote: %u\n", (unsigned int) written);
}
-void aio_read_test_data(librbd::Image *image, const char *expected, off_t off)
+void aio_read_test_data(librbd::Image& image, const char *expected, off_t off)
{
librbd::RBD::AioCompletion *comp = new librbd::RBD::AioCompletion(NULL, (librbd::callback_t) simple_read_cb);
ceph::bufferlist bl;
printf("created completion\n");
- image->aio_read(off, strlen(expected), bl, comp);
+ image.aio_read(off, strlen(expected), bl, comp);
printf("started read\n");
comp->wait_for_complete();
int r = comp->get_return_value();
delete comp;
}
-void read_test_data(librbd::Image *image, const char *expected, off_t off)
+void read_test_data(librbd::Image& image, const char *expected, off_t off)
{
size_t read, total_read = 0;
size_t expected_len = strlen(expected);
size_t len = expected_len;
ceph::bufferlist bl;
- read = image->read(off + total_read, len, bl);
+ read = image.read(off + total_read, len, bl);
assert(read >= 0);
printf("read: %u\n", (unsigned int) read);
printf("read: %s\nexpected: %s\n", bl.c_str(), expected);
assert(strncmp(bl.c_str(), expected, expected_len) == 0);
}
-void test_io(librados::IoCtx& io_ctx, librbd::Image *image)
+void test_io(librados::IoCtx& io_ctx, librbd::Image& image)
{
char test_data[TEST_IO_SIZE];
int i;
{
librados::Rados rados;
librados::IoCtx io_ctx;
- std::auto_ptr< librbd::Image > image;
+ librbd::Image image;
rbd = new librbd::RBD();
assert(rados.init(NULL) == 0);
assert(rados.connect() == 0);
assert(rados.ioctx_create(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, image.get(), TEST_IMAGE, NULL) == 0);
+ assert(rbd->open(io_ctx, image, TEST_IMAGE, NULL) == 0);
test_ls(io_ctx, 1, TEST_IMAGE);
- test_ls_snaps(image.get(), 0);
- test_create_snap(image.get(), TEST_SNAP);
- test_ls_snaps(image.get(), 1, TEST_SNAP, MB_BYTES(1));
- test_resize_and_stat(image.get(), MB_BYTES(2));
- test_io(io_ctx, image.get());
- test_create_snap(image.get(), TEST_SNAP "1");
- test_ls_snaps(image.get(), 2, TEST_SNAP, MB_BYTES(1), TEST_SNAP "1", MB_BYTES(2));
- test_delete_snap(image.get(), TEST_SNAP);
- test_ls_snaps(image.get(), 1, TEST_SNAP "1", MB_BYTES(2));
- test_delete_snap(image.get(), TEST_SNAP "1");
- test_ls_snaps(image.get(), 0);
+ 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_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);