diff options
author | Dan Mick <dan.mick@inktank.com> | 2013-08-02 21:26:51 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-08-05 13:06:42 -0700 |
commit | 42582f02f9612f9bdb3d0e5415c12240c52dad50 (patch) | |
tree | 52a7c824e5bebb0253c26acda3a9c35aa037bacb | |
parent | 5a495b1ee671445f47020d9914b7f2405520bd94 (diff) | |
download | ceph-42582f02f9612f9bdb3d0e5415c12240c52dad50.tar.gz |
mon/PGMonitor: add 'pg dump pgs_brief' subcommand
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>
-rw-r--r-- | src/mon/MonCommands.h | 2 | ||||
-rw-r--r-- | src/mon/PGMap.cc | 9 | ||||
-rw-r--r-- | src/mon/PGMap.h | 2 | ||||
-rw-r--r-- | src/mon/PGMonitor.cc | 5 | ||||
-rw-r--r-- | src/osd/osd_types.cc | 13 | ||||
-rw-r--r-- | src/osd/osd_types.h | 1 |
6 files changed, 26 insertions, 6 deletions
diff --git a/src/mon/MonCommands.h b/src/mon/MonCommands.h index 0980893bf9b..aa7b8959f06 100644 --- a/src/mon/MonCommands.h +++ b/src/mon/MonCommands.h @@ -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", \ diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index 86ad87bd929..f6b88fcbfe0 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -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(); diff --git a/src/mon/PGMap.h b/src/mon/PGMap.h index 16c2f84b99e..e59d1b81a20 100644 --- a/src/mon/PGMap.h +++ b/src/mon/PGMap.h @@ -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; diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index 93b0b0b3828..ab4a5b30447 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -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); diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index fbd5cbbe9a0..0e8ecb99086 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -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); diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index ca3dcc192b0..bf04e8e11e3 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -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); |