From 240cf62306992ff1c36e40698286e5c7dfb5d353 Mon Sep 17 00:00:00 2001 From: Adam Kupczyk Date: Thu, 3 Mar 2022 15:36:58 +0100 Subject: [PATCH] os/bluestore/bluefs: Improve unittest for compaction Improved unittest for compaction to add some files after compacting. It is used to prove that there is a problem with sync compaction. Signed-off-by: Adam Kupczyk (cherry picked from commit 40160365f344ebfb43173a5366015ac4cdb7a3fe) --- src/test/objectstore/test_bluefs.cc | 54 +++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/test/objectstore/test_bluefs.cc b/src/test/objectstore/test_bluefs.cc index 5738143b4391..2a84b27c9992 100644 --- a/src/test/objectstore/test_bluefs.cc +++ b/src/test/objectstore/test_bluefs.cc @@ -618,6 +618,9 @@ TEST(BlueFS, test_compaction_sync) { g_ceph_context->_conf.set_val( "bluefs_compact_log_sync", "true"); + const char* canary_dir = "dir.after_compact_test"; + const char* canary_file = "file.after_compact_test"; + const char* canary_data = "some random data"; BlueFS fs(g_ceph_context); ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false, 1048576)); @@ -642,6 +645,30 @@ TEST(BlueFS, test_compaction_sync) { writes_done = true; join_all(sync_threads); fs.compact_log(); + + { + ASSERT_EQ(0, fs.mkdir(canary_dir)); + BlueFS::FileWriter *h; + ASSERT_EQ(0, fs.open_for_write(canary_dir, canary_file, &h, false)); + ASSERT_NE(nullptr, h); + auto sg = make_scope_guard([&fs, h] { fs.close_writer(h); }); + h->append(canary_data, strlen(canary_data)); + int r = fs.fsync(h); + ASSERT_EQ(r, 0); + } + } + fs.umount(); + + fs.mount(); + { + BlueFS::FileReader *h; + ASSERT_EQ(0, fs.open_for_read(canary_dir, canary_file, &h)); + ASSERT_NE(nullptr, h); + bufferlist bl; + ASSERT_EQ(strlen(canary_data), fs.read(h, 0, 1024, &bl, NULL)); + std::cout << bl.c_str() << std::endl; + ASSERT_EQ(0, strncmp(canary_data, bl.c_str(), strlen(canary_data))); + delete h; } fs.umount(); } @@ -655,6 +682,9 @@ TEST(BlueFS, test_compaction_async) { g_ceph_context->_conf.set_val( "bluefs_compact_log_sync", "false"); + const char* canary_dir = "dir.after_compact_test"; + const char* canary_file = "file.after_compact_test"; + const char* canary_data = "some random data"; BlueFS fs(g_ceph_context); ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false, 1048576)); @@ -679,6 +709,30 @@ TEST(BlueFS, test_compaction_async) { writes_done = true; join_all(sync_threads); fs.compact_log(); + + { + ASSERT_EQ(0, fs.mkdir(canary_dir)); + BlueFS::FileWriter *h; + ASSERT_EQ(0, fs.open_for_write(canary_dir, canary_file, &h, false)); + ASSERT_NE(nullptr, h); + auto sg = make_scope_guard([&fs, h] { fs.close_writer(h); }); + h->append(canary_data, strlen(canary_data)); + int r = fs.fsync(h); + ASSERT_EQ(r, 0); + } + } + fs.umount(); + + fs.mount(); + { + BlueFS::FileReader *h; + ASSERT_EQ(0, fs.open_for_read(canary_dir, canary_file, &h)); + ASSERT_NE(nullptr, h); + bufferlist bl; + ASSERT_EQ(strlen(canary_data), fs.read(h, 0, 1024, &bl, NULL)); + std::cout << bl.c_str() << std::endl; + ASSERT_EQ(0, strncmp(canary_data, bl.c_str(), strlen(canary_data))); + delete h; } fs.umount(); } -- 2.47.3