]> git.proxmox.com Git - ceph.git/blob - ceph/src/spdk/test/bdev/nbd_common.sh
update sources to ceph Nautilus 14.2.1
[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
8 for (( i=0; i<${#nbd_list[@]}; i++ )); do
9 $rootdir/scripts/rpc.py -s $rpc_server start_nbd_disk \
10 ${bdev_list[$i]} ${nbd_list[$i]}
11 done
12 # Wait for nbd devices ready
13 for i in ${nbd_list[@]}; do
14 waitfornbd ${i:5}
15 done
16 }
17
18 function waitfornbd_exit() {
19 nbd_name=$1
20
21 for ((i=1; i<=20; i++)); do
22 if grep -q -w $nbd_name /proc/partitions; then
23 sleep 0.1
24 else
25 break
26 fi
27 done
28
29 return 0
30 }
31
32 function nbd_stop_disks() {
33 local rpc_server=$1
34 local nbd_list=($2)
35
36 for i in ${nbd_list[@]}; do
37 $rootdir/scripts/rpc.py -s $rpc_server stop_nbd_disk $i
38 done
39 for i in ${nbd_list[@]}; do
40 waitfornbd_exit ${i:5}
41 done
42 }
43
44 function nbd_get_count() {
45 # return = count of spdk nbd devices
46 local rpc_server=$1
47
48 nbd_disks_json=`$rootdir/scripts/rpc.py -s $rpc_server get_nbd_disks`
49 nbd_disks_name=`echo "${nbd_disks_json}" | jq -r '.[] | .nbd_device'`
50 count=`echo "${nbd_disks_name}" | grep -c /dev/nbd || true`
51 echo $count
52 }
53
54 function nbd_dd_data_verify() {
55 local nbd_list=($1)
56 local operation=$2
57 local tmp_file=/tmp/nbdrandtest
58
59 if [ "$operation" = "write" ]; then
60 # data write
61 dd if=/dev/urandom of=$tmp_file bs=4096 count=256
62 for i in ${nbd_list[@]}; do
63 dd if=$tmp_file of=$i bs=4096 count=256 oflag=direct
64 done
65 elif [ "$operation" = "verify" ]; then
66 # data read and verify
67 for i in ${nbd_list[@]}; do
68 cmp -b -n 1M $tmp_file $i
69 done
70 rm $tmp_file
71 fi
72 }
73
74 function nbd_rpc_data_verify() {
75 local rpc_server=$1
76 local bdev_list=($2)
77 local nbd_list=($3)
78
79 nbd_start_disks $rpc_server "${bdev_list[*]}" "${nbd_list[*]}"
80 count=$(nbd_get_count $rpc_server)
81 if [ $count -ne ${#nbd_list[@]} ]; then
82 return -1
83 fi
84
85 nbd_dd_data_verify "${nbd_list[*]}" "write"
86 nbd_dd_data_verify "${nbd_list[*]}" "verify"
87
88 nbd_stop_disks $rpc_server "${nbd_list[*]}"
89 count=$(nbd_get_count $rpc_server)
90 if [ $count -ne 0 ]; then
91 return -1
92 fi
93
94 return 0
95 }