]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | set -e |
2 | ||
3 | function nbd_start_disks() { | |
4 | local rpc_server=$1 | |
5 | local bdev_list=($2) | |
6 | local nbd_list=($3) | |
9f95a23c | 7 | local i |
11fdf7f2 | 8 | |
f67539c2 TL |
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]} | |
9f95a23c TL |
11 | # Wait for nbd device ready |
12 | waitfornbd $(basename ${nbd_list[$i]}) | |
11fdf7f2 | 13 | done |
9f95a23c TL |
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 | ||
f67539c2 TL |
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]}) | |
9f95a23c TL |
24 | # Wait for nbd device ready |
25 | waitfornbd $(basename ${nbd_device}) | |
11fdf7f2 TL |
26 | done |
27 | } | |
28 | ||
29 | function waitfornbd_exit() { | |
9f95a23c | 30 | local nbd_name=$1 |
11fdf7f2 | 31 | |
f67539c2 | 32 | for ((i = 1; i <= 20; i++)); do |
11fdf7f2 TL |
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) | |
9f95a23c | 46 | local i |
11fdf7f2 | 47 | |
f67539c2 TL |
48 | for i in "${nbd_list[@]}"; do |
49 | $rootdir/scripts/rpc.py -s $rpc_server nbd_stop_disk $i | |
9f95a23c | 50 | waitfornbd_exit $(basename $i) |
11fdf7f2 TL |
51 | done |
52 | } | |
53 | ||
54 | function nbd_get_count() { | |
55 | # return = count of spdk nbd devices | |
56 | local rpc_server=$1 | |
57 | ||
f67539c2 TL |
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) | |
11fdf7f2 TL |
61 | echo $count |
62 | } | |
63 | ||
64 | function nbd_dd_data_verify() { | |
65 | local nbd_list=($1) | |
66 | local operation=$2 | |
f67539c2 | 67 | local tmp_file=$SPDK_TEST_STORAGE/nbdrandtest |
11fdf7f2 TL |
68 | |
69 | if [ "$operation" = "write" ]; then | |
70 | # data write | |
71 | dd if=/dev/urandom of=$tmp_file bs=4096 count=256 | |
f67539c2 | 72 | for i in "${nbd_list[@]}"; do |
11fdf7f2 TL |
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 | |
f67539c2 | 77 | for i in "${nbd_list[@]}"; do |
11fdf7f2 TL |
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 | |
f67539c2 | 92 | return 1 |
11fdf7f2 TL |
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 | |
f67539c2 | 101 | return 1 |
11fdf7f2 TL |
102 | fi |
103 | ||
104 | return 0 | |
105 | } | |
9f95a23c TL |
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 | ||
f67539c2 TL |
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')) | |
9f95a23c TL |
115 | nbd_stop_disks $rpc_server "${nbd_disks_name[*]}" |
116 | ||
117 | count=$(nbd_get_count $rpc_server) | |
118 | if [ $count -ne 0 ]; then | |
f67539c2 | 119 | return 1 |
9f95a23c TL |
120 | fi |
121 | ||
122 | return 0 | |
123 | } |