From: Loic Dachary Date: Tue, 24 Jan 2017 12:08:32 +0000 (+0100) Subject: crush: verify weights is influenced by the number of replicas X-Git-Tag: v12.0.0~104^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=24cb06a96d94a515bee32ca3229752284d2eb493;p=ceph.git crush: verify weights is influenced by the number of replicas Refs: http://tracker.ceph.com/issues/15653 Signed-off-by: Adam C. Emerson Signed-off-by: Loic Dachary --- diff --git a/src/test/crush/CMakeLists.txt b/src/test/crush/CMakeLists.txt index fc96c9a271c3..f59237775b39 100644 --- a/src/test/crush/CMakeLists.txt +++ b/src/test/crush/CMakeLists.txt @@ -12,3 +12,5 @@ add_executable(unittest_crush ) add_ceph_unittest(unittest_crush ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/unittest_crush) target_link_libraries(unittest_crush global m ${BLKID_LIBRARIES}) + +add_ceph_test(crush_weights.sh ${CMAKE_CURRENT_SOURCE_DIR}/crush_weights.sh) diff --git a/src/test/crush/crush_weights.sh b/src/test/crush/crush_weights.sh new file mode 100755 index 000000000000..52c0f20db320 --- /dev/null +++ b/src/test/crush/crush_weights.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +source $(dirname $0)/../detect-build-env-vars.sh +source $CEPH_ROOT/qa/workunits/ceph-helpers.sh + +read -r -d '' cm <<'EOF' +# devices +device 0 device0 +device 1 device1 +device 2 device2 +device 3 device3 +device 4 device4 +# types +type 0 osd +type 1 domain +type 2 pool +# buckets +domain root { + id -1 # do not change unnecessarily + # weight 5.000 + alg straw2 + hash 0 # rjenkins1 + item device0 weight 10.0 + item device1 weight 10.0 + item device2 weight 10.0 + item device3 weight 10.0 + item device4 weight 1.000 +} +# rules +rule data { + ruleset 0 + type replicated + min_size 1 + max_size 10 + step take root + step choose firstn 0 type osd + step emit +} +EOF + +three=($(echo "$cm" | crushtool -c /dev/fd/0 --test --show-utilization \ + --min-x 1 --max-x 1000000 --num-rep 3 | \ + grep "device \(0\|4\)" | sed -e 's/^.*stored : \([0-9]\+\).*$/\1/')) + +if test $(echo "scale=5; (10 - ${three[0]}/${three[1]}) < .75" | bc) = 1; then + echo 3 replicas weights better distributed than they should be. 1>&2 + exit 1 +fi + +one=($(echo "$cm" | crushtool -c /dev/fd/0 --test --show-utilization \ + --min-x 1 --max-x 1000000 --num-rep 1 | \ + grep "device \(0\|4\)" | sed -e 's/^.*stored : \([0-9]\+\).*$/\1/')) + +if test $(echo "scale=5; (10 - ${one[0]}/${one[1]}) > .1 || (10 - ${one[0]}/${one[1]}) < -.1" | bc) = 1; then + echo 1 replica not distributed as they should be. 1>&2 + exit 1 +fi