From cfcb7bc1e8a1c98661e0d561ed25f5cdf311001d Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 21 Dec 2018 11:21:57 -0600 Subject: [PATCH] mon: update metadata and smart commands to use get_raw_devices Signed-off-by: Sage Weil --- src/mon/Monitor.cc | 61 +++++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index f040c71297fc6..468e44baced3b 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -2130,15 +2130,24 @@ void Monitor::collect_metadata(Metadata *m) // infer storage device string devname = store->get_devname(); - if (devname.size()) { - (*m)["devices"] = devname; - string id = get_device_id(devname); + set devnames; + derr << " devname " << devname << dendl; + get_raw_devices(devname, &devnames); + (*m)["devices"] = stringify(devnames); + string devids; + for (auto& devname : devnames) { + string err; + string id = get_device_id(devname, &err); if (id.size()) { - (*m)["device_ids"] = string(devname) + "=" + id; + if (!devids.empty()) { + devids += ","; + } + devids += devname + "=" + id; } else { - derr << "failed to get devid for " << devname << dendl; + derr << "failed to get devid for " << devname << ": " << err << dendl; } } + (*m)["device_ids"] = devids; } void Monitor::finish_election() @@ -3637,27 +3646,33 @@ void Monitor::handle_command(MonOpRequestRef op) string want_devid; cmd_getval(cct, cmdmap, "devid", want_devid); - string dev = store->get_devname(); - string devid = get_device_id(dev); - if (want_devid.size() && want_devid != devid) { - r = -ENOENT; - } else { - uint64_t smart_timeout = cct->_conf.get_val( - "mon_smart_report_timeout"); - json_spirit::mObject json_map; + string devname = store->get_devname(); + set devnames; + get_raw_devices(devname, &devnames); + json_spirit::mObject json_map; + uint64_t smart_timeout = cct->_conf.get_val( + "mon_smart_report_timeout"); + for (auto& devname : devnames) { + string err; + string devid = get_device_id(devname, &err); + if (want_devid.size() && want_devid != devid) { + derr << "get_device_id failed on " << devname << ": " << err << dendl; + continue; + } json_spirit::mValue smart_json; - if (block_device_get_metrics(("/dev/" + dev).c_str(), smart_timeout, - &smart_json)) { - dout(10) << "block_device_get_metrics failed for /dev/" << dev << dendl; - } else { - json_map[devid] = smart_json; + if (block_device_get_metrics(("/dev/" + devname).c_str(), smart_timeout, + &smart_json)) { + dout(10) << "block_device_get_metrics failed for /dev/" << devname + << dendl; + continue; } - ostringstream ss; - json_spirit::write(json_map, ss, json_spirit::pretty_print); - rdata.append(ss.str()); - r = 0; - rs = ""; + json_map[devid] = smart_json; } + ostringstream ss; + json_spirit::write(json_map, ss, json_spirit::pretty_print); + rdata.append(ss.str()); + r = 0; + rs = ""; } out: -- 2.39.5