From c0b0f52ddbd4e22998a36addfb32f27614183e19 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Tue, 26 May 2015 15:35:10 +0800 Subject: [PATCH] crushtool: enable check against max_id add an argument "max_id" for "--check-names" to check if any item has an id greater or equal to given "max_id" in crush map. Note: edited since we do not have the fix introduced in 46103b2 in hammer. Signed-off-by: Kefu Chai (cherry picked from commit d0658dd3cdf072b2a7c2a1986f8785a697c591ee) --- src/test/cli/crushtool/check-names.empty.t | 3 ++- src/test/cli/crushtool/check-names.max-id.t | 7 +++++++ src/test/cli/crushtool/help.t | 3 ++- src/tools/crushtool.cc | 10 ++++++---- 4 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 src/test/cli/crushtool/check-names.max-id.t diff --git a/src/test/cli/crushtool/check-names.empty.t b/src/test/cli/crushtool/check-names.empty.t index 9e30790ca316d..755e9317b910c 100644 --- a/src/test/cli/crushtool/check-names.empty.t +++ b/src/test/cli/crushtool/check-names.empty.t @@ -1,4 +1,5 @@ $ crushtool -c "$TESTDIR/check-names.empty.crushmap.txt" -o "$TESTDIR/check-names.empty.crushmap" - $ crushtool -i "$TESTDIR/check-names.empty.crushmap" --check-names + $ crushtool -i "$TESTDIR/check-names.empty.crushmap" --check 0 unknown type name: item#0 + [1] $ rm -f "$TESTDIR/check-names.empty.crushmap" diff --git a/src/test/cli/crushtool/check-names.max-id.t b/src/test/cli/crushtool/check-names.max-id.t new file mode 100644 index 0000000000000..0fa5c0127369d --- /dev/null +++ b/src/test/cli/crushtool/check-names.max-id.t @@ -0,0 +1,7 @@ + $ crushtool -i "$TESTDIR/simple.template" --add-item 0 1.0 device0 --loc host host0 --loc cluster cluster0 -o check-names.crushmap > /dev/null + $ crushtool -i check-names.crushmap --add-item 1 1.0 device1 --loc host host0 --loc cluster cluster0 -o check-names.crushmap > /dev/null + $ crushtool -i check-names.crushmap --check-names=2 + $ crushtool -i check-names.crushmap --add-item 2 1.0 device2 --loc host host0 --loc cluster cluster0 -o check-names.crushmap > /dev/null + $ crushtool -i check-names.crushmap --check-names=2 + item id too large: item#2 + [1] diff --git a/src/test/cli/crushtool/help.t b/src/test/cli/crushtool/help.t index 784c6275c4fba..ab54bd5a5122b 100644 --- a/src/test/cli/crushtool/help.t +++ b/src/test/cli/crushtool/help.t @@ -33,7 +33,8 @@ Options for the display/test stage - --check-names check if any item is referencing an unknown name/type + --check-names max_id + check if any item is referencing an unknown name/type -i mapfn --show-location id show location for given device id --show-utilization show OSD usage diff --git a/src/tools/crushtool.cc b/src/tools/crushtool.cc index c8cf24ce632ac..4881b0ae3c04e 100644 --- a/src/tools/crushtool.cc +++ b/src/tools/crushtool.cc @@ -138,7 +138,8 @@ void usage() cout << "\n"; cout << "Options for the display/test stage\n"; cout << "\n"; - cout << " --check-names check if any item is referencing an unknown name/type\n"; + cout << " --check-names max_id\n"; + cout << " check if any item is referencing an unknown name/type\n"; cout << " -i mapfn --show-location id\n"; cout << " show location for given device id\n"; cout << " --show-utilization show OSD usage\n"; @@ -196,6 +197,7 @@ int main(int argc, const char **argv) bool compile = false; bool decompile = false; bool check_names = false; + int max_id = -1; bool test = false; bool display = false; bool tree = false; @@ -281,7 +283,7 @@ int main(int argc, const char **argv) } else if (ceph_argparse_witharg(args, i, &val, "-c", "--compile", (char*)NULL)) { srcfn = val; compile = true; - } else if (ceph_argparse_flag(args, i, "--check-names", (char*)NULL)) { + } else if (ceph_argparse_withint(args, i, &max_id, &err, "--check-names", (char*)NULL)) { check_names = true; } else if (ceph_argparse_flag(args, i, "-t", "--test", (char*)NULL)) { test = true; @@ -794,7 +796,7 @@ int main(int argc, const char **argv) } if (modified) { - crush.finalize(); + crush.finalize(); if (outfn.empty()) { cout << me << " successfully built or modified map. Use '-o ' to write it out." << std::endl; @@ -812,7 +814,7 @@ int main(int argc, const char **argv) } if (check_names) { - if (!tester.check_name_maps()) { + if (!tester.check_name_maps(max_id)) { exit(1); } } -- 2.39.5