]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: Hack for fsck with multi label
authorAdam Kupczyk <akupczyk@ibm.com>
Fri, 2 Feb 2024 12:25:16 +0000 (12:25 +0000)
committerPere Diaz Bou <pere-altea@hotmail.com>
Fri, 23 Aug 2024 09:49:24 +0000 (11:49 +0200)
Config bluestore_bdev_label_require_all interferes with fsck / repair.
For those functions disable the flag.

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

src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index ff2fe17e88fa4e140a28df965f411808d1164198..96f8a64da0bd785c3c2fe45f55f3b7f140cc34c0 100644 (file)
@@ -5660,6 +5660,7 @@ BlueStore::BlueStore(CephContext *cct,
   _init_logger();
   cct->_conf.add_observer(this);
   set_cache_shards(1);
+  bluestore_bdev_label_require_all = cct->_conf.get_val<bool>("bluestore_bdev_label_require_all");
 }
 
 BlueStore::~BlueStore()
@@ -6820,7 +6821,7 @@ int BlueStore::_check_or_set_main_bdev_label(
           << " does not match our fsid " << fsid << dendl;
       return -EIO;
     }
-    if (cct->_conf.get_val<bool>("bluestore_bdev_label_require_all")) {
+    if (bluestore_bdev_label_require_all) {
       if (r != 0) {
         derr << __func__ << "not all labels read properly" << dendl;
         return -EIO;
@@ -10260,8 +10261,14 @@ int BlueStore::_fsck(BlueStore::FSCKDepth depth, bool repair)
       derr << __func__ << " fsck error: no valid block device label found" << dendl;
       return r;
     }
+    // hack - sanitize check for bdev label
+    bluestore_bdev_label_require_all = false;
   }
 
+  auto restore_option = make_scope_guard([&] {
+    bluestore_bdev_label_require_all = cct->_conf.get_val<bool>("bluestore_bdev_label_require_all");
+  });
+
   // in deep mode we need R/W write access to be able to replay deferred ops
   const bool read_only = !(repair || depth == FSCK_DEEP);
   int r = _open_db_and_around(read_only);
index 4e35715c909c28d67a46dd7655fae48c18e455e1..47b501f1419743886d31cd9d08321379bc9499e3 100644 (file)
@@ -2445,6 +2445,7 @@ private:
   std::vector<uint64_t>  bdev_label_valid_locations; // this has any elements
   bool bdev_label_multi = false;
   int64_t bdev_label_epoch = -1;
+  bool bluestore_bdev_label_require_all = false;
 
   typedef std::map<uint64_t, volatile_statfs> osd_pools_map;