summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoao Eduardo Luis <joao.luis@inktank.com>2012-11-21 17:48:25 +0000
committerJoao Eduardo Luis <joao.luis@inktank.com>2012-11-23 19:12:48 +0000
commit95e1fe8822c7cfd39e31f1c5c979cec0d380146e (patch)
treec77d71830b5075c837dc10cf848a5e521077ce51
parentab8327fec05c9c6b96cae537ccf7fd09a9fca18b (diff)
downloadceph-95e1fe8822c7cfd39e31f1c5c979cec0d380146e.tar.gz
mon: PGMonitor: check if pg exists when handling 'pg map <PG>'
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
-rw-r--r--src/mon/PGMonitor.cc17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc
index 2bdfbc4b5eb..dcf9380613b 100644
--- a/src/mon/PGMonitor.cc
+++ b/src/mon/PGMonitor.cc
@@ -991,12 +991,17 @@ bool PGMonitor::preprocess_command(MMonCommand *m)
r = -EINVAL;
if (pgid.parse(m->cmd[2].c_str())) {
vector<int> up, acting;
- pg_t mpgid = mon->osdmon()->osdmap.raw_pg_to_pg(pgid);
- mon->osdmon()->osdmap.pg_to_up_acting_osds(pgid, up, acting);
- ss << "osdmap e" << mon->osdmon()->osdmap.get_epoch()
- << " pg " << pgid << " (" << mpgid << ")"
- << " -> up " << up << " acting " << acting;
- r = 0;
+ if (mon->osdmon()->osdmap.have_pg_pool(pgid.pool())) {
+ pg_t mpgid = mon->osdmon()->osdmap.raw_pg_to_pg(pgid);
+ mon->osdmon()->osdmap.pg_to_up_acting_osds(pgid, up, acting);
+ ss << "osdmap e" << mon->osdmon()->osdmap.get_epoch()
+ << " pg " << pgid << " (" << mpgid << ")"
+ << " -> up " << up << " acting " << acting;
+ r = 0;
+ } else {
+ r = -ENOENT;
+ ss << "pg '" << m->cmd[2] << "' does not exist";
+ }
} else
ss << "invalid pgid '" << m->cmd[2] << "'";
}