]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/PGMonitor: add 'pg dump pgs_brief' subcommand
authorDan Mick <dan.mick@inktank.com>
Sat, 3 Aug 2013 04:26:51 +0000 (21:26 -0700)
committerSage Weil <sage@inktank.com>
Mon, 5 Aug 2013 20:06:42 +0000 (13:06 -0700)
It is useful to map OSDs to PGs and vice-versa; pg dump gives that
information, but gives a lot of other stuff.  This is the same dump
as pg dump pgs, but omitting everything except pgid, state, and
osd up and acting sets.

Signed-off-by: Dan Mick <dan.mick@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
src/mon/MonCommands.h
src/mon/PGMap.cc
src/mon/PGMap.h
src/mon/PGMonitor.cc
src/osd/osd_types.cc
src/osd/osd_types.h

index 0980893bf9b27f68006380b4013e7cdac93ed373..aa7b8959f06ec047c1d197c35ce8e8b42439d2cb 100644 (file)
@@ -111,7 +111,7 @@ COMMAND("pg getmap", "get binary pg map to -o/stdout", "pg", "r", "cli,rest")
 COMMAND("pg send_pg_creates", "trigger pg creates to be issued",\
        "pg", "rw", "cli,rest")
 COMMAND("pg dump " \
-       "name=dumpcontents,type=CephChoices,strings=all|summary|sum|pools|osds|pgs,n=N,req=false", \
+       "name=dumpcontents,type=CephChoices,strings=all|summary|sum|pools|osds|pgs|pgs_brief,n=N,req=false", \
        "show human-readable versions of pg map", "pg", "r", "cli,rest")
 COMMAND("pg dump_json " \
        "name=dumpcontents,type=CephChoices,strings=all|summary|sum|pools|osds|pgs,n=N,req=false", \
index 86ad87bd929ea6228fcd3f4a2440bf9eff3ebff0..f6b88fcbfe017215d1ee9708c3c93e25061787cb 100644 (file)
@@ -494,7 +494,7 @@ void PGMap::dirty_all(Incremental& inc)
 void PGMap::dump(Formatter *f) const
 {
   dump_basic(f);
-  dump_pg_stats(f);
+  dump_pg_stats(f, false);
   dump_pool_stats(f);
   dump_osd_stats(f);
 }
@@ -521,7 +521,7 @@ void PGMap::dump_basic(Formatter *f) const
   f->close_section();
 }
 
-void PGMap::dump_pg_stats(Formatter *f) const
+void PGMap::dump_pg_stats(Formatter *f, bool brief) const
 {
   f->open_array_section("pg_stats");
   for (hash_map<pg_t,pg_stat_t>::const_iterator i = pg_stat.begin();
@@ -529,7 +529,10 @@ void PGMap::dump_pg_stats(Formatter *f) const
        ++i) {
     f->open_object_section("pg_stat");
     f->dump_stream("pgid") << i->first;
-    i->second.dump(f);
+    if (brief)
+      i->second.dump_brief(f);
+    else
+      i->second.dump(f);
     f->close_section();
   }
   f->close_section();
index 16c2f84b99e33e35c2dcdcff2be73d08dd77aad9..e59d1b81a205cc48d044653b4442c92901d5d94d 100644 (file)
@@ -155,7 +155,7 @@ public:
 
   void dump(Formatter *f) const; 
   void dump_basic(Formatter *f) const;
-  void dump_pg_stats(Formatter *f) const;
+  void dump_pg_stats(Formatter *f, bool brief) const;
   void dump_pool_stats(Formatter *f) const;
   void dump_osd_stats(Formatter *f) const;
 
index 93b0b0b3828cef19e443ffbc76d8c516fb2de311..ab4a5b3044734382f52b9c61e4fee17c4e0ad381 100644 (file)
@@ -1404,7 +1404,10 @@ bool PGMonitor::preprocess_command(MMonCommand *m)
          pg_map.dump_osd_stats(f.get());
        }
        if (what.count("pgs")) {
-         pg_map.dump_pg_stats(f.get());
+         pg_map.dump_pg_stats(f.get(), false);
+       }
+       if (what.count("pgs_brief")) {
+         pg_map.dump_pg_stats(f.get(), true);
        }
       }
       f->flush(ds);
index fbd5cbbe9a06f94786120018f6b6515aae06f97f..0e8ecb990868ffe46083f5df2add1f87de515245 100644 (file)
@@ -1190,6 +1190,19 @@ void pg_stat_t::dump(Formatter *f) const
   f->close_section();
 }
 
+void pg_stat_t::dump_brief(Formatter *f) const
+{
+  f->dump_string("state", pg_state_string(state));
+  f->open_array_section("up");
+  for (vector<int>::const_iterator p = up.begin(); p != up.end(); ++p)
+    f->dump_int("osd", *p);
+  f->close_section();
+  f->open_array_section("acting");
+  for (vector<int>::const_iterator p = acting.begin(); p != acting.end(); ++p)
+    f->dump_int("osd", *p);
+  f->close_section();
+}
+
 void pg_stat_t::encode(bufferlist &bl) const
 {
   ENCODE_START(13, 8, bl);
index ca3dcc192b0c3f373f3e3b56538429c6dc857e4a..bf04e8e11e384e1257f5b560e803c3b550cb1c01 100644 (file)
@@ -1079,6 +1079,7 @@ struct pg_stat_t {
   }
 
   void dump(Formatter *f) const;
+  void dump_brief(Formatter *f) const;
   void encode(bufferlist &bl) const;
   void decode(bufferlist::iterator &bl);
   static void generate_test_instances(list<pg_stat_t*>& o);