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