]> 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 67333/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, 19 Feb 2026 15:37:26 +0000 (18:37 +0300)
Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
(cherry picked from commit 03ef619e79a56cd363b087a5c6f19a1a09b49040)

src/test/objectstore/test_bluefs.cc

index 7d47a9ff3a0fe829567f80e505cb612d3738bf09..4d055eca64976d2f99cd2f00b30c57a3399adf7f 100644 (file)
@@ -1279,6 +1279,61 @@ 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,
+      g_ceph_context->_conf->bluestore_volume_selection_reserved_factor,
+      g_ceph_context->_conf->bluestore_volume_selection_reserved,
+      g_ceph_context->_conf->bluestore_volume_selection_policy.find("use_some_extra")
+         == 0);
+    };
+
+  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";