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