summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Zafman <david.zafman@inktank.com>2013-02-26 20:54:48 -0800
committerDavid Zafman <david.zafman@inktank.com>2013-03-04 21:35:00 -0800
commit1ebfb4145555ebe11a3b17450905af16b9d9a55d (patch)
tree7fd980ff645ad6616874efe054e6be345aeb6e17
parent84183303a6563e6f846c0a9d8c0d8e951825b6e7 (diff)
downloadceph-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.cc104
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();