From 95838d0e036c783d3529cf26b08e080665c31e6e Mon Sep 17 00:00:00 2001 From: Ilya Dryomov Date: Wed, 26 Jun 2024 18:24:30 +0200 Subject: [PATCH] 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) --- src/test/librbd/test_Groups.cc | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) 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)); -- 2.39.5