]> git.proxmox.com Git - ceph.git/blame - ceph/src/spdk/test/vhost/hotplug/scsi_hotdetach.sh
import 15.2.0 Octopus source
[ceph.git] / ceph / src / spdk / test / vhost / hotplug / scsi_hotdetach.sh
CommitLineData
11fdf7f2
TL
1#!/usr/bin/env bash
2
3set -e
11fdf7f2 4
9f95a23c
TL
5testdir=$(readlink -f $(dirname $0))
6rootdir=$(readlink -f $testdir/../../..)
7source $rootdir/test/common/autotest_common.sh
8source $rootdir/test/vhost/common.sh
9source $rootdir/test/vhost/hotplug/common.sh
11fdf7f2
TL
10
11function get_first_disk() {
12 vm_check_scsi_location $1
13 disk_array=( $SCSI_DISK )
14 eval "$2=${disk_array[0]}"
15}
16
17function check_disks() {
18 if [ "$1" == "$2" ]; then
19 fail "Disk has not been deleted"
20 fi
21}
22
23function prepare_fio_cmd_tc1_iter1() {
24 print_test_fio_header
25
26 run_fio="$fio_bin --eta=never "
27 for vm_num in $1; do
28 cp $fio_job $tmp_detach_job
29 vm_dir=$VM_BASE_DIR/$vm_num
30 vm_check_scsi_location $vm_num
31 for disk in $SCSI_DISK; do
32 echo "[nvme-host$disk]" >> $tmp_detach_job
33 echo "filename=/dev/$disk" >> $tmp_detach_job
34 done
35 vm_scp "$vm_num" $tmp_detach_job 127.0.0.1:/root/default_integrity_4discs.job
36 run_fio+="--client=127.0.0.1,$(vm_fio_socket $vm_num) --remote-config /root/default_integrity_4discs.job "
37 rm $tmp_detach_job
38 done
39}
40
41function prepare_fio_cmd_tc1_iter2() {
42 print_test_fio_header
43
44 for vm_num in 2; do
45 cp $fio_job $tmp_detach_job
46 vm_dir=$VM_BASE_DIR/$vm_num
47 vm_check_scsi_location $vm_num
48 for disk in $SCSI_DISK; do
49 echo "[nvme-host$disk]" >> $tmp_detach_job
50 echo "filename=/dev/$disk" >> $tmp_detach_job
51 done
52 vm_scp "$vm_num" $tmp_detach_job 127.0.0.1:/root/default_integrity_3discs.job
53 rm $tmp_detach_job
54 done
55 run_fio="$fio_bin --eta=never "
56 for vm_num in $used_vms; do
57 if [ $vm_num == 2 ]; then
58 run_fio+="--client=127.0.0.1,$(vm_fio_socket $vm_num) --remote-config /root/default_integrity_3discs.job "
59 continue
60 fi
61 run_fio+="--client=127.0.0.1,$(vm_fio_socket $vm_num) --remote-config /root/default_integrity_4discs.job "
62 done
63}
64
65function prepare_fio_cmd_tc2_iter1() {
66 print_test_fio_header
67
68 run_fio="$fio_bin --eta=never "
69 for vm_num in $1; do
70 cp $fio_job $tmp_detach_job
71 vm_dir=$VM_BASE_DIR/$vm_num
72 vm_check_scsi_location $vm_num
73 disk_array=($SCSI_DISK)
74 disk=${disk_array[0]}
75 echo "[nvme-host$disk]" >> $tmp_detach_job
76 echo "filename=/dev/$disk" >> $tmp_detach_job
77 vm_scp "$vm_num" $tmp_detach_job 127.0.0.1:/root/default_integrity.job
78 run_fio+="--client=127.0.0.1,$(vm_fio_socket $vm_num) --remote-config /root/default_integrity.job "
79 rm $tmp_detach_job
80 done
81}
82
83function prepare_fio_cmd_tc2_iter2() {
84 print_test_fio_header
85
86 run_fio="$fio_bin --eta=never "
87 for vm_num in $1; do
88 cp $fio_job $tmp_detach_job
89 if [ $vm_num == 2 ]; then
90 vm_job_name=default_integrity_3discs.job
91 else
92 vm_job_name=default_integrity_4discs.job
93 fi
94 vm_dir=$VM_BASE_DIR/$vm_num
95 vm_check_scsi_location $vm_num
96 for disk in $SCSI_DISK; do
97 echo "[nvme-host$disk]" >> $tmp_detach_job
98 echo "filename=/dev/$disk" >> $tmp_detach_job
99 done
100 vm_scp "$vm_num" $tmp_detach_job 127.0.0.1:/root/$vm_job_name
101 run_fio+="--client=127.0.0.1,$(vm_fio_socket $vm_num) --remote-config /root/${vm_job_name} "
102 rm $tmp_detach_job
103 done
104}
105
106
107function prepare_fio_cmd_tc3_iter1() {
108 print_test_fio_header
109
110 run_fio="$fio_bin --eta=never "
111 for vm_num in $1; do
112 cp $fio_job $tmp_detach_job
113 if [ $vm_num == 2 ]; then
114 vm_job_name=default_integrity_3discs.job
115 else
116 vm_job_name=default_integrity_4discs.job
117 fi
118 vm_dir=$VM_BASE_DIR/$vm_num
119 vm_check_scsi_location $vm_num
120 j=1
121 for disk in $SCSI_DISK; do
122 if [ $vm_num == 2 ]; then
123 if [ $j == 1 ]; then
124 (( j++ ))
125 continue
126 fi
127 fi
128 echo "[nvme-host$disk]" >> $tmp_detach_job
129 echo "filename=/dev/$disk" >> $tmp_detach_job
130 (( j++ ))
131 done
132 vm_scp "$vm_num" $tmp_detach_job 127.0.0.1:/root/$vm_job_name
133 run_fio+="--client=127.0.0.1,$(vm_fio_socket $vm_num) --remote-config /root/$vm_job_name "
134 rm $tmp_detach_job
135 done
136}
137
138# During fio test for all devices remove first device from fifth controller and check if fio fails.
139# Also check if disc has been removed from VM.
140function hotdetach_tc1() {
141 notice "Hotdetach test case 1"
142 first_disk=""
143 get_first_disk "2" first_disk
144 prepare_fio_cmd_tc1_iter1 "2 3"
145 $run_fio &
146 last_pid=$!
147 sleep 3
148 $rpc_py remove_vhost_scsi_target naa.Nvme0n1p4.2 0
149 set +xe
150 wait $last_pid
151 check_fio_retcode "Hotdetach test case 1: Iteration 1." 1 $?
152 set -xe
153 second_disk=""
154 get_first_disk "2" second_disk
155 check_disks $first_disk $second_disk
156 clear_after_tests
157}
158
159# During fio test for device from third VM remove first device from fifth controller and check if fio fails.
160# Also check if disc has been removed from VM.
161function hotdetach_tc2() {
162 notice "Hotdetach test case 2"
163 sleep 2
164 first_disk=""
165 get_first_disk "2" first_disk
166 prepare_fio_cmd_tc2_iter1 "2"
167 $run_fio &
168 last_pid=$!
169 sleep 3
170 $rpc_py remove_vhost_scsi_target naa.Nvme0n1p4.2 0
171 set +xe
172 wait $last_pid
173 check_fio_retcode "Hotdetach test case 2: Iteration 1." 1 $?
174 set -xe
175 second_disk=""
176 get_first_disk "2" second_disk
177 check_disks $first_disk $second_disk
178 clear_after_tests
179}
180
181# Run fio test for all devices except one, then remove this device and check if fio passes.
182# Also check if disc has been removed from VM.
183function hotdetach_tc3() {
184 notice "Hotdetach test case 3"
185 sleep 2
186 first_disk=""
187 get_first_disk "2" first_disk
188 prepare_fio_cmd_tc3_iter1 "2 3"
189 $run_fio &
190 last_pid=$!
191 sleep 3
192 $rpc_py remove_vhost_scsi_target naa.Nvme0n1p4.2 0
193 wait $last_pid
194 check_fio_retcode "Hotdetach test case 3: Iteration 1." 0 $?
195 second_disk=""
196 get_first_disk "2" second_disk
197 check_disks $first_disk $second_disk
198 clear_after_tests
199}
200
201# Run fio test for all devices except one and run separate fio test for this device.
202# Check if first fio test passes and second fio test fails.
203# Also check if disc has been removed from VM.
204# After reboot run fio test for remaining devices and check if fio passes.
205function hotdetach_tc4() {
206 notice "Hotdetach test case 4"
207 sleep 2
208 first_disk=""
209 get_first_disk "2" first_disk
210 prepare_fio_cmd_tc2_iter1 "2"
211 $run_fio &
212 first_fio_pid=$!
213 prepare_fio_cmd_tc3_iter1 "2 3"
214 $run_fio &
215 second_fio_pid=$!
216 sleep 3
217 $rpc_py remove_vhost_scsi_target naa.Nvme0n1p4.2 0
218 set +xe
219 wait $first_fio_pid
220 check_fio_retcode "Hotdetach test case 4: Iteration 1." 1 $?
221 set -xe
222 wait $second_fio_pid
223 check_fio_retcode "Hotdetach test case 4: Iteration 2." 0 $?
224 second_disk=""
225 get_first_disk "2" second_disk
226 check_disks $first_disk $second_disk
227
228 reboot_all_and_prepare "2 3"
229 sleep 2
230 prepare_fio_cmd_tc2_iter2 "2 3"
231 $run_fio
232 check_fio_retcode "Hotdetach test case 4: Iteration 3." 0 $?
233 clear_after_tests
234}
235
236function clear_after_tests() {
237 $rpc_py add_vhost_scsi_lun naa.Nvme0n1p4.2 0 Nvme0n1p8
238}
239
240hotdetach_tc1
241hotdetach_tc2
242hotdetach_tc3
243hotdetach_tc4