blob: 64f854541644914626aa4c4cb2337787563b4711 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#!/usr/bin/env bash
source $(dirname $0)/../detect-build-env-vars.sh
if [ `uname` = FreeBSD ]; then
SED=gsed
else
SED=sed
fi
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.00000
alg straw2
hash 0 # rjenkins1
item device0 weight 10.00000
item device1 weight 10.00000
item device2 weight 10.00000
item device3 weight 10.00000
item device4 weight 1.00000
}
# rules
rule data {
id 0
type replicated
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
|