From: Igor Fedotov Date: Thu, 12 Feb 2026 15:46:35 +0000 (+0300) Subject: test/test_bluefs: make a standalone test case to reproduce bug#74765 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=03ef619e79a56cd363b087a5c6f19a1a09b49040;p=ceph.git test/test_bluefs: make a standalone test case to reproduce bug#74765 Signed-off-by: Igor Fedotov --- diff --git a/src/test/objectstore/test_bluefs.cc b/src/test/objectstore/test_bluefs.cc index 93a7c1e7e2a..297892c6655 100644 --- a/src/test/objectstore/test_bluefs.cc +++ b/src/test/objectstore/test_bluefs.cc @@ -1277,6 +1277,59 @@ TEST_F(BlueFS_wal, wal_v2_simulate_crash) fs.set_volume_selector(vselector); ASSERT_EQ(0, fs.mount()); + std::string dir = "dir"; + std::string file = "wal.log"; + int r = fs.mkdir(dir); + ASSERT_TRUE(r == 0 || r == -EEXIST); + BlueFS::FileWriter *writer; + ASSERT_EQ(0, fs.open_for_write(dir, file, &writer, false)); + ASSERT_NE(nullptr, writer); + + bufferlist content; + many_small_writes(writer, content, 100); + delete writer; //close without orderly shutdown, simulate failure + + fs.umount(); + + vselector = new_vselector(); + fs.set_volume_selector(vselector); + fs.mount(); + + bufferlist read_content; + many_small_reads(dir, file, read_content, 100); + ASSERT_EQ(content, read_content); + + fs.umount(); +} + +TEST_F(BlueFS_wal, wal_v2_repro_74765) +{ + ConfSaver conf(g_ceph_context->_conf); + conf.SetVal("bluefs_min_flush_size", "65536"); + conf.SetVal("bluefs_wal_envelope_mode", "true"); + conf.ApplyChanges(); + + uint64_t wal_size = 1048576 * 64; + uint64_t db_size = 1048576 * 128; + uint64_t slow_size = 1048576 * 256; + Create(slow_size, db_size, wal_size); + + auto new_vselector = [&]() { + return + new RocksDBBlueFSVolumeSelector( + wal_size * 95 / 100, + db_size * 95 / 100, + slow_size * 95 / 100, + 16777216 * 64, //rocks_opts.write_buffer_size * rocks_opts.max_write_buffer_number + 1073741824, //rocks_opts.max_bytes_for_level_base, + 8, //rocks_opts.max_bytes_for_level_multiplier, + true /*use some extra*/); + }; + + BlueFSVolumeSelector *vselector = new_vselector(); + fs.set_volume_selector(vselector); + ASSERT_EQ(0, fs.mount()); + std::string dir = "dir"; std::string file = "wal.log"; std::string file2 = "wal2.log";