From ace65fec8baf56b4ec44c0385562bd876eea3263 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Fri, 21 Feb 2014 13:25:17 -0800 Subject: [PATCH] OSD: fix query for ec pgs We need to parse a pg_t and translate it into an spg_t. Signed-off-by: Samuel Just --- src/osd/OSD.cc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index cb132ba77ff0..bfb13a54ffcc 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -4211,7 +4211,7 @@ void OSD::do_command(Connection *con, tid_t tid, vector& cmd, bufferlist prefix == "mark_unfound_lost" || prefix == "list_missing") )) { - spg_t pgid; + pg_t pgid; if (!cmd_getval(cct, cmdmap, "pgid", pgidstr)) { ss << "no pgid specified"; @@ -4220,16 +4220,19 @@ void OSD::do_command(Connection *con, tid_t tid, vector& cmd, bufferlist ss << "couldn't parse pgid '" << pgidstr << "'"; r = -EINVAL; } else { - PG *pg = _lookup_lock_pg(pgid); - if (!pg) { - ss << "i don't have pgid " << pgid; - r = -ENOENT; - } else { + spg_t pcand; + if (osdmap->get_primary_shard(pgid, &pcand) && + _have_pg(pcand)) { + PG *pg = _lookup_lock_pg(pcand); + assert(pg); // simulate pg cmd= for pg->do-command if (prefix != "pg") cmd_putval(cct, cmdmap, "cmd", prefix); r = pg->do_command(cmdmap, ss, data, odata); pg->unlock(); + } else { + ss << "i don't have pgid " << pgid; + r = -ENOENT; } } } -- 2.47.3