]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test/test_bluefs: make a standalone test case to reproduce bug#74765 67312/head
authorIgor Fedotov <igor.fedotov@croit.io>
Thu, 12 Feb 2026 15:46:35 +0000 (18:46 +0300)
committerIgor Fedotov <igor.fedotov@croit.io>
Thu, 12 Feb 2026 15:46:35 +0000 (18:46 +0300)
Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
src/test/objectstore/test_bluefs.cc

index 93a7c1e7e2a7557386451c3d7cbc769d997c6268..297892c6655ff5da8017edc91bc23fd97c4ad14c 100644 (file)
@@ -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";