From: Adam Kupczyk Date: Fri, 2 Feb 2024 12:27:50 +0000 (+0000) Subject: os/bluestore: Add ability to upgrade into multi label X-Git-Tag: v20.0.0~1321^2~24 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b24a4945a6c5c2c47e5b32b295af826cd090786c;p=ceph.git 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 --- diff --git a/src/common/options/global.yaml.in b/src/common/options/global.yaml.in index c29dc6c7feb3..5b9e0342dfc8 100644 --- a/src/common/options/global.yaml.in +++ b/src/common/options/global.yaml.in @@ -4407,6 +4407,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 988417c09a5a..81b3147ba0c8 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -10563,6 +10563,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];