From 7f608e2c6f80641d923abc7d1c8a31bf05775818 Mon Sep 17 00:00:00 2001 From: Matan Breizman Date: Tue, 21 Mar 2023 10:50:58 +0000 Subject: [PATCH] test/librados/snapshots_cxx: Add WriteRollback test This test is an example for https://tracker.ceph.com/issues/59114 Signed-off-by: Matan Breizman (cherry picked from commit b4f453d3a2d8bbdd3b48c7101ef91303c8b2b00b) --- src/test/librados/snapshots_cxx.cc | 47 ++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/test/librados/snapshots_cxx.cc b/src/test/librados/snapshots_cxx.cc index f2d281d951a..83e3bd36172 100644 --- a/src/test/librados/snapshots_cxx.cc +++ b/src/test/librados/snapshots_cxx.cc @@ -465,6 +465,53 @@ TEST_F(LibRadosSnapshotsSelfManagedPP, OrderSnap) { comp4->release(); } +TEST_F(LibRadosSnapshotsSelfManagedPP, WriteRollback) { + // https://tracker.ceph.com/issues/59114 + GTEST_SKIP(); + uint64_t snapid = 5; + + // buf1 + char buf[bufsize]; + memset(buf, 0xcc, sizeof(buf)); + bufferlist bl; + bl.append(buf, sizeof(buf)); + + // buf2 + char buf2[sizeof(buf)]; + memset(buf2, 0xdd, sizeof(buf2)); + bufferlist bl2; + bl2.append(buf2, sizeof(buf2)); + + // First write + ObjectWriteOperation op_write1; + op_write1.write(0, bl); + // Operate + librados::AioCompletion *comp_write = cluster.aio_create_completion(); + ASSERT_EQ(0, ioctx.aio_operate("foo", comp_write, &op_write1, 0)); + ASSERT_EQ(0, comp_write->wait_for_complete()); + ASSERT_EQ(0, comp_write->get_return_value()); + comp_write->release(); + + // Take Snapshot + ASSERT_EQ(0, ioctx.selfmanaged_snap_create(&snapid)); + + // Rollback + Second write in the same op + ObjectWriteOperation op_write2_snap_rollback; + op_write2_snap_rollback.write(0, bl2); + op_write2_snap_rollback.selfmanaged_snap_rollback(snapid); + // Operate + librados::AioCompletion *comp_write2 = cluster.aio_create_completion(); + ASSERT_EQ(0, ioctx.aio_operate("foo", comp_write2, &op_write2_snap_rollback, 0)); + ASSERT_EQ(0, comp_write2->wait_for_complete()); + ASSERT_EQ(0, comp_write2->get_return_value()); + comp_write2->release(); + + // Resolved should be first write + bufferlist bl3; + EXPECT_EQ((int)sizeof(buf), ioctx.read("foo", bl3, sizeof(buf), 0)); + EXPECT_EQ(0, memcmp(buf, bl3.c_str(), sizeof(buf))); +} + TEST_F(LibRadosSnapshotsSelfManagedPP, ReusePurgedSnap) { SKIP_IF_CRIMSON(); std::vector my_snaps; -- 2.39.5