diff options
author | David Zafman <david.zafman@inktank.com> | 2013-02-26 20:54:48 -0800 |
---|---|---|
committer | David Zafman <david.zafman@inktank.com> | 2013-03-04 21:35:00 -0800 |
commit | 1ebfb4145555ebe11a3b17450905af16b9d9a55d (patch) | |
tree | 7fd980ff645ad6616874efe054e6be345aeb6e17 | |
parent | 84183303a6563e6f846c0a9d8c0d8e951825b6e7 (diff) | |
download | ceph-1ebfb4145555ebe11a3b17450905af16b9d9a55d.tar.gz |
osd: Improve snapshot test
In SelfManagedSnapRollbackPP add some overlapping writes
New SelfManagedSnapOverlap creates overlapping writes
Signed-off-by: David Zafman <david.zafman@inktank.com>
-rw-r--r-- | src/test/librados/snapshots.cc | 104 |
1 files changed, 89 insertions, 15 deletions
diff --git a/src/test/librados/snapshots.cc b/src/test/librados/snapshots.cc index 439fe3fd6a8..512ad3a123d 100644 --- a/src/test/librados/snapshots.cc +++ b/src/test/librados/snapshots.cc @@ -9,8 +9,10 @@ using namespace librados; using std::string; +const int bufsize = 128; + TEST(LibRadosSnapshots, SnapList) { - char buf[128]; + char buf[bufsize]; rados_t cluster; rados_ioctx_t ioctx; std::string pool_name = get_temp_pool_name(); @@ -35,7 +37,7 @@ TEST(LibRadosSnapshots, SnapListPP) { ASSERT_EQ("", create_one_pool_pp(pool_name, cluster)); IoCtx ioctx; cluster.ioctx_create(pool_name.c_str(), ioctx); - char buf[128]; + char buf[bufsize]; memset(buf, 0xcc, sizeof(buf)); bufferlist bl1; bl1.append(buf, sizeof(buf)); @@ -52,7 +54,7 @@ TEST(LibRadosSnapshots, SnapListPP) { } TEST(LibRadosSnapshots, SnapRemove) { - char buf[128]; + char buf[bufsize]; rados_t cluster; rados_ioctx_t ioctx; std::string pool_name = get_temp_pool_name(); @@ -71,7 +73,7 @@ TEST(LibRadosSnapshots, SnapRemove) { } TEST(LibRadosSnapshots, SnapRemovePP) { - char buf[128]; + char buf[bufsize]; Rados cluster; IoCtx ioctx; std::string pool_name = get_temp_pool_name(); @@ -91,7 +93,7 @@ TEST(LibRadosSnapshots, SnapRemovePP) { } TEST(LibRadosSnapshots, Rollback) { - char buf[128]; + char buf[bufsize]; rados_t cluster; rados_ioctx_t ioctx; std::string pool_name = get_temp_pool_name(); @@ -112,7 +114,7 @@ TEST(LibRadosSnapshots, Rollback) { } TEST(LibRadosSnapshots, RollbackPP) { - char buf[128]; + char buf[bufsize]; Rados cluster; IoCtx ioctx; std::string pool_name = get_temp_pool_name(); @@ -137,7 +139,7 @@ TEST(LibRadosSnapshots, RollbackPP) { } TEST(LibRadosSnapshots, SnapGetName) { - char buf[128]; + char buf[bufsize]; rados_t cluster; rados_ioctx_t ioctx; std::string pool_name = get_temp_pool_name(); @@ -160,7 +162,7 @@ TEST(LibRadosSnapshots, SnapGetName) { } TEST(LibRadosSnapshots, SnapGetNamePP) { - char buf[128]; + char buf[bufsize]; Rados cluster; IoCtx ioctx; std::string pool_name = get_temp_pool_name(); @@ -197,7 +199,7 @@ TEST(LibRadosSnapshots, SelfManagedSnapTest) { ASSERT_EQ(0, rados_ioctx_selfmanaged_snap_set_write_ctx(ioctx, my_snaps[0], &my_snaps[0], my_snaps.size())); ::std::reverse(my_snaps.begin(), my_snaps.end()); - char buf[128]; + char buf[bufsize]; memset(buf, 0xcc, sizeof(buf)); ASSERT_EQ((int)sizeof(buf), rados_write(ioctx, "foo", buf, sizeof(buf), 0)); @@ -237,7 +239,7 @@ TEST(LibRadosSnapshots, SelfManagedRollbackTest) { ASSERT_EQ(0, rados_ioctx_selfmanaged_snap_set_write_ctx(ioctx, my_snaps[0], &my_snaps[0], my_snaps.size())); ::std::reverse(my_snaps.begin(), my_snaps.end()); - char buf[128]; + char buf[bufsize]; memset(buf, 0xcc, sizeof(buf)); ASSERT_EQ((int)sizeof(buf), rados_write(ioctx, "foo", buf, sizeof(buf), 0)); @@ -276,7 +278,7 @@ TEST(LibRadosSnapshots, SelfManagedSnapTestPP) { ::std::reverse(my_snaps.begin(), my_snaps.end()); ASSERT_EQ(0, ioctx.selfmanaged_snap_set_write_ctx(my_snaps[0], my_snaps)); ::std::reverse(my_snaps.begin(), my_snaps.end()); - char buf[128]; + char buf[bufsize]; memset(buf, 0xcc, sizeof(buf)); bufferlist bl1; bl1.append(buf, sizeof(buf)); @@ -319,11 +321,14 @@ TEST(LibRadosSnapshots, SelfManagedSnapRollbackPP) { ::std::reverse(my_snaps.begin(), my_snaps.end()); ASSERT_EQ(0, ioctx.selfmanaged_snap_set_write_ctx(my_snaps[0], my_snaps)); ::std::reverse(my_snaps.begin(), my_snaps.end()); - char buf[128]; + char buf[bufsize]; memset(buf, 0xcc, sizeof(buf)); bufferlist bl1; bl1.append(buf, sizeof(buf)); + //Write 3 consecutive buffers ASSERT_EQ((int)sizeof(buf), ioctx.write("foo", bl1, sizeof(buf), 0)); + ASSERT_EQ((int)sizeof(buf), ioctx.write("foo", bl1, sizeof(buf), bufsize)); + ASSERT_EQ((int)sizeof(buf), ioctx.write("foo", bl1, sizeof(buf), bufsize*2)); my_snaps.push_back(-2); ASSERT_EQ(0, ioctx.selfmanaged_snap_create(&my_snaps.back())); @@ -334,13 +339,82 @@ TEST(LibRadosSnapshots, SelfManagedSnapRollbackPP) { memset(buf2, 0xdd, sizeof(buf2)); bufferlist bl2; bl2.append(buf2, sizeof(buf2)); - ASSERT_EQ((int)sizeof(buf2), ioctx.write("foo", bl2, sizeof(buf2), 0)); + //Change the middle buffer + ASSERT_EQ((int)sizeof(buf2), ioctx.write("foo", bl2, sizeof(buf2), bufsize)); + //Add another after + ASSERT_EQ((int)sizeof(buf2), ioctx.write("foo", bl2, sizeof(buf2), bufsize*3)); + + ioctx.selfmanaged_snap_rollback("foo", my_snaps[1]); - string foo_str("foo"); - ioctx.selfmanaged_snap_rollback(foo_str, my_snaps[1]); bufferlist bl3; ASSERT_EQ((int)sizeof(buf), ioctx.read("foo", bl3, sizeof(buf), 0)); ASSERT_EQ(0, memcmp(bl3.c_str(), buf, sizeof(buf))); + ASSERT_EQ((int)sizeof(buf), ioctx.read("foo", bl3, sizeof(buf), bufsize)); + ASSERT_EQ(0, memcmp(bl3.c_str(), buf, sizeof(buf))); + ASSERT_EQ((int)sizeof(buf), ioctx.read("foo", bl3, sizeof(buf), bufsize*2)); + ASSERT_EQ(0, memcmp(bl3.c_str(), buf, sizeof(buf))); + ASSERT_EQ((int)0, ioctx.read("foo", bl3, sizeof(buf), bufsize*3)); + + ASSERT_EQ(0, ioctx.selfmanaged_snap_remove(my_snaps.back())); + my_snaps.pop_back(); + ASSERT_EQ(0, ioctx.selfmanaged_snap_remove(my_snaps.back())); + my_snaps.pop_back(); + ioctx.close(); + ASSERT_EQ(0, destroy_one_pool_pp(pool_name, cluster)); +} + +TEST(LibRadosSnapshots, SelfManagedSnapOverlap) { + std::vector<uint64_t> my_snaps; + Rados cluster; + IoCtx ioctx; + std::string pool_name = get_temp_pool_name(); + ASSERT_EQ("", create_one_pool_pp(pool_name, cluster)); + ASSERT_EQ(0, cluster.ioctx_create(pool_name.c_str(), ioctx)); + + my_snaps.push_back(-2); + ASSERT_EQ(0, ioctx.selfmanaged_snap_create(&my_snaps.back())); + ::std::reverse(my_snaps.begin(), my_snaps.end()); + ASSERT_EQ(0, ioctx.selfmanaged_snap_set_write_ctx(my_snaps[0], my_snaps)); + ::std::reverse(my_snaps.begin(), my_snaps.end()); + char buf[bufsize]; + memset(buf, 0xcc, sizeof(buf)); + bufferlist bl1; + bl1.append(buf, sizeof(buf)); + ASSERT_EQ((int)sizeof(buf), ioctx.write("foo", bl1, sizeof(buf), 0)); + ASSERT_EQ((int)sizeof(buf), ioctx.write("foo", bl1, sizeof(buf), bufsize*2)); + ASSERT_EQ((int)sizeof(buf), ioctx.write("foo", bl1, sizeof(buf), bufsize*4)); + ASSERT_EQ((int)sizeof(buf), ioctx.write("foo", bl1, sizeof(buf), bufsize*6)); + ASSERT_EQ((int)sizeof(buf), ioctx.write("foo", bl1, sizeof(buf), bufsize*8)); + + my_snaps.push_back(-2); + ASSERT_EQ(0, ioctx.selfmanaged_snap_create(&my_snaps.back())); + ::std::reverse(my_snaps.begin(), my_snaps.end()); + ASSERT_EQ(0, ioctx.selfmanaged_snap_set_write_ctx(my_snaps[0], my_snaps)); + ::std::reverse(my_snaps.begin(), my_snaps.end()); + char buf2[sizeof(buf)]; + memset(buf2, 0xdd, sizeof(buf2)); + bufferlist bl2; + bl2.append(buf2, sizeof(buf2)); + ASSERT_EQ((int)sizeof(buf2), ioctx.write("foo", bl2, sizeof(buf2), bufsize*1)); + ASSERT_EQ((int)sizeof(buf2), ioctx.write("foo", bl2, sizeof(buf2), bufsize*3)); + ASSERT_EQ((int)sizeof(buf2), ioctx.write("foo", bl2, sizeof(buf2), bufsize*5)); + ASSERT_EQ((int)sizeof(buf2), ioctx.write("foo", bl2, sizeof(buf2), bufsize*7)); + ASSERT_EQ((int)sizeof(buf2), ioctx.write("foo", bl2, sizeof(buf2), bufsize*9)); + + my_snaps.push_back(-2); + ASSERT_EQ(0, ioctx.selfmanaged_snap_create(&my_snaps.back())); + ::std::reverse(my_snaps.begin(), my_snaps.end()); + ASSERT_EQ(0, ioctx.selfmanaged_snap_set_write_ctx(my_snaps[0], my_snaps)); + ::std::reverse(my_snaps.begin(), my_snaps.end()); + + char buf3[sizeof(buf)]; + memset(buf3, 0xee, sizeof(buf3)); + bufferlist bl4; + bl4.append(buf3, sizeof(buf3)); + ASSERT_EQ((int)sizeof(buf3), ioctx.write("foo", bl2, sizeof(buf3), bufsize*1)); + ASSERT_EQ((int)sizeof(buf3), ioctx.write("foo", bl2, sizeof(buf3), bufsize*4)); + ASSERT_EQ((int)sizeof(buf3), ioctx.write("foo", bl2, sizeof(buf3), bufsize*5)); + ASSERT_EQ((int)sizeof(buf3), ioctx.write("foo", bl2, sizeof(buf3), bufsize*8)); ASSERT_EQ(0, ioctx.selfmanaged_snap_remove(my_snaps.back())); my_snaps.pop_back(); |