}
}
-int CrushWrapper::add_simple_rule(string name, string root_name, string failure_domain_name)
+int CrushWrapper::add_simple_rule(string name, string root_name, string failure_domain_name,
+ ostream *err)
{
- if (rule_exists(name))
+ if (rule_exists(name)) {
+ if (err)
+ *err << "rule " << name << " exists";
return -EEXIST;
- if (!name_exists(root_name))
+ }
+ if (!name_exists(root_name)) {
+ if (err)
+ *err << "root item " << root_name << " does not exist";
return -ENOENT;
+ }
int root = get_item_id(root_name);
int type = 0;
if (failure_domain_name.length()) {
type = get_type_id(failure_domain_name);
if (type < 0) {
+ if (err)
+ *err << "unknown type " << failure_domain_name;
return -EINVAL;
}
}
return set_rule_step(ruleno, step, CRUSH_RULE_EMIT, 0, 0);
}
- int add_simple_rule(string name, string root_name, string failure_domain_type);
+ int add_simple_rule(string name, string root_name, string failure_domain_type,
+ ostream *err = 0);
int remove_rule(int ruleno);
ss << "rule " << name << " already exists";
err = 0;
} else {
- int rule = newcrush.add_simple_rule(name, root, type);
+ int rule = newcrush.add_simple_rule(name, root, type, &ss);
if (rule < 0) {
err = rule;
goto out;