]>
Commit | Line | Data |
---|---|---|
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 | 6 | tmp=$(mktemp /tmp/mdtest-XXXXXX) |
7 | rm -f $tmp | |
8 | ||
6b924b1e | 9 | mdadm --zero-superblock $dev8 $dev9 $dev10 $dev11 $dev12 $dev13 |
10 | mdadm -CR $container -e ddf -l container -n 5 $dev8 $dev9 $dev10 $dev11 $dev12 | |
11 | ||
2bcf1873 | 12 | mdadm -CR $member0 -l raid1 -n 2 $container |
6b924b1e | 13 | #$dir/mdadm -CR $member0 -l raid1 -n 2 $container >/tmp/mdmon.txt 2>&1 |
14 | ||
15 | check wait | |
16 | ||
17 | set -- $(get_raiddisks $member0) | |
18 | fail0=$1 | |
2bcf1873 | 19 | mdadm --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 | |
23 | sleep 2 | |
6b924b1e | 24 | check 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. | |
31 | ret=0 | |
6b924b1e | 32 | if 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 | 48 | else |
2bcf1873 | 49 | # Creation unsuccessful - spare was used for member 0 |
50 | state0=Optimal | |
51 | fi | |
52 | ||
53 | # need to delay a little bit, sometimes the meta data aren't | |
54 | # up-to-date yet | |
55 | sleep 0.5 | |
56 | set -- $(get_raiddisks $member0) | |
57 | if [ $1 = $fail0 -o $2 = $fail0 ]; then | |
58 | echo ERROR: $member0 must not contain $fail0: $@ | |
59 | ret=1 | |
6b924b1e | 60 | fi |
2bcf1873 | 61 | d0=$1 |
62 | ||
63 | [ -f $tmp ] || mdadm -E $d0 >$tmp | |
64 | ||
65 | if ! grep -q 'state\[0\] : '$state0', Consistent' $tmp; then | |
66 | echo ERROR: member 0 should be $state0 in meta data | |
67 | ret=1 | |
68 | fi | |
69 | if ! grep -q 'Offline, Failed' $tmp; then | |
70 | echo ERROR: Failed disk expected in meta data | |
71 | ret=1 | |
72 | fi | |
73 | if [ $ret -eq 1 ]; then | |
74 | cat /proc/mdstat | |
75 | mdadm -E $d0 | |
76 | mdadm -E $d1 | |
77 | mdadm -E $fail0 | |
78 | fi | |
79 | ||
80 | [ -f /tmp/mdmon.txt ] && { | |
81 | cat /tmp/mdmon.txt | |
82 | rm -f /tmp/mdmon.txt | |
83 | } | |
6b924b1e | 84 | |
2bcf1873 | 85 | rm -f $tmp |
86 | [ $ret -eq 0 ] |