Skip to content

Commit b4f453d

Browse files
committed
test/librados/snapshots_cxx: Add WriteRollback test
This test is an example for https://tracker.ceph.com/issues/59114 Signed-off-by: Matan Breizman <[email protected]>
1 parent f616faf commit b4f453d

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

src/test/librados/snapshots_cxx.cc

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,53 @@ TEST_F(LibRadosSnapshotsSelfManagedPP, OrderSnap) {
465465
comp4->release();
466466
}
467467

468+
TEST_F(LibRadosSnapshotsSelfManagedPP, WriteRollback) {
469+
// https://tracker.ceph.com/issues/59114
470+
GTEST_SKIP();
471+
uint64_t snapid = 5;
472+
473+
// buf1
474+
char buf[bufsize];
475+
memset(buf, 0xcc, sizeof(buf));
476+
bufferlist bl;
477+
bl.append(buf, sizeof(buf));
478+
479+
// buf2
480+
char buf2[sizeof(buf)];
481+
memset(buf2, 0xdd, sizeof(buf2));
482+
bufferlist bl2;
483+
bl2.append(buf2, sizeof(buf2));
484+
485+
// First write
486+
ObjectWriteOperation op_write1;
487+
op_write1.write(0, bl);
488+
// Operate
489+
librados::AioCompletion *comp_write = cluster.aio_create_completion();
490+
ASSERT_EQ(0, ioctx.aio_operate("foo", comp_write, &op_write1, 0));
491+
ASSERT_EQ(0, comp_write->wait_for_complete());
492+
ASSERT_EQ(0, comp_write->get_return_value());
493+
comp_write->release();
494+
495+
// Take Snapshot
496+
ASSERT_EQ(0, ioctx.selfmanaged_snap_create(&snapid));
497+
498+
// Rollback + Second write in the same op
499+
ObjectWriteOperation op_write2_snap_rollback;
500+
op_write2_snap_rollback.write(0, bl2);
501+
op_write2_snap_rollback.selfmanaged_snap_rollback(snapid);
502+
// Operate
503+
librados::AioCompletion *comp_write2 = cluster.aio_create_completion();
504+
ASSERT_EQ(0, ioctx.aio_operate("foo", comp_write2, &op_write2_snap_rollback, 0));
505+
ASSERT_EQ(0, comp_write2->wait_for_complete());
506+
ASSERT_EQ(0, comp_write2->get_return_value());
507+
comp_write2->release();
508+
509+
// Resolved should be first write
510+
bufferlist bl3;
511+
EXPECT_EQ((int)sizeof(buf), ioctx.read("foo", bl3, sizeof(buf), 0));
512+
EXPECT_EQ(0, memcmp(buf, bl3.c_str(), sizeof(buf)));
513+
}
514+
468515
TEST_F(LibRadosSnapshotsSelfManagedPP, ReusePurgedSnap) {
469516
SKIP_IF_CRIMSON();
470517
std::vector<uint64_t> my_snaps;

0 commit comments

Comments
 (0)