From: Ilya Dryomov Date: Wed, 26 Jun 2024 16:24:30 +0000 (+0200) Subject: test/librbd: avoid caching effects TestGroup.add_snapshot{,PP} X-Git-Tag: testing/wip-jcollin-testing-20240718.061041-squid~25^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=91cb5326d744d8cb946df5421e55dc4f4c3720f5;p=ceph-ci.git test/librbd: avoid caching effects TestGroup.add_snapshot{,PP} After rollback started being tested in commit b3977c53c930 ("test/librbd: make rollback in TestGroup.add_snapshot{,PP} meaningful"), these tests can fail on comparing post-rollback data to expected data if run with exclusive lock disabled. This doesn't occur with exclusive lock enabled because the RBD cache gets invalidated implicitly before releasing the lock. While at it, pass LIBRADOS_OP_FLAG_FADVISE_FUA to avoid relying on any cache settings that happen to be in effect. Signed-off-by: Ilya Dryomov (cherry picked from commit a7e314c2ef899406eb3ade6c5f862622ce1e698f) --- diff --git a/src/test/librbd/test_Groups.cc b/src/test/librbd/test_Groups.cc index 87ed39578b8..44a4d7daefa 100644 --- a/src/test/librbd/test_Groups.cc +++ b/src/test/librbd/test_Groups.cc @@ -239,7 +239,8 @@ TEST_F(TestGroup, add_snapshot) EXPECT_EQ(0, rbd_close(image)); } BOOST_SCOPE_EXIT_END; - ASSERT_EQ(10, rbd_write(image, 0, 10, orig_data)); + ASSERT_EQ(10, rbd_write2(image, 0, 10, orig_data, + LIBRADOS_OP_FLAG_FADVISE_FUA)); ASSERT_EQ(10, rbd_read(image, 0, 10, read_data)); ASSERT_EQ(0, memcmp(orig_data, read_data, 10)); @@ -308,13 +309,17 @@ TEST_F(TestGroup, add_snapshot) ASSERT_STREQ(snap_name, snaps[0].name); - ASSERT_EQ(10, rbd_write(image, 9, 10, test_data)); + ASSERT_EQ(10, rbd_write2(image, 9, 10, test_data, + LIBRADOS_OP_FLAG_FADVISE_FUA)); ASSERT_EQ(10, rbd_read(image, 9, 10, read_data)); ASSERT_EQ(0, memcmp(test_data, read_data, 10)); ASSERT_EQ(10, rbd_read(image, 0, 10, read_data)); ASSERT_NE(0, memcmp(orig_data, read_data, 10)); ASSERT_EQ(0, rbd_group_snap_rollback(ioctx, group_name, snap_name)); + if (!is_feature_enabled(RBD_FEATURE_EXCLUSIVE_LOCK)) { + ASSERT_EQ(0, rbd_invalidate_cache(image)); + } ASSERT_EQ(10, rbd_read(image, 0, 10, read_data)); ASSERT_EQ(0, memcmp(orig_data, read_data, 10)); @@ -385,7 +390,8 @@ TEST_F(TestGroup, add_snapshotPP) bufferlist expect_bl; bufferlist read_bl; expect_bl.append(std::string(512, '1')); - ASSERT_EQ((ssize_t)expect_bl.length(), image.write(0, expect_bl.length(), expect_bl)); + ASSERT_EQ(512, image.write2(0, expect_bl.length(), expect_bl, + LIBRADOS_OP_FLAG_FADVISE_FUA)); ASSERT_EQ(512, image.read(0, 512, read_bl)); ASSERT_TRUE(expect_bl.contents_equal(read_bl)); @@ -400,13 +406,17 @@ TEST_F(TestGroup, add_snapshotPP) bufferlist write_bl; write_bl.append(std::string(1024, '2')); - ASSERT_EQ(1024, image.write(256, write_bl.length(), write_bl)); + ASSERT_EQ(1024, image.write2(256, write_bl.length(), write_bl, + LIBRADOS_OP_FLAG_FADVISE_FUA)); ASSERT_EQ(1024, image.read(256, 1024, read_bl)); ASSERT_TRUE(write_bl.contents_equal(read_bl)); ASSERT_EQ(512, image.read(0, 512, read_bl)); ASSERT_FALSE(expect_bl.contents_equal(read_bl)); ASSERT_EQ(0, rbd.group_snap_rollback(ioctx, group_name, snap_name)); + if (!is_feature_enabled(RBD_FEATURE_EXCLUSIVE_LOCK)) { + ASSERT_EQ(0, image.invalidate_cache()); + } ASSERT_EQ(512, image.read(0, 512, read_bl)); ASSERT_TRUE(expect_bl.contents_equal(read_bl));