From: Benoît Knecht Date: Mon, 6 Dec 2021 08:14:56 +0000 (+0100) Subject: mon: Abort device health when device not found X-Git-Tag: v15.2.17~97^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=700adaba330362378acad976079770bff648b77c;p=ceph.git mon: Abort device health when device not found 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 (cherry picked from commit c05a3b769dccf5fe839a2150e39d899516469164) --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 908d062ca8b8..786163790ce7 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -378,6 +378,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 devnames; get_raw_devices(devname, &devnames); json_spirit::mObject json_map; diff --git a/src/mon/MonitorDBStore.h b/src/mon/MonitorDBStore.h index 6dba96064be0..9e4c57b06c8b 100644 --- a/src/mon/MonitorDBStore.h +++ b/src/mon/MonitorDBStore.h @@ -57,6 +57,10 @@ class MonitorDBStore return devname; } + std::string get_path() { + return path; + } + std::shared_ptr get_priority_cache() const { return db->get_priority_cache(); }