From 6a5d9c7861892f59281342d2da6a8d21b0229f69 Mon Sep 17 00:00:00 2001 From: Adam Kupczyk Date: Fri, 2 Feb 2024 12:27:50 +0000 Subject: [PATCH] os/bluestore: Add ability to upgrade into multi label By default original behaviour is preserved. One can upgrade into multi label by: Signed-off-by: Adam Kupczyk (cherry picked from commit b24a4945a6c5c2c47e5b32b295af826cd090786c) --- src/common/options/global.yaml.in | 10 ++++++++++ src/os/bluestore/BlueStore.cc | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/src/common/options/global.yaml.in b/src/common/options/global.yaml.in index 2955ba96cb9..8a24df523e2 100644 --- a/src/common/options/global.yaml.in +++ b/src/common/options/global.yaml.in @@ -4354,6 +4354,16 @@ options: flags: - runtime with_legacy: false +- name: bluestore_bdev_label_multi_upgrade + type: bool + level: advanced + desc: Let repair upgrade to multi label. + long_desc: By default single label is preserved. + Setting this variable before running fsck-repair upgrades single label into multi label. + default: false + flags: + - startup + with_legacy: false # whether preallocate space if block/db_path/wal_path is file rather that block device. - name: bluestore_block_preallocate_file type: bool diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 96f8a64da0b..efec940a962 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -10359,6 +10359,15 @@ int BlueStore::_fsck_on_open(BlueStore::FSCKDepth depth, bool repair) auto alloc_size = fm->get_alloc_size(); // Delayed action, we could not do it in _fsck(). + if (repair && !bdev_label_multi && + cct->_conf.get_val("bluestore_bdev_label_multi_upgrade")) { + // upgrade to multi + bdev_label.meta["multi"] = "yes"; + bdev_label.meta["epoch"] = "1"; + bdev_label_multi = true; + bdev_labels_broken.push_back(BDEV_LABEL_POSITION); + errors++; + } if (bdev_label_multi) { for (size_t i = 0; i < bdev_label_positions.size(); i++) { uint64_t location = bdev_label_positions[i]; -- 2.39.5