From 014528dfd13620519695c7009024dd70cc2db245 Mon Sep 17 00:00:00 2001 From: Adam Kupczyk Date: Fri, 28 Mar 2025 19:16:53 +0000 Subject: [PATCH] os/bluestore: Rename downgrade_wal_to_v1 => revert_wal_to_plain + relocated config bluefs_wal_envelope_mode close to other bluefs configs Signed-off-by: Adam Kupczyk --- doc/man/8/ceph-bluestore-tool.rst | 8 ++++---- src/common/options/global.yaml.in | 18 +++++++++--------- src/os/bluestore/BlueFS.cc | 12 ++++++------ src/os/bluestore/BlueFS.h | 4 ++-- src/os/bluestore/BlueStore.cc | 4 ++-- src/os/bluestore/BlueStore.h | 2 +- src/os/bluestore/bluestore_tool.cc | 13 ++++++++----- src/test/objectstore/test_bluefs.cc | 2 +- 8 files changed, 33 insertions(+), 30 deletions(-) diff --git a/doc/man/8/ceph-bluestore-tool.rst b/doc/man/8/ceph-bluestore-tool.rst index 213eb05924987..caf90a990ff40 100644 --- a/doc/man/8/ceph-bluestore-tool.rst +++ b/doc/man/8/ceph-bluestore-tool.rst @@ -34,7 +34,7 @@ Synopsis | **ceph-bluestore-tool** show-sharding --path *osd path* | **ceph-bluestore-tool** trim --path *osd path* | **ceph-bluestore-tool** zap-device --dev *dev path* -| **ceph-bluestore-tool** downgrade-wal-to-v1 --path *osd path* +| **ceph-bluestore-tool** revert-wal-to-plain --path *osd path* Description @@ -166,10 +166,10 @@ Commands Zeros all device label locations. This effectively makes device appear empty. -:command: `downgrade-wal-to-v1` --path *osd path* +:command: `revert-wal-to-plain` --path *osd path* - Changes WAL disk format from the new version to the legacy one. Useful for downgrades, or if you - might want to disable this new feature (bluefs_wal_v2). + Changes WAL files from envelope mode to the legacy plain mode. + Useful for downgrades, or if you might want to disable this new feature (bluefs_wal_envelope_mode). Options ======= diff --git a/src/common/options/global.yaml.in b/src/common/options/global.yaml.in index e6c10714548b7..0f40bdce80fca 100644 --- a/src/common/options/global.yaml.in +++ b/src/common/options/global.yaml.in @@ -4248,6 +4248,15 @@ options: level: advanced default: false with_legacy: true +- name: bluefs_wal_envelope_mode + type: bool + level: advanced + desc: Enables a faster backend in BlueFS for WAL writes. + long_desc: In envelope mode BlueFS files do not need to update metadata. When applied to RocksDB WAL files, + it reduces by ~50% the amount of fdatasync syscalls. + Downgrading from an envelope mode to legacy mode requires `ceph-bluestore-tool --command downgrade-wal-to-v1`. + default: true + with_legacy: false - name: bluefs_allocator type: str level: dev @@ -6718,12 +6727,3 @@ options: desc: Enables exception throwing instead of process abort on transaction submission error. default: false with_legacy: false -- name: bluefs_wal_envelope_mode - type: bool - level: advanced - desc: Enables a faster backend in BlueFS for WAL writes. - long_desc: In envelope mode BlueFS files do not need to update metadata. When applied to RocksDB WAL files, - it reduces by ~50% the amount of fdatasync syscalls. - Downgrading from an envelope mode to legacy mode requires `ceph-bluestore-tool --command downgrade-wal-to-v1`. - default: true - with_legacy: false diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 440cba38ff757..c34abdcb8c1a0 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -2215,7 +2215,7 @@ int BlueFS::device_migrate_to_new( return 0; } -int BlueFS::downgrade_wal_to_v1( +int BlueFS::revert_wal_to_plain( const std::string& dir, const std::string& name) { @@ -2225,7 +2225,7 @@ int BlueFS::downgrade_wal_to_v1( FileReader* reader = nullptr; // we use dir for wals and name like wal; should get proper hint r = open_for_write(dir, tmp_name, &writer, false); - // use normal v1 write path by marking node type to legacy + // use normal legacy write path by marking node type to plain writer->file->fnode.encoding = bluefs_node_encoding::PLAIN; ceph_assert(r == 0); r = open_for_read(dir, name, &reader); @@ -2250,7 +2250,7 @@ int BlueFS::downgrade_wal_to_v1( return 0; } -int BlueFS::downgrade_wal_to_v1() +int BlueFS::revert_wal_to_plain() { string wal_dir("db.wal"); auto dir_it = nodes.dir_map.find(wal_dir); @@ -2263,11 +2263,11 @@ int BlueFS::downgrade_wal_to_v1() auto dir_copy = dir_it->second->file_map; for (const auto& [file_name, file] : dir_copy) { if(file->envelope_mode()) { - downgrade_wal_to_v1(wal_dir, file_name); + revert_wal_to_plain(wal_dir, file_name); sync_metadata(true); - dout(10) << __func__ << fmt::format(" {} v2=>v1", file_name) << dendl; + dout(10) << __func__ << fmt::format(" {} envelope mode=>plain mode", file_name) << dendl; } else { - dout(10) << __func__ << fmt::format(" {} in v1", file_name) << dendl; + dout(10) << __func__ << fmt::format(" {} in plain mode", file_name) << dendl; } } diff --git a/src/os/bluestore/BlueFS.h b/src/os/bluestore/BlueFS.h index a7459b6cf8940..d16ed002ee4d6 100644 --- a/src/os/bluestore/BlueFS.h +++ b/src/os/bluestore/BlueFS.h @@ -801,7 +801,7 @@ public: const std::set& devs_source, int dev_target, const bluefs_layout_t& layout); - int downgrade_wal_to_v1(); + int revert_wal_to_plain(); uint64_t get_used(); uint64_t get_block_device_size(unsigned id); @@ -930,7 +930,7 @@ private: size_t read_len, bufferlist* bl); void _check_vselector_LNF(); - int downgrade_wal_to_v1( + int revert_wal_to_plain( const std::string& dir, const std::string& name ); diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 2a1550d370e7c..7f52140a38918 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -10836,13 +10836,13 @@ int BlueStore::_fsck(BlueStore::FSCKDepth depth, bool repair) return _fsck_on_open(depth, repair); } -int BlueStore::downgrade_wal_to_v1() { +int BlueStore::revert_wal_to_plain() { int r = cold_open(); if (r != 0) { dout(1) << __func__ << "failed to open db / allocator" << dendl; goto out; } - bluefs->downgrade_wal_to_v1(); + bluefs->revert_wal_to_plain(); cold_close(); out: return r; diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index b60dbdddd5b7d..cfe8755f50fdb 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -3177,7 +3177,7 @@ public: int repair(bool deep) override { return _fsck(deep ? FSCK_DEEP : FSCK_REGULAR, true); } - int downgrade_wal_to_v1(); + int revert_wal_to_plain(); int quick_fix() override { return _fsck(FSCK_SHALLOW, true); } diff --git a/src/os/bluestore/bluestore_tool.cc b/src/os/bluestore/bluestore_tool.cc index 93c5a712ee4d9..9fff0a08278da 100644 --- a/src/os/bluestore/bluestore_tool.cc +++ b/src/os/bluestore/bluestore_tool.cc @@ -369,7 +369,7 @@ int main(int argc, char **argv) "show-sharding, " "trim, " "zap-device, " - "downgrade-wal-to-v1" + "revert-wal-to-plain" ); po::options_description po_all("All options"); po_all.add(po_options).add(po_positional); @@ -486,7 +486,10 @@ int main(int argc, char **argv) } } - if (action == "fsck" || action == "repair" || action == "quick-fix" || action == "allocmap" || action == "qfsck" || action == "restore_cfb" || action == "migrate-wal-to-v1") { + if (action == "fsck" || action == "repair" || + action == "quick-fix" || action == "allocmap" || + action == "qfsck" || action == "restore_cfb" || + action == "revert-wal-to-plain") { if (path.empty()) { cerr << "must specify bluestore path" << std::endl; exit(EXIT_FAILURE); @@ -702,7 +705,7 @@ int main(int argc, char **argv) else if (action == "fsck" || action == "repair" || action == "quick-fix" || - action == "downgrade-wal-to-v1") { + action == "revert-wal-to-plain") { validate_path(cct.get(), path, false); BlueStore bluestore(cct.get(), path); int r; @@ -710,8 +713,8 @@ int main(int argc, char **argv) r = bluestore.fsck(fsck_deep); } else if (action == "repair") { r = bluestore.repair(fsck_deep); - } else if (action == "downgrade-wal-to-v1") { - r = bluestore.downgrade_wal_to_v1(); + } else if (action == "revert-wal-to-plain") { + r = bluestore.revert_wal_to_plain(); } else { r = bluestore.quick_fix(); } diff --git a/src/test/objectstore/test_bluefs.cc b/src/test/objectstore/test_bluefs.cc index 57892d4fcd217..2193157cc8a24 100644 --- a/src/test/objectstore/test_bluefs.cc +++ b/src/test/objectstore/test_bluefs.cc @@ -1141,7 +1141,7 @@ TEST(BlueFS, test_wal_migrate) { // WAL files don't update internal extents while writing to save memory, only on _replay fs.umount(); fs.mount(); - fs.downgrade_wal_to_v1(); + fs.revert_wal_to_plain(); BlueFS::FileReader *reader; ASSERT_EQ(0, fs.open_for_read(dir_db, wal_file, &reader)); -- 2.39.5