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