]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: move osd metadata dump into a helper
authorSage Weil <sage@inktank.com>
Sat, 30 Nov 2013 06:26:57 +0000 (22:26 -0800)
committerSage Weil <sage@inktank.com>
Sat, 30 Nov 2013 06:26:57 +0000 (22:26 -0800)
Signed-off-by: Sage Weil <sage@inktank.com>
src/mon/OSDMonitor.cc
src/mon/OSDMonitor.h

index 81bab3c94bf46e3588fde00de0a31a9eb3d7fb12..836cbbf3abb30db4887870491dddcaaee5e97858 100644 (file)
@@ -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<string,string> 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<string,string>::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<Formatter> f(new_formatter(format));
-
-    bufferlist bl;
-    mon->store->get(OSD_METADATA_PREFIX, stringify(osd), bl);
-    map<string,string> m;
-    if (bl.length()) {
-      bufferlist::iterator p = bl.begin();
-      ::decode(m, p);
-    }
     f->open_object_section("osd_metadata");
-    for (map<string,string>::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") {
index 7ea9dc3f804cf08bc191ffc44753b008011a7e70..9713a01b560656523b8dd15619822ec9608d793f 100644 (file)
@@ -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);