From: Adam Kupczyk Date: Fri, 2 Feb 2024 12:25:16 +0000 (+0000) Subject: os/bluestore: Hack for fsck with multi label X-Git-Tag: testing/wip-rishabh-testing-20240908.191708-squid-debug~33^2~25 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ee362b8e59a57fbe51b3b721d7264b9e17514838;p=ceph-ci.git os/bluestore: Hack for fsck with multi label Config bluestore_bdev_label_require_all interferes with fsck / repair. For those functions disable the flag. Signed-off-by: Adam Kupczyk (cherry picked from commit 733a4513e56dcb869204c59abfbbc129b89b05d6) --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index ff2fe17e88f..96f8a64da0b 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -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("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("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("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); diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 4e35715c909..47b501f1419 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -2445,6 +2445,7 @@ private: std::vector 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 osd_pools_map;