]> git.ipfire.org Git - thirdparty/mdadm.git/blame - tests/10ddf-incremental-wrong-order
mdadm: improve the dlm locking mechanism for clustered raid
[thirdparty/mdadm.git] / tests / 10ddf-incremental-wrong-order
CommitLineData
21529ab3 1# An array is assembled incompletely. Some disks will
2# have later metadata than others.
3# The array is then reassembled in the "wrong" order -
4# older meta data first.
5# This FAILS with mdadm 3.3
6. tests/env-ddf-template
7tmp=$(mktemp /tmp/mdtest-XXXXXX)
8rm -f $tmp /var/tmp/mdmon.log
9ret=0
10
11mdadm -CR $container -e ddf -n 4 $dev8 $dev9 $dev10 $dev11
12ddf_check container 4
13
14mdadm -CR $member1 -n 4 -l 10 $dev8 $dev10 $dev9 $dev11 -z 10000
15mdadm -CR $member0 -n 2 -l 1 $dev8 $dev9 -z 10000
16
3c899cab
N
17mdadm --wait $member0 || true
18mdadm --wait $member1 || true
21529ab3 19
d51e39c0
N
20mke2fs -F $member0
21mke2fs -F $member1
21529ab3 22sha_0a=$(sha1_sum $member0)
23sha_1a=$(sha1_sum $member1)
24
25mdadm -Ss
26sleep 1
27
28# Add all devices except those for $member0
29mdadm -I $dev10
30mdadm -I $dev11
31
32# Start runnable members ($member1) and write
7d63efc8 33mdadm -IRs || true
21529ab3 34e2fsck -fy $member1
35sha_1b=$(sha1_sum $member1)
36
37mdadm -Ss
38sleep 1
39
40# Seq number should be different now
41seq8a=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p')
42seq10a=$(mdadm -E $dev10 | sed -n 's/^ *Seq : //p')
43
44if [ $seq8a -ge $seq10a ]; then
45 ret=1
46 echo ERROR: sequential number of $dev10 not bigger than $dev8
47fi
48if [ x$sha_1a = x$sha_1b ]; then
49 ret=1
50 echo ERROR: sha1sums equal after write
51fi
52
53#[ -f /var/tmp/mdmon.log ] && cat /var/tmp/mdmon.log
54
bcbb92d4 55# Now reassemble
21529ab3 56# Note that we add the previously missing disks first.
57# $dev10 should have a higher seq number than $dev8
58for d in $dev8 $dev9 $dev10 $dev11; do
bcbb92d4 59 mdadm -I $d
21529ab3 60done
61
7d63efc8 62mdadm -IRs || true
21529ab3 63sha_0c=$(sha1_sum $member0)
64sha_1c=$(sha1_sum $member1)
65
66mdadm -Ss
67sleep 1
68
69seq8c=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p')
70seq10c=$(mdadm -E $dev10 | sed -n 's/^ *Seq : //p')
71
72if [ x$sha_0a != x$sha_0c ]; then
73 ret=1
74 echo ERROR: sha1sum of $member0 has changed
75fi
76if [ x$sha_1b != x$sha_1c ]; then
77 ret=1
78 echo ERROR: sha1sum of $member1 has changed
79fi
80if [ \( $seq10a -ge $seq10c \) -o \( $seq8c -ne $seq10c \) ]; then
81 ret=1
82 echo ERROR: sequential numbers are wrong
83fi
84
85# Expect consistent state
86for d in $dev10 $dev8; do
87 mdadm -E $d>$tmp
88 for x in 0 1; do
89 egrep 'state\['$x'\] : Optimal, Consistent' $tmp || {
90 ret=1
91 echo ERROR: $member0 has unexpected state on $d
92 }
93 done
94 if [ x$(egrep -c 'active/Online$' $tmp) != x4 ]; then
95 ret=1
96 echo ERROR: unexpected number of online disks on $d
97 fi
98done
99
100# Now try assembly
101if mdadm -A $container $dev8 $dev9 $dev10 $dev11; then
102 mdadm -IR $container
103 sha_0d=$(sha1_sum $member0)
104 sha_1d=$(sha1_sum $member1)
105 mdadm -Ss
106 sleep 1
107 seq8d=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p')
108 seq10d=$(mdadm -E $dev10 | sed -n 's/^ *Seq : //p')
109 if [ x$sha_0a != x$sha_0d ]; then
110 ret=1
111 echo ERROR: sha1sum of $member0 has changed
112 fi
113 if [ x$sha_1b != x$sha_1d ]; then
114 ret=1
115 echo ERROR: sha1sum of $member1 has changed
116 fi
117 if [ \( $seq10a -ge $seq10d \) -o \( $seq8d -ne $seq10d \) ]; then
118 ret=1
119 echo ERROR: sequential numbers are wrong
120 fi
121else
122 ret=1
123 echo ERROR: assembly failed
124fi
125
126if [ $ret -ne 0 ]; then
127 mdadm -E $dev10
128 mdadm -E $dev8
129fi
130rm -f $tmp /var/tmp/mdmon.log
131[ $ret -eq 0 ]