From: Sage Weil Date: Tue, 4 Feb 2014 00:32:48 +0000 (-0800) Subject: osdmaptool: allow a completely random placement X-Git-Tag: v0.78~219^2~4 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=9caaef716f947665d282bf933cb52442b89594e3;p=ceph.git osdmaptool: allow a completely random placement This useful for comparison purposes and sanity-checking the results. Signed-off-by: Sage Weil --- diff --git a/src/tools/osdmaptool.cc b/src/tools/osdmaptool.cc index 1d803830d4b9e..5464c800aa24c 100644 --- a/src/tools/osdmaptool.cc +++ b/src/tools/osdmaptool.cc @@ -37,6 +37,7 @@ void usage() cout << " --test-map-pgs map all pgs" << std::endl; cout << " --mark-up-in mark osds up and in (but do not persist)" << std::endl; cout << " --clear-temp clear pg_temp and primary_temp" << std::endl; + cout << " --test-random do random placements" << std::endl; cout << " --test-map-pg map a pgid to osds" << std::endl; cout << " --test-map-object [--pool ] map an object to osds" << std::endl; @@ -75,6 +76,7 @@ int main(int argc, const char **argv) bool clear_temp = false; bool test_map_pgs = false; int test_pool = -1; + bool test_random = false; std::string val; std::ostringstream err; @@ -103,6 +105,8 @@ int main(int argc, const char **argv) clear_temp = true; } else if (ceph_argparse_flag(args, i, "--test-map-pgs", (char*)NULL)) { test_map_pgs = true; + } else if (ceph_argparse_flag(args, i, "--test-random", (char*)NULL)) { + test_random = true; } else if (ceph_argparse_withint(args, i, &test_pool, &err, "--pool", (char*)NULL)) { } else if (ceph_argparse_flag(args, i, "--clobber", (char*)NULL)) { clobber = true; @@ -309,6 +313,8 @@ int main(int argc, const char **argv) vector first_count(n, 0); vector primary_count(n, 0); vector size(30, 0); + if (test_random) + srand(getpid()); const map& pools = osdmap.get_pools(); for (map::const_iterator p = pools.begin(); p != pools.end(); ++p) { @@ -321,7 +327,15 @@ int main(int argc, const char **argv) vector osds; int primary; - osdmap.pg_to_acting_osds(pgid, &osds, &primary); + if (test_random) { + osds.resize(p->second.size); + for (unsigned i=0; i