summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Mick <dan.mick@inktank.com>2013-08-02 21:26:51 -0700
committerSage Weil <sage@inktank.com>2013-08-05 13:06:42 -0700
commit42582f02f9612f9bdb3d0e5415c12240c52dad50 (patch)
tree52a7c824e5bebb0253c26acda3a9c35aa037bacb
parent5a495b1ee671445f47020d9914b7f2405520bd94 (diff)
downloadceph-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.h2
-rw-r--r--src/mon/PGMap.cc9
-rw-r--r--src/mon/PGMap.h2
-rw-r--r--src/mon/PGMonitor.cc5
-rw-r--r--src/osd/osd_types.cc13
-rw-r--r--src/osd/osd_types.h1
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);