]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: Abort device health when device not found
authorBenoît Knecht <bknecht@protonmail.ch>
Mon, 6 Dec 2021 08:14:56 +0000 (09:14 +0100)
committerBenoît Knecht <bknecht@protonmail.ch>
Tue, 4 Jan 2022 13:38:32 +0000 (14:38 +0100)
If `store->get_devname()` returns an empty device name, it means it couldn't
determine the device that backs the monitor DB store directory.

This can happen if `ceph-mon` runs with `PrivateDevices=yes` in systemd, or
within a container where the host `/dev` isn't exposed.

This commit makes sure we abort trying to get the device health at that point,
and return an appropriate error.

Signed-off-by: Benoît Knecht <bknecht@protonmail.ch>
src/mon/Monitor.cc
src/mon/MonitorDBStore.h

index e8856a5d120f64e7d3294356a38eb41396017097..946e44abd236f39a3927a26294fc3577d3c92610 100644 (file)
@@ -421,6 +421,11 @@ int Monitor::do_admin_command(
     cmd_getval(cmdmap, "devid", want_devid);
 
     string devname = store->get_devname();
+    if (devname.empty()) {
+      err << "could not determine device name for " << store->get_path();
+      r = -ENOENT;
+      goto abort;
+    }
     set<string> devnames;
     get_raw_devices(devname, &devnames);
     json_spirit::mObject json_map;
index 515a047279781743cd638611875c9de5825bd16a..c33d35e486d4424d1bd3f057a1d0d4816aa59255 100644 (file)
@@ -57,6 +57,10 @@ class MonitorDBStore
     return devname;
   }
 
+  std::string get_path() {
+    return path;
+  }
+
   std::shared_ptr<PriorityCache::PriCache> get_priority_cache() const {
     return db->get_priority_cache();
   }