From 0fd5a687a4236165b023a4014e16f69415beebd4 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 87ed39578b8f1..44a4d7daefab0 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