]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: Modify read_meta()
authorAdam Kupczyk <akupczyk@ibm.com>
Fri, 12 Jul 2024 08:04:41 +0000 (08:04 +0000)
committerPere Diaz Bou <pere-altea@hotmail.com>
Fri, 23 Aug 2024 09:49:25 +0000 (11:49 +0200)
When bdev is not opened, do not fallback to file-backed values
immediately.
First try to open temporary open bdev.

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

src/os/bluestore/BlueStore.cc

index 74f0f5845ec6d82181a293c688983733b4bfb074..0f659d951b55a1489cc3ebf5c4fca7c6352e8c05 100644 (file)
@@ -6029,13 +6029,29 @@ int BlueStore::write_meta(const std::string& key, const std::string& value)
 
 int BlueStore::read_meta(const std::string& key, std::string *value)
 {
-  if (!bdev || !bdev->supported_bdev_label()) {
+  BlockDevice* local_bdev = bdev;
+  auto close_bdev = make_scope_guard([&] {
+    if (!bdev && local_bdev) {
+      local_bdev->close();
+      delete local_bdev;
+    }
+  });
+  if (!local_bdev) {
+    string p = path + "/block";
+    local_bdev = BlockDevice::create(cct, p, nullptr, nullptr, nullptr, nullptr);
+    int r = local_bdev->open(p);
+    if (r < 0) {
+      delete local_bdev;
+      local_bdev = nullptr;
+    }
+  }
+  if (!local_bdev || !local_bdev->supported_bdev_label()) {
     // skip bdev label section if not supported
     return ObjectStore::read_meta(key, value);
   }
   string p = path + "/block";
   if (bdev_label_valid_locations.empty()) {
-    _read_multi_bdev_label(cct, bdev, p, fsid, &bdev_label, &bdev_label_valid_locations,
+    _read_multi_bdev_label(cct, local_bdev, p, fsid, &bdev_label, &bdev_label_valid_locations,
       &bdev_label_multi, &bdev_label_epoch);
   }
   if (!bdev_label_valid_locations.empty()) {