]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: 'osd metadata N' command
authorSage Weil <sage@inktank.com>
Sat, 9 Nov 2013 14:06:54 +0000 (06:06 -0800)
committerSage Weil <sage@inktank.com>
Sat, 9 Nov 2013 14:10:14 +0000 (06:10 -0800)
Report recorded metadata about an OSD.

Signed-off-by: Sage Weil <sage@inktank.com>
qa/workunits/cephtool/test.sh
src/mon/MonCommands.h
src/mon/OSDMonitor.cc

index f0fa37893b1b55deb937712423158eb2b5a507b1..d482ef9794bd9266b91cfc2a2c3fb3f842b7d372 100755 (executable)
@@ -212,6 +212,7 @@ for ((i=0; i < 100; i++)); do
 done
 ceph osd dump | grep 'osd.0 up'
 ceph osd find 1
+ceph osd metadata 1 | grep 'distro'
 ceph osd out 0
 ceph osd dump | grep 'osd.0.*out'
 ceph osd in 0
index 5a6ca6a471d265dcaba4ca5f621c8990e37f2fe8..7814a470fcdfeda0907908c76714c898cd81cfb2 100644 (file)
@@ -344,6 +344,10 @@ COMMAND("osd find " \
        "name=id,type=CephInt,range=0", \
        "find osd <id> in the CRUSH map and show its location", \
        "osd", "r", "cli,rest")
+COMMAND("osd metadata " \
+       "name=id,type=CephInt,range=0", \
+       "fetch metadata for osd <id>", \
+       "osd", "r", "cli,rest")
 COMMAND("osd map " \
        "name=pool,type=CephPoolname " \
        "name=object,type=CephObjectname", \
index 1967660bd1fe1f8abfe2f99023012a63d728f35d..81bab3c94bf46e3588fde00de0a31a9eb3d7fb12 100644 (file)
@@ -2143,6 +2143,30 @@ bool OSDMonitor::preprocess_command(MMonCommand *m)
     f->close_section();
     f->close_section();
     f->flush(rdata);
+  } else if (prefix == "osd metadata") {
+    int64_t osd;
+    cmd_getval(g_ceph_context, cmdmap, "id", osd);
+    if (!osdmap.exists(osd)) {
+      ss << "osd." << osd << " does not exist";
+      r = -ENOENT;
+      goto reply;
+    }
+    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);
+    f->close_section();
+    f->flush(rdata);
   } else if (prefix == "osd map") {
     string poolstr, objstr, namespacestr;
     cmd_getval(g_ceph_context, cmdmap, "pool", poolstr);