return 0;
}
+ bool snap_exists(ImageCtx *ictx, const char *snap_name)
+ {
+ ldout(ictx->cct, 20) << "snap_exists " << ictx << " " << snap_name << dendl;
+
+ int r = ictx_check(ictx);
+ if (r < 0)
+ return r;
+
+ RWLock::RLocker l(ictx->snap_lock);
+ return ictx->snaps_by_name.count(snap_name);
+ }
+
+
int add_snap(ImageCtx *ictx, const char *snap_name)
{
uint64_t snap_id;
int resize_helper(ImageCtx *ictx, uint64_t size, ProgressContext& prog_ctx);
int snap_create(ImageCtx *ictx, const char *snap_name);
int snap_list(ImageCtx *ictx, std::vector<snap_info_t>& snaps);
+ bool snap_list(ImageCtx *ictx, const char *snap_name);
int snap_rollback(ImageCtx *ictx, const char *snap_name,
ProgressContext& prog_ctx);
int snap_remove(ImageCtx *ictx, const char *snap_name);
return librbd::snap_list(ictx, snaps);
}
+ bool Image::snap_exists(const char *snap_name)
+ {
+ ImageCtx *ictx = (ImageCtx *)ctx;
+ return librbd::snap_exists(ictx, snap_name);
+ }
+
int Image::snap_set(const char *snap_name)
{
ImageCtx *ictx = (ImageCtx *)ctx;
ASSERT_EQ(0, create_image_pp(rbd, ioctx, name, size, &order));
ASSERT_EQ(0, rbd.open(ioctx, image, name, NULL));
+ ASSERT_FALSE(image.snap_exists("snap1"));
ASSERT_EQ(0, image.snap_create("snap1"));
+ ASSERT_TRUE(image.snap_exists("snap1"));
ASSERT_EQ(1, test_ls_snaps(image, 1, "snap1", size));
ASSERT_EQ(0, image.resize(size2));
+ ASSERT_FALSE(image.snap_exists("snap2"));
ASSERT_EQ(0, image.snap_create("snap2"));
+ ASSERT_TRUE(image.snap_exists("snap2"));
ASSERT_EQ(2, test_ls_snaps(image, 2, "snap1", size, "snap2", size2));
ASSERT_EQ(0, image.snap_remove("snap1"));
+ ASSERT_FALSE(image.snap_exists("snap1"));
ASSERT_EQ(1, test_ls_snaps(image, 1, "snap2", size2));
ASSERT_EQ(0, image.snap_remove("snap2"));
+ ASSERT_FALSE(image.snap_exists("snap2"));
ASSERT_EQ(0, test_ls_snaps(image, 0));
}