]> git-server-git.apps.pok.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)
committerAdam Kupczyk <akupczyk@ibm.com>
Mon, 22 Jul 2024 12:28:50 +0000 (12:28 +0000)
Config bluestore_bdev_label_require_all interferes with fsck / repair.
For those functions disable the flag.

Signed-off-by: Adam Kupczyk <akupczyk@ibm.com>
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index 42299ae8ec9a2800fd13a7bc28aa734f4f785178..988417c09a5aab91a53c4c71751a2fe2e61f6394 100644 (file)
@@ -5666,6 +5666,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()
@@ -6837,7 +6838,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;
@@ -10463,8 +10464,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 9b9b3f8bbbc2aed573cc48aae2093b9466f39a28..886b34bc75945f2c25a10d24cf76b3585ade94fb 100644 (file)
@@ -2432,6 +2432,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;