]> git.proxmox.com Git - ceph.git/blob - ceph/src/spdk/test/bdev/nbd_common.sh
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / spdk / test / bdev / nbd_common.sh
1 set -e
2
3 function nbd_start_disks() {
4 local rpc_server=$1
5 local bdev_list=($2)
6 local nbd_list=($3)
7 local i
8
9 for ((i = 0; i < ${#nbd_list[@]}; i++)); do
10 $rootdir/scripts/rpc.py -s $rpc_server nbd_start_disk ${bdev_list[$i]} ${nbd_list[$i]}
11 # Wait for nbd device ready
12 waitfornbd $(basename ${nbd_list[$i]})
13 done
14 }
15
16 function nbd_start_disks_without_nbd_idx() {
17 local rpc_server=$1
18 local bdev_list=($2)
19 local i
20 local nbd_device
21
22 for ((i = 0; i < ${#bdev_list[@]}; i++)); do
23 nbd_device=$($rootdir/scripts/rpc.py -s $rpc_server nbd_start_disk ${bdev_list[$i]})
24 # Wait for nbd device ready
25 waitfornbd $(basename ${nbd_device})
26 done
27 }
28
29 function waitfornbd_exit() {
30 local nbd_name=$1
31
32 for ((i = 1; i <= 20; i++)); do
33 if grep -q -w $nbd_name /proc/partitions; then
34 sleep 0.1
35 else
36 break
37 fi
38 done
39
40 return 0
41 }
42
43 function nbd_stop_disks() {
44 local rpc_server=$1
45 local nbd_list=($2)
46 local i
47
48 for i in "${nbd_list[@]}"; do
49 $rootdir/scripts/rpc.py -s $rpc_server nbd_stop_disk $i
50 waitfornbd_exit $(basename $i)
51 done
52 }
53
54 function nbd_get_count() {
55 # return = count of spdk nbd devices
56 local rpc_server=$1
57
58 nbd_disks_json=$($rootdir/scripts/rpc.py -s $rpc_server nbd_get_disks)
59 nbd_disks_name=$(echo "${nbd_disks_json}" | jq -r '.[] | .nbd_device')
60 count=$(echo "${nbd_disks_name}" | grep -c /dev/nbd || true)
61 echo $count
62 }
63
64 function nbd_dd_data_verify() {
65 local nbd_list=($1)
66 local operation=$2
67 local tmp_file=$SPDK_TEST_STORAGE/nbdrandtest
68
69 if [ "$operation" = "write" ]; then
70 # data write
71 dd if=/dev/urandom of=$tmp_file bs=4096 count=256
72 for i in "${nbd_list[@]}"; do
73 dd if=$tmp_file of=$i bs=4096 count=256 oflag=direct
74 done
75 elif [ "$operation" = "verify" ]; then
76 # data read and verify
77 for i in "${nbd_list[@]}"; do
78 cmp -b -n 1M $tmp_file $i
79 done
80 rm $tmp_file
81 fi
82 }
83
84 function nbd_rpc_data_verify() {
85 local rpc_server=$1
86 local bdev_list=($2)
87 local nbd_list=($3)
88
89 nbd_start_disks $rpc_server "${bdev_list[*]}" "${nbd_list[*]}"
90 count=$(nbd_get_count $rpc_server)
91 if [ $count -ne ${#nbd_list[@]} ]; then
92 return 1
93 fi
94
95 nbd_dd_data_verify "${nbd_list[*]}" "write"
96 nbd_dd_data_verify "${nbd_list[*]}" "verify"
97
98 nbd_stop_disks $rpc_server "${nbd_list[*]}"
99 count=$(nbd_get_count $rpc_server)
100 if [ $count -ne 0 ]; then
101 return 1
102 fi
103
104 return 0
105 }
106
107 function nbd_rpc_start_stop_verify() {
108 local rpc_server=$1
109 local bdev_list=($2)
110
111 nbd_start_disks_without_nbd_idx $rpc_server "${bdev_list[*]}"
112
113 nbd_disks_json=$($rootdir/scripts/rpc.py -s $rpc_server nbd_get_disks)
114 nbd_disks_name=($(echo "${nbd_disks_json}" | jq -r '.[] | .nbd_device'))
115 nbd_stop_disks $rpc_server "${nbd_disks_name[*]}"
116
117 count=$(nbd_get_count $rpc_server)
118 if [ $count -ne 0 ]; then
119 return 1
120 fi
121
122 return 0
123 }