"name=pool,type=CephInt,req=false " \
"name=states,type=CephChoices,strings=active|clean|down|scrubbing|degraded|inconsistent|peering|repair|recovering|backfill_wait|incomplete|stale|remapped|deep_scrub|backfill|backfill_toofull|recovery_wait|undersized|activating|peered,n=N,req=false ", \
"list pg with specific pool, osd, state", "pg", "r", "cli,rest")
-COMMAND("pg map name=pgid,type=CephPgid", "show mapping of pg to osds", \
- "pg", "r", "cli,rest")
COMMAND("pg dump_stuck " \
"name=stuckops,type=CephChoices,strings=inactive|unclean|stale|undersized|degraded,n=N,req=false " \
"name=threshold,type=CephInt,req=false",
"set ratio at which pgs are considered nearly full", \
"pg", "rw", "cli,rest")
+COMMAND("pg map name=pgid,type=CephPgid", "show mapping of pg to osds", \
+ "pg", "r", "cli,rest")
+
/*
* auth commands AuthMonitor.cc
*/
mdsmon()->dispatch(op);
return;
}
- if (module == "osd") {
+ if (module == "osd" || prefix == "pg map") {
osdmon()->dispatch(op);
return;
}
<< pg_vector_string(acting) << ", p" << acting_p << ")";
rdata.append(ds);
}
+
+ } else if (prefix == "pg map") {
+ pg_t pgid;
+ string pgidstr;
+ cmd_getval(g_ceph_context, cmdmap, "pgid", pgidstr);
+ if (!pgid.parse(pgidstr.c_str())) {
+ ss << "invalid pgid '" << pgidstr << "'";
+ r = -EINVAL;
+ goto reply;
+ }
+ vector<int> up, acting;
+ if (!osdmap.have_pg_pool(pgid.pool())) {
+ ss << "pg '" << pgidstr << "' does not exist";
+ r = -ENOENT;
+ goto reply;
+ }
+ pg_t mpgid = osdmap.raw_pg_to_pg(pgid);
+ osdmap.pg_to_up_acting_osds(pgid, up, acting);
+ if (f) {
+ f->open_object_section("pg_map");
+ f->dump_unsigned("epoch", osdmap.get_epoch());
+ f->dump_stream("raw_pgid") << pgid;
+ f->dump_stream("pgid") << mpgid;
+
+ f->open_array_section("up");
+ for (vector<int>::iterator it = up.begin(); it != up.end(); ++it)
+ f->dump_int("up_osd", *it);
+ f->close_section();
+
+ f->open_array_section("acting");
+ for (vector<int>::iterator it = acting.begin(); it != acting.end(); ++it)
+ f->dump_int("acting_osd", *it);
+ f->close_section();
+
+ f->close_section();
+ f->flush(rdata);
+ } else {
+ ds << "osdmap e" << osdmap.get_epoch()
+ << " pg " << pgid << " (" << mpgid << ")"
+ << " -> up " << up << " acting " << acting;
+ rdata.append(ds);
+ }
+ goto reply;
+
} else if ((prefix == "osd scrub" ||
prefix == "osd deep-scrub" ||
prefix == "osd repair")) {
return 0;
}
- if (prefix == "pg map") {
- pg_t pgid;
- string pgidstr;
- cmd_getval(g_ceph_context, cmdmap, "pgid", pgidstr);
- if (!pgid.parse(pgidstr.c_str())) {
- *ss << "invalid pgid '" << pgidstr << "'";
- return -EINVAL;
- }
- vector<int> up, acting;
- if (!osdmap.have_pg_pool(pgid.pool())) {
- *ss << "pg '" << pgidstr << "' does not exist";
- return -ENOENT;
- }
- pg_t mpgid = osdmap.raw_pg_to_pg(pgid);
- osdmap.pg_to_up_acting_osds(pgid, up, acting);
- if (f) {
- f->open_object_section("pg_map");
- f->dump_unsigned("epoch", osdmap.get_epoch());
- f->dump_stream("raw_pgid") << pgid;
- f->dump_stream("pgid") << mpgid;
-
- f->open_array_section("up");
- for (vector<int>::iterator it = up.begin(); it != up.end(); ++it)
- f->dump_int("up_osd", *it);
- f->close_section();
-
- f->open_array_section("acting");
- for (vector<int>::iterator it = acting.begin(); it != acting.end(); ++it)
- f->dump_int("acting_osd", *it);
- f->close_section();
-
- f->close_section();
- f->flush(*odata);
- } else {
- ds << "osdmap e" << osdmap.get_epoch()
- << " pg " << pgid << " (" << mpgid << ")"
- << " -> up " << up << " acting " << acting;
- odata->append(ds);
- }
- return 0;
- }
-
if (prefix == "pg debug") {
string debugop;
cmd_getval(g_ceph_context, cmdmap, "debugop", debugop,