mirror of
https://github.com/ceph/ceph
synced 2024-12-28 06:23:08 +00:00
crush/CrushCompiler: error out as long as parse fails
do not output compiled crush map if anything goes wrong when parsing crush map. Fixes: http://tracker.ceph.com/issues/17306 Signed-off-by: Kefu Chai <kchai@redhat.com>
This commit is contained in:
parent
371eb41b15
commit
b2c0a079dc
@ -746,8 +746,8 @@ int CrushCompiler::parse_crush(iter_t const& i)
|
||||
{
|
||||
find_used_bucket_ids(i);
|
||||
|
||||
int r = 0;
|
||||
for (iter_t p = i->children.begin(); p != i->children.end(); p++) {
|
||||
int r = 0;
|
||||
switch (p->value.id().to_long()) {
|
||||
case crush_grammar::_tunable:
|
||||
r = parse_tunable(p);
|
||||
@ -767,11 +767,11 @@ int CrushCompiler::parse_crush(iter_t const& i)
|
||||
default:
|
||||
assert(0);
|
||||
}
|
||||
if (r < 0) {
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
//err << "max_devices " << crush.get_max_devices() << std::endl;
|
||||
crush.finalize();
|
||||
|
||||
|
@ -9,3 +9,7 @@
|
||||
# worked
|
||||
$ cmp need_tree_order.crush nto.conf
|
||||
$ cmp nto.compiled nto.recompiled
|
||||
|
||||
$ crushtool -c missing-bucket.crushmap.txt
|
||||
in rule 'rule-bad' item 'root-404' not defined
|
||||
[1]
|
||||
|
39
src/test/cli/crushtool/missing-bucket.crushmap.txt
Normal file
39
src/test/cli/crushtool/missing-bucket.crushmap.txt
Normal file
@ -0,0 +1,39 @@
|
||||
device 0 device0
|
||||
device 1 device1
|
||||
device 2 device2
|
||||
device 3 device3
|
||||
device 4 device4
|
||||
|
||||
type 0 osd
|
||||
type 1 domain
|
||||
|
||||
domain root {
|
||||
id -1
|
||||
alg straw
|
||||
hash 0
|
||||
item device0 weight 1.000
|
||||
item device1 weight 1.000
|
||||
item device2 weight 1.000
|
||||
item device3 weight 1.000
|
||||
item device4 weight 1.000
|
||||
}
|
||||
|
||||
rule rule-bad {
|
||||
ruleset 0
|
||||
type replicated
|
||||
min_size 1
|
||||
max_size 10
|
||||
step take root-404
|
||||
step choose firstn 0 type osd
|
||||
step emit
|
||||
}
|
||||
|
||||
rule rule-good {
|
||||
ruleset 1
|
||||
type erasure
|
||||
min_size 1
|
||||
max_size 10
|
||||
step take root
|
||||
step choose indep 0 type osd
|
||||
step emit
|
||||
}
|
Loading…
Reference in New Issue
Block a user