Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit
aa238e5ed50f44a94caf84567267e4f6be8732a2)
Conflicts:
src/crush/CrushTester.cc
in hammer the crushtool validation is via a shell
and not via an internal subprocess utility
src/tools/crushtool.cc
ceph_argparse_withint is preferred to ceph_argparse_witharg
int CrushTester::test_with_crushtool(const string& crushtool,
int max_id,
- int timeout)
+ int timeout,
+ int ruleset)
{
string timeout_string = stringify(timeout);
string opt_max_id = stringify(max_id);
cmd_args.push_back("--test");
cmd_args.push_back("--check");
cmd_args.push_back(opt_max_id.c_str());
+ if (ruleset >= 0) {
+ cmd_args.push_back("--ruleset");
+ cmd_args.push_back(stringify(ruleset).c_str());
+ }
cmd_args.push_back(NULL);
int pipefds[2];
err << "rule " << r << " dne" << std::endl;
continue;
}
+ if (ruleset >= 0 &&
+ crush.get_rule_mask_ruleset(r) != ruleset) {
+ continue;
+ }
int minr = min_rep, maxr = max_rep;
if (min_rep < 0 || max_rep < 0) {
minr = crush.get_rule_mask_min_size(r);
map<int, int> device_weight;
int min_rule, max_rule;
+ int ruleset;
int min_x, max_x;
int min_rep, max_rep;
CrushTester(CrushWrapper& c, ostream& eo)
: crush(c), err(eo),
min_rule(-1), max_rule(-1),
+ ruleset(-1),
min_x(-1), max_x(-1),
min_rep(-1), max_rep(-1),
num_batches(1),
min_rule = max_rule = rule;
}
+ void set_ruleset(int rs) {
+ ruleset = rs;
+ }
+
/**
* check if any bucket/nodes is referencing an unknown name or type
* @param max_id rejects any non-bucket items with id less than this number,
int test();
int test_with_crushtool(const string& crushtool,
int max_id = -1,
- int timeout = 0);
+ int timeout = 0,
+ int ruleset = -1);
};
#endif
exit(EXIT_FAILURE);
}
tester.set_rule(x);
+ } else if (ceph_argparse_withint(args, i, &x, &err, "--ruleset", (char*)NULL)) {
+ if (!err.str().empty()) {
+ cerr << err.str() << std::endl;
+ exit(EXIT_FAILURE);
+ }
+ tester.set_ruleset(x);
} else if (ceph_argparse_withint(args, i, &x, &err, "--batches", (char*)NULL)) {
if (!err.str().empty()) {
cerr << err.str() << std::endl;