]> git.ipfire.org Git - thirdparty/mdadm.git/blame - tests/imsm-grow-template
mdadm/tests: add one test case for failfast of raid1
[thirdparty/mdadm.git] / tests / imsm-grow-template
CommitLineData
4f8a3e5b
KW
1
2# 0 - POSITIVE test, otherwise NEGATIVE test
3negative_test=$1
4
5# 0 - On-line Capacity Expansion test, otherwise LEVEL migration or CHUNK size migration test
6migration_test=$2
7
4f8a3e5b
KW
8function grow_member() {
9 local member=$1
10 local disks=$2
11 local comps=$3
12 local level=$4
13 local size=$5
14 local offset=$6
15 local chunk=$7
1a90fd84 16 local old_chunk=$8
4f8a3e5b
KW
17 local array_size=$((comps * size))
18
e26c9262 19 rm -f $backup_imsm
1a90fd84
MZ
20 if [ $chunk -eq $old_chunk ]; then
21 ( set -ex; mdadm --grow $member --level=$level )
22 else
23 ( set -ex; mdadm --grow $member --chunk=$chunk )
24 fi
4f8a3e5b
KW
25 local status=$?
26 if [ $negative_test -ne 0 ]; then
27 if [ $status -eq 0 ]; then
28 echo >&2 "**Error**: $member: --grow should failed, but it completed successfuly"
29 exit 1
30 fi
31 return
32 fi
33 check wait
34 sleep 5
e53d022c
KW
35 imsm_check member $member $disks $level $size $array_size $offset $chunk
36 testdev $member $comps $size $chunk
4f8a3e5b
KW
37}
38
39# Create container
40mdadm --create --run $container --auto=md --metadata=imsm --raid-disks=$num_disks $device_list
7d1dda2c 41check wait
4f8a3e5b
KW
42imsm_check container $num_disks
43
44# Create first volume inside the container
45mdadm --create --run $member0 --auto=md --level=$vol0_level --size=$vol0_comp_size --chunk=$vol0_chunk --raid-disks=$num_disks $device_list
7d1dda2c 46check wait
4f8a3e5b
KW
47
48# Create second volume inside the container (if defined)
49if [ ! -z $vol1_chunk ]; then
50 mdadm --create --run $member1 --auto=md --level=$vol1_level --size=$vol1_comp_size --chunk=$vol1_chunk --raid-disks=$num_disks $device_list
7d1dda2c 51 check wait
4f8a3e5b
KW
52fi
53
54# Wait for any RESYNC to complete
55check wait
56
57# Test first volume
58imsm_check member $member0 $num_disks $vol0_level $vol0_comp_size $((vol0_comp_size * vol0_num_comps)) $vol0_offset $vol0_chunk
59testdev $member0 $vol0_num_comps $vol0_comp_size $vol0_chunk
60
61# Test second volume (if defined)
62if [ ! -z $vol1_chunk ]; then
63 imsm_check member $member1 $num_disks $vol1_level $vol1_comp_size $((vol1_comp_size * vol1_num_comps)) $vol1_offset $vol1_chunk
64 testdev $member1 $vol1_num_comps $vol1_comp_size $vol1_chunk
65fi
66
67# Add extra disks to container if operation requires spares in container.
68for i in $spare_list
69do
70 mdadm --add $container $i
7d1dda2c 71 check wait
4f8a3e5b
KW
72 num_disks=$((num_disks + 1))
73done
74
75imsm_check container $num_disks
76num_disks=$((num_disks + add_to_num_disks))
e26c9262 77backup_imsm=/tmp/backup_imsm
4f8a3e5b
KW
78
79# Grow each member or a container depending on the type of an operation
80if [ $migration_test -ne 0 ]; then
81 if [ -z $new_num_disks ]; then
82 new_num_disks=$num_disks
83 fi
1a90fd84 84 grow_member $member0 $new_num_disks $vol0_new_num_comps $vol0_new_level $vol0_comp_size $vol0_offset $vol0_new_chunk $vol0_chunk
3600f9c1 85 if [[ $vol1_new_chunk -ne 0 ]] ; then
1a90fd84 86 grow_member $member1 $new_num_disks $vol1_new_num_comps $vol1_new_level $vol1_comp_size $vol1_offset $vol1_new_chunk $vol1_chunk
4f8a3e5b
KW
87 fi
88else
e26c9262 89 rm -f $backup_imsm
6820c9ab 90 ( set -x; mdadm --grow $container --raid-disks=$num_disks )
4f8a3e5b
KW
91 grow_status=$?
92 if [ $negative_test -ne 0 ]; then
93 if [ $grow_status -eq 0 ]; then
94 echo >&2 "**Error**: $container: --grow should failed, but it completed successfuly"
95 exit 1
96 fi
97 else
18d5cb9e 98 sleep 5
4f8a3e5b
KW
99 check wait
100 sleep 5
18d5cb9e 101 check wait
4f8a3e5b
KW
102 imsm_check member $member0 $num_disks $vol0_level $vol0_comp_size $((vol0_comp_size * vol0_new_num_comps)) $vol0_offset $vol0_chunk
103 testdev $member0 $vol0_new_num_comps $vol0_comp_size $vol0_chunk
104 if [ $vol1_new_num_comps -ne 0 ]; then
105 imsm_check member $member1 $num_disks $vol1_level $vol1_comp_size $((vol1_comp_size * vol1_new_num_comps)) $vol1_offset $vol1_chunk
106 testdev $member1 $vol1_new_num_comps $vol1_comp_size $vol1_chunk
107 fi
108 fi
109fi
110
111exit 0