]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #50530 from Matan-B/wip-matanb-crimson-only-new-rbd-v2
authorMatan <mbreizma@redhat.com>
Thu, 27 Apr 2023 09:53:38 +0000 (12:53 +0300)
committerGitHub <noreply@github.com>
Thu, 27 Apr 2023 09:53:38 +0000 (12:53 +0300)
crimson/osd: Handle rollback to head obejct

Reviewed-by: Samuel Just <sjust@redhat.com>
1  2 
src/crimson/osd/pg_backend.cc
src/test/librados/snapshots.cc
src/test/librados/snapshots_cxx.cc

Simple merge
Simple merge
index 51c8f2a636e6200736dc1800366b88fd93267735,83e3bd36172ad9c081d3382f4c6d332f5c8e9bb7..8098b2cb7817ea8f7902f9089f8bc5b5b836f2d3
@@@ -458,7 -465,55 +458,54 @@@ TEST_F(LibRadosSnapshotsSelfManagedPP, 
    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<uint64_t> my_snaps;
    my_snaps.push_back(-2);
    ASSERT_EQ(0, ioctx.selfmanaged_snap_create(&my_snaps.back()));