]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osdmaptool: allow user to specify pool for test-map-object
authorSamuel Just <sam.just@inktank.com>
Wed, 16 Jan 2013 22:21:47 +0000 (14:21 -0800)
committerSamuel Just <sam.just@inktank.com>
Thu, 17 Jan 2013 00:19:38 +0000 (16:19 -0800)
Fixes: #3820
Backport: bobtail
Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Gregory Farnum <greg@inktank.com>
src/osdmaptool.cc

index d367c36bf18a8ded70fae2b11b8737560c43f6d6..6df7eb038c313414094ba57f2e49f6881c890dfd 100644 (file)
@@ -35,6 +35,8 @@ void usage()
   cout << "   --export-crush <file>   write osdmap's crush map to <file>" << std::endl;
   cout << "   --import-crush <file>   replace osdmap's crush map with <file>" << std::endl;
   cout << "   --test-map-pg <pgid>    map a pgid to osds" << std::endl;
+  cout << "   --test-map-object <objectname> [--pool <poolid>] map an object to osds"
+       << std::endl;
   exit(1);
 }
 
@@ -66,6 +68,7 @@ int main(int argc, const char **argv)
   bool test_crush = false;
   int range_first = -1;
   int range_last = -1;
+  int pool = 0;
 
   std::string val;
   std::ostringstream err;
@@ -112,6 +115,7 @@ int main(int argc, const char **argv)
       test_crush = true;
     } else if (ceph_argparse_withint(args, i, &range_first, &err, "--range_first", (char*)NULL)) {
     } else if (ceph_argparse_withint(args, i, &range_last, &err, "--range_last", (char*)NULL)) {
+    } else if (ceph_argparse_withint(args, i, &pool, &err, "--pool", (char*)NULL)) {
     } else {
       ++i;
     }
@@ -242,11 +246,14 @@ int main(int argc, const char **argv)
 
   if (!test_map_object.empty()) {
     object_t oid(test_map_object);
-    ceph_object_layout ol = osdmap.make_object_layout(oid, 0);
+    if (!osdmap.have_pg_pool(pool)) {
+      cerr << "There is no pool " << pool << std::endl;
+      exit(1);
+    }
+    object_locator_t loc(pool);
+    pg_t raw_pgid = osdmap.object_locator_to_pg(oid, loc);
+    pg_t pgid = osdmap.raw_pg_to_pg(raw_pgid);
     
-    pg_t pgid;
-    pgid = ol.ol_pgid;
-
     vector<int> acting;
     osdmap.pg_to_acting_osds(pgid, acting);
     cout << " object '" << oid