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: v20.0.0~1321^2~25 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=733a4513e56dcb869204c59abfbbc129b89b05d6;p=ceph.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 --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 42299ae8ec9a..988417c09a5a 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -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("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("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("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 9b9b3f8bbbc2..886b34bc7594 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -2432,6 +2432,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;