]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
os/bluestore: Add ability to upgrade into multi label
authorAdam Kupczyk <akupczyk@ibm.com>
Fri, 2 Feb 2024 12:27:50 +0000 (12:27 +0000)
committerPere Diaz Bou <pere-altea@hotmail.com>
Fri, 23 Aug 2024 09:49:24 +0000 (11:49 +0200)
By default original behaviour is preserved.
One can upgrade into multi label by:

Signed-off-by: Adam Kupczyk <akupczyk@ibm.com>
(cherry picked from commit b24a4945a6c5c2c47e5b32b295af826cd090786c)

src/common/options/global.yaml.in
src/os/bluestore/BlueStore.cc

index 2955ba96cb9682d33d81c86a9332f2d2dee49d35..8a24df523e24904e7660296de3990b2e01ba8bea 100644 (file)
@@ -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
index 96f8a64da0bd785c3c2fe45f55f3b7f140cc34c0..efec940a962acfe68cafd40c952988f0fad668a3 100644 (file)
@@ -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<bool>("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];