]>
Commit | Line | Data |
---|---|---|
4f8a3e5b KW |
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 | ||
4f8a3e5b KW |
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 | |
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 | |
40 | mdadm --create --run $container --auto=md --metadata=imsm --raid-disks=$num_disks $device_list | |
7d1dda2c | 41 | check wait |
4f8a3e5b KW |
42 | imsm_check container $num_disks |
43 | ||
44 | # Create first volume inside the container | |
2b2c5668 MG |
45 | if [[ ! -z $vol0_chunk ]]; then |
46 | mdadm --create --run $member0 --auto=md --level=$vol0_level --size=$vol0_comp_size --chunk=$vol0_chunk --raid-disks=$num_disks $device_list | |
47 | else | |
48 | mdadm --create --run $member0 --auto=md --level=$vol0_level --size=$vol0_comp_size --raid-disks=$num_disks $device_list | |
49 | fi | |
7d1dda2c | 50 | check wait |
4f8a3e5b KW |
51 | |
52 | # Create second volume inside the container (if defined) | |
2b2c5668 MG |
53 | if [ ! -z $vol1_level ]; then |
54 | if [ ! -z $vol1_chunk ]; then | |
55 | mdadm --create --run $member1 --auto=md --level=$vol1_level --size=$vol1_comp_size --chunk=$vol1_chunk --raid-disks=$num_disks $device_list | |
56 | else | |
57 | mdadm --create --run $member1 --auto=md --level=$vol1_level --size=$vol1_comp_size --raid-disks=$num_disks $device_list | |
58 | fi | |
59 | check wait | |
4f8a3e5b KW |
60 | fi |
61 | ||
62 | # Wait for any RESYNC to complete | |
63 | check wait | |
64 | ||
65 | # Test first volume | |
66 | imsm_check member $member0 $num_disks $vol0_level $vol0_comp_size $((vol0_comp_size * vol0_num_comps)) $vol0_offset $vol0_chunk | |
67 | testdev $member0 $vol0_num_comps $vol0_comp_size $vol0_chunk | |
68 | ||
69 | # Test second volume (if defined) | |
2b2c5668 | 70 | if [ ! -z $vol1_level ]; then |
4f8a3e5b KW |
71 | imsm_check member $member1 $num_disks $vol1_level $vol1_comp_size $((vol1_comp_size * vol1_num_comps)) $vol1_offset $vol1_chunk |
72 | testdev $member1 $vol1_num_comps $vol1_comp_size $vol1_chunk | |
73 | fi | |
74 | ||
75 | # Add extra disks to container if operation requires spares in container. | |
76 | for i in $spare_list | |
77 | do | |
78 | mdadm --add $container $i | |
7d1dda2c | 79 | check wait |
4f8a3e5b KW |
80 | num_disks=$((num_disks + 1)) |
81 | done | |
82 | ||
83 | imsm_check container $num_disks | |
84 | num_disks=$((num_disks + add_to_num_disks)) | |
e26c9262 | 85 | backup_imsm=/tmp/backup_imsm |
4f8a3e5b KW |
86 | |
87 | # Grow each member or a container depending on the type of an operation | |
88 | if [ $migration_test -ne 0 ]; then | |
89 | if [ -z $new_num_disks ]; then | |
90 | new_num_disks=$num_disks | |
91 | fi | |
1a90fd84 | 92 | grow_member $member0 $new_num_disks $vol0_new_num_comps $vol0_new_level $vol0_comp_size $vol0_offset $vol0_new_chunk $vol0_chunk |
3600f9c1 | 93 | if [[ $vol1_new_chunk -ne 0 ]] ; then |
1a90fd84 | 94 | 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 |
95 | fi |
96 | else | |
e26c9262 | 97 | rm -f $backup_imsm |
6820c9ab | 98 | ( set -x; mdadm --grow $container --raid-disks=$num_disks ) |
4f8a3e5b KW |
99 | grow_status=$? |
100 | if [ $negative_test -ne 0 ]; then | |
101 | if [ $grow_status -eq 0 ]; then | |
102 | echo >&2 "**Error**: $container: --grow should failed, but it completed successfuly" | |
103 | exit 1 | |
104 | fi | |
105 | else | |
18d5cb9e | 106 | sleep 5 |
4f8a3e5b KW |
107 | check wait |
108 | sleep 5 | |
18d5cb9e | 109 | check wait |
4f8a3e5b KW |
110 | imsm_check member $member0 $num_disks $vol0_level $vol0_comp_size $((vol0_comp_size * vol0_new_num_comps)) $vol0_offset $vol0_chunk |
111 | testdev $member0 $vol0_new_num_comps $vol0_comp_size $vol0_chunk | |
112 | if [ $vol1_new_num_comps -ne 0 ]; then | |
113 | imsm_check member $member1 $num_disks $vol1_level $vol1_comp_size $((vol1_comp_size * vol1_new_num_comps)) $vol1_offset $vol1_chunk | |
114 | testdev $member1 $vol1_new_num_comps $vol1_comp_size $vol1_chunk | |
115 | fi | |
116 | fi | |
117 | fi | |
118 | ||
119 | exit 0 |