]> git.ipfire.org Git - thirdparty/mdadm.git/blame - tests/10ddf-fail-spare
Free map to avoid resource leak issues
[thirdparty/mdadm.git] / tests / 10ddf-fail-spare
CommitLineData
2bcf1873 1# Test suggested by Albert Pauw: Create, fail one disk, have mdmon
2# activate the spare,
3# then run create again. Shouldn't use the failed disk for Create,
6b924b1e 4. tests/env-ddf-template
5
2bcf1873 6tmp=$(mktemp /tmp/mdtest-XXXXXX)
7rm -f $tmp
8
6b924b1e 9mdadm --zero-superblock $dev8 $dev9 $dev10 $dev11 $dev12 $dev13
10mdadm -CR $container -e ddf -l container -n 5 $dev8 $dev9 $dev10 $dev11 $dev12
11
2bcf1873 12mdadm -CR $member0 -l raid1 -n 2 $container
6b924b1e 13#$dir/mdadm -CR $member0 -l raid1 -n 2 $container >/tmp/mdmon.txt 2>&1
14
15check wait
16
17set -- $(get_raiddisks $member0)
18fail0=$1
2bcf1873 19mdadm --fail $member0 $fail0
6b924b1e 20
2bcf1873 21# To make sure the spare is activated, we may have to sleep
22# 2s has always been enough for me
23sleep 2
6b924b1e 24check wait
25
2bcf1873 26# This test can succeed both ways - if spare was activated
27# before new array was created, we see only member 0.
28# otherwise, we see both, adn member0 is degraded because the
29# new array grabbed the spare
30# which case occurs depends on the sleep time above.
31ret=0
6b924b1e 32if mdadm -CR $member1 -l raid5 -n 3 $container; then
2bcf1873 33 # Creation successful - must have been quicker than spare activation
34
35 check wait
6b924b1e 36 set -- $(get_raiddisks $member1)
2bcf1873 37 if [ $1 = $fail0 -o $2 = $fail0 -o $3 = $fail0 ]; then
38 echo ERROR: $member1 must not contain $fail0: $@
39 ret=1
40 fi
6b924b1e 41 d1=$1
2bcf1873 42 mdadm -E $d1 >$tmp
43 if ! grep -q 'state\[1\] : Optimal, Consistent' $tmp; then
44 echo ERROR: member 1 should be optimal in meta data
45 ret=1
46 fi
47 state0=Degraded
6b924b1e 48else
2bcf1873 49 # Creation unsuccessful - spare was used for member 0
50 state0=Optimal
51fi
52
53# need to delay a little bit, sometimes the meta data aren't
54# up-to-date yet
55sleep 0.5
56set -- $(get_raiddisks $member0)
57if [ $1 = $fail0 -o $2 = $fail0 ]; then
58 echo ERROR: $member0 must not contain $fail0: $@
59 ret=1
6b924b1e 60fi
2bcf1873 61d0=$1
62
63[ -f $tmp ] || mdadm -E $d0 >$tmp
64
65if ! grep -q 'state\[0\] : '$state0', Consistent' $tmp; then
66 echo ERROR: member 0 should be $state0 in meta data
67 ret=1
68fi
69if ! grep -q 'Offline, Failed' $tmp; then
70 echo ERROR: Failed disk expected in meta data
71 ret=1
72fi
73if [ $ret -eq 1 ]; then
74 cat /proc/mdstat
75 mdadm -E $d0
76 mdadm -E $d1
77 mdadm -E $fail0
78fi
79
80[ -f /tmp/mdmon.txt ] && {
81 cat /tmp/mdmon.txt
82 rm -f /tmp/mdmon.txt
83}
6b924b1e 84
2bcf1873 85rm -f $tmp
86[ $ret -eq 0 ]