From: Sage Weil Date: Sat, 30 Nov 2013 06:26:57 +0000 (-0800) Subject: mon/OSDMonitor: move osd metadata dump into a helper X-Git-Tag: v0.74~37^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c4f817f9cd415de3cd13608b0c28599542948cef;p=ceph.git mon/OSDMonitor: move osd metadata dump into a helper Signed-off-by: Sage Weil --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 81bab3c94bf4..836cbbf3abb3 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -605,6 +605,27 @@ void OSDMonitor::encode_pending(MonitorDBStore::Transaction *t) pending_metadata_rm.clear(); } +int OSDMonitor::dump_osd_metadata(int osd, Formatter *f, ostream *err) +{ + bufferlist bl; + int r = mon->store->get(OSD_METADATA_PREFIX, stringify(osd), bl); + if (r < 0) + return r; + map m; + try { + bufferlist::iterator p = bl.begin(); + ::decode(m, p); + } + catch (buffer::error& e) { + if (err) + *err << "osd." << osd << " metadata is corrupt"; + return -EIO; + } + for (map::iterator p = m.begin(); p != m.end(); ++p) + f->dump_string(p->first.c_str(), p->second); + return 0; +} + void OSDMonitor::share_map_with_random_osd() { if (osdmap.get_num_up_osds() == 0) { @@ -2154,17 +2175,10 @@ bool OSDMonitor::preprocess_command(MMonCommand *m) string format; cmd_getval(g_ceph_context, cmdmap, "format", format, string("json-pretty")); boost::scoped_ptr f(new_formatter(format)); - - bufferlist bl; - mon->store->get(OSD_METADATA_PREFIX, stringify(osd), bl); - map m; - if (bl.length()) { - bufferlist::iterator p = bl.begin(); - ::decode(m, p); - } f->open_object_section("osd_metadata"); - for (map::iterator p = m.begin(); p != m.end(); ++p) - f->dump_string(p->first.c_str(), p->second); + r = dump_osd_metadata(osd, f.get(), &ss); + if (r < 0) + goto reply; f->close_section(); f->flush(rdata); } else if (prefix == "osd map") { diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 7ea9dc3f804c..9713a01b5606 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -343,6 +343,7 @@ private: epoch_t blacklist(const entity_addr_t& a, utime_t until); void dump_info(Formatter *f); + int dump_osd_metadata(int osd, Formatter *f, ostream *err); void check_subs(); void check_sub(Subscription *sub);