#!/bin/bash
-
+set -e
######################################################################
# customize per survey
# client systems on which this test runs.]
# include library
-source libecho
+source $(dirname $0)/libecho
# The following variables can be set in the environment, or on the
# command line
# Set this true to check file contents
verify=${verify:-0}
+# test targets
+targets=${targets:-""}
+# test case
+case=${case:-"disk"}
+
# total size (MBytes) per obd instance
# large enough to avoid cache effects
# and to make test startup/shutdown overhead insignificant
# End of variables
# create a set of objects, check there are 'n' contiguous ones and
-# return the first or 'ERROR'
+# echo out the first or 'ERROR'
# parameter: 1. hostname
# 2. device number
# 3. number of object to be created (specified by user)
prev=0
count=0
error=0
- while read line; do
- echo "$line" | grep -q 'is object id'
- if [ $? -ne 0 ]; then
- continue
- fi
- if [ $first -eq 0 ]; then
- first=$(echo $line | awk '{print $6}')
- first=$(printf "%d" $first)
- prev=$first
- count=1
- else
- obj=$(echo $line | awk '{print $6}')
- obj=$(printf "%d" $obj)
- diff=$((obj - (prev+1)))
- if [ $diff -ne 0 ]; then
- error=1
- fi
- prev=$obj
- count=$((count+1))
- fi
- done < $rfile
+
+ # Count number of objects (lines containing " is object id "), and
+ # ensure that the objects numbers are sequential.
+ #
+ exec 3< $rfile
+ while read -u3 line; do
+ case "$line" in
+ ( *' is object id '* )
+ set -- $line
+ if test $(( count += 1 )) -gt 1 ; then
+ (( $6 != prev + 1 )) && error=1
+ else
+ first=$(( $6 + 0 ))
+ fi
+ prev=$6
+ ;;
+ esac
+ done
+ exec 3<&-
+
if [ $nobj -ne $count ]; then
echo "ERROR: $nobj != $count" >&2
cat $rfile >&2
echo "ERROR"
elif [ $error -ne 0 ]; then
- echo "ERROR: non contiguous objs found" >&2
+ echo "ERROR: non contiguous objs found" >&2
+ echo ERROR
else
echo $first
fi
+ return $error
}
# destroys all objects created in create_objects routine
gawk < $rfile \
'/^Selected device [0-9]+$/ {n = 0; next}\
/error/ {n = -1; exit}\
+ /^Total/ {next}\
/^[0-9]+\/[0-9]+ Total: [0-9]+\.[0-9]+\/second$/ {n++; v=strtonum($3); \
if (n == 1 || v < min) min = v;\
if (n == 1 || v > max) max = v;\
esac
}
+# for "echo_client + obdfilter" case, "prep + commit" mode should be used
+# for "echo_client + osc" case, "BRW" mode should be used
+testcase2mode() {
+ case $case in
+ disk) echo "p$1";;
+ *) echo "g";;
+ esac
+}
+
print_summary () {
if [ "$1" = "-n" ]; then
minusn=$1; shift
#####################################################################
# One can change variable values in this section as per requirements
-targets=${targets:-""}
-case=${case:-"disk"}
if [ -n "$targets" ]; then
declare -a ost_names
declare -a client_names
ndevs=$((ndevs+1))
done
if [ $case == "disk" ]; then
- for ((i = 0; i < $ndevs; i++)); do
- ost_names[$i]=${client_names[$i]}
- done
+ if [ $rszhi -gt 1024 ]; then
+ echo "Test disk case support maximum 1024KB IO data" \
+ "(rszhi=$rszhi is too big) please use a smaller value."
+ exit 1
+ fi
+ for ((i = 0; i < $ndevs; i++)); do
+ ost_names[$i]=${client_names[$i]}
+ done
fi
if [ $case == "netdisk" ]; then
if [ "$targets" ]; then
echo >> ${cmdsf}_${host} \
"$lctl > $tmpfi 2>&1 \\
--threads $thr -$snap $devno \\
- test_brw $count `testname2type $test` q $pages ${thr_per_obj}t${first_obj} &"
+ test_brw $count `testname2type $test` q $pages \\
+ ${thr_per_obj}t${first_obj} `testcase2mode $pages` &"
done
pidcount=0
for host in ${unique_hosts[@]}; do