* the "osd tree dump" command enumerates all buckets/osds found in either the
crush map or the osd map. but the newly set crushmap is not validated for
the dangling references, so we need to check to see if any item in new crush
map is referencing unknown type/name when a new crush map is sent to
monitor, reject it if any.
Fixes: #11680
Signed-off-by: Kefu Chai <kchai@redhat.com>
dout(10) << " testing map" << dendl;
stringstream ess;
CrushTester tester(crush, ess);
+ if (!tester.check_name_maps()) {
+ err = -EINVAL;
+ ss << ess.str();
+ goto reply;
+ }
// XXX: Use mon_lease as a timeout value for crushtool.
// If the crushtool consistently takes longer than 'mon_lease' seconds,
// then we would consistently trigger an election before the command
./ceph osd crush rename-bucket nonexistent something 2>&1 | grep "Error ENOENT" || return 1
}
+function TEST_crush_reject_empty() {
+ local dir=$1
+ run_mon $dir a || return 1
+ # should have at least one OSD
+ run_osd $dir 0 || return 1
+
+ local empty_map=$dir/empty_map
+ :> $empty_map.txt
+ ./crushtool -c $empty_map.txt -o $empty_map.map || return 1
+ expect_failure $dir "Error EINVAL" \
+ ./ceph osd setcrushmap -i $empty_map.map || return 1
+}
+
main osd-crush "$@"
# Local Variables: