]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: make 'osd map <poolname> <objectname>' return pg and osd mapping
authorSage Weil <sage@newdream.net>
Wed, 2 May 2012 22:32:17 +0000 (15:32 -0700)
committerSage Weil <sage@newdream.net>
Wed, 2 May 2012 22:32:17 +0000 (15:32 -0700)
This keeps coming up and is annoying to do manually.

Fixes: #2141
Signed-off-by: Sage Weil <sage@newdream.net>
Reviewed-by: Greg Farnum <gregory.farnum@dreamhost.com>
src/mon/OSDMonitor.cc

index c7f1564d98d039e8a5e0016da15a5119717f12cc..14878c4821ebc0b70297243f6ce9357d2299a6c7 100644 (file)
@@ -1544,6 +1544,25 @@ bool OSDMonitor::preprocess_command(MMonCommand *m)
        } else ss << "specify osd number or *";
       }
     }
+    else if (m->cmd[1] == "map" && m->cmd.size() == 4) {
+      int64_t pool = osdmap.lookup_pg_pool_name(m->cmd[2].c_str());
+      if (pool < 0) {
+       ss << "pool " << m->cmd[2] << " dne";
+       r = -ENOENT;
+      } else {
+       object_locator_t oloc(pool);
+       object_t oid(m->cmd[3]);
+       pg_t pgid = osdmap.object_locator_to_pg(oid, oloc);
+       pg_t mpgid = osdmap.raw_pg_to_pg(pgid);
+       vector<int> up, acting;
+       osdmap.pg_to_up_acting_osds(mpgid, up, acting);
+       ss << "osdmap e" << osdmap.get_epoch()
+          << " pool '" << m->cmd[2] << "' (" << pool << ") object '" << oid << "' ->"
+          << " pg " << pgid << " (" << mpgid << ")"
+          << " -> up " << up << " acting " << acting;
+       r = 0;
+      }
+    }
     else if ((m->cmd[1] == "scrub" || m->cmd[1] == "repair")) {
       if (m->cmd.size() <= 2) {
        r = -EINVAL;