# split arguments like "1.8.6-wc3" into "1", "8", "6", "wc3"
eval set -- $(tr "[:punct:]" " " <<< $*)
- echo -n $((($1 << 16) | ($2 << 8) | $3))
+ echo -n "$((($1 << 16) | ($2 << 8) | $3))"
}
export LINUX_VERSION=$(uname -r | sed -e "s/[-.]/ /3" -e "s/ .*//")
facet_type() {
local facet=$1
- echo -n $facet | sed -e 's/^fs[0-9]\+//' -e 's/[0-9]\+//' |
+ echo -n $facet | sed -e 's/^fs[0-9]\+//' -e 's/[0-9_]\+//' |
tr '[:lower:]' '[:upper:]'
}
TESTNAME=$TESTNAME \
DBENCH_LIB=$DBENCH_LIB \
DBENCH_SRC=$DBENCH_SRC \
+LFS=$LFS \
run_${load}.sh" &
local ppid=$!
log "Started client load: ${load} on $client"
}
replay_barrier() {
- local facet=$1
- do_facet $facet "sync; sync; sync"
- df $MOUNT
+ local facet=$1
+ do_facet $facet "sync; sync; sync"
+ df $MOUNT
- # make sure there will be no seq change
- local clients=${CLIENTS:-$HOSTNAME}
- local f=fsa-\\\$\(hostname\)
- do_nodes $clients "mcreate $MOUNT/$f; rm $MOUNT/$f"
- do_nodes $clients "if [ -d $MOUNT2 ]; then mcreate $MOUNT2/$f; rm $MOUNT2/$f; fi"
+ # make sure there will be no seq change
+ local clients=${CLIENTS:-$HOSTNAME}
+ local f=fsa-\\\$\(hostname\)
+ do_nodes $clients "mcreate $MOUNT/$f; rm $MOUNT/$f"
+ do_nodes $clients "if [ -d $MOUNT2 ]; then mcreate $MOUNT2/$f; rm $MOUNT2/$f; fi"
- local svc=${facet}_svc
- do_facet $facet $LCTL --device %${!svc} notransno
- do_facet $facet $LCTL --device %${!svc} readonly
- do_facet $facet $LCTL mark "$facet REPLAY BARRIER on ${!svc}"
- $LCTL mark "local REPLAY BARRIER on ${!svc}"
+ local svc=${facet}_svc
+ do_facet $facet $LCTL --device ${!svc} notransno
+ do_facet $facet $LCTL --device ${!svc} readonly
+ do_facet $facet $LCTL mark "$facet REPLAY BARRIER on ${!svc}"
+ $LCTL mark "local REPLAY BARRIER on ${!svc}"
}
replay_barrier_nodf() {
- local facet=$1 echo running=${running}
- do_facet $facet "sync; sync; sync"
- local svc=${facet}_svc
- echo Replay barrier on ${!svc}
- do_facet $facet $LCTL --device %${!svc} notransno
- do_facet $facet $LCTL --device %${!svc} readonly
- do_facet $facet $LCTL mark "$facet REPLAY BARRIER on ${!svc}"
- $LCTL mark "local REPLAY BARRIER on ${!svc}"
+ local facet=$1 echo running=${running}
+ do_facet $facet "sync; sync; sync"
+ local svc=${facet}_svc
+ echo Replay barrier on ${!svc}
+ do_facet $facet $LCTL --device ${!svc} notransno
+ do_facet $facet $LCTL --device ${!svc} readonly
+ do_facet $facet $LCTL mark "$facet REPLAY BARRIER on ${!svc}"
+ $LCTL mark "local REPLAY BARRIER on ${!svc}"
}
replay_barrier_nosync() {
- local facet=$1 echo running=${running}
- local svc=${facet}_svc
- echo Replay barrier on ${!svc}
- do_facet $facet $LCTL --device %${!svc} notransno
- do_facet $facet $LCTL --device %${!svc} readonly
- do_facet $facet $LCTL mark "$facet REPLAY BARRIER on ${!svc}"
- $LCTL mark "local REPLAY BARRIER on ${!svc}"
+ local facet=$1 echo running=${running}
+ local svc=${facet}_svc
+ echo Replay barrier on ${!svc}
+ do_facet $facet $LCTL --device ${!svc} notransno
+ do_facet $facet $LCTL --device ${!svc} readonly
+ do_facet $facet $LCTL mark "$facet REPLAY BARRIER on ${!svc}"
+ $LCTL mark "local REPLAY BARRIER on ${!svc}"
}
mds_evict_client() {
if ! combined_mgs_mds ; then
echo "Format mgs: $(mgsdevname)"
add mgs $(mkfs_opts mgs $(mgsdevname)) --reformat \
- $(mgsdevname) $(mgsvdevname) ${quiet:+>/dev/null} || exit 10
+ $(mgsdevname) $(mgsvdevname) ${quiet:+>/dev/null} ||
+ exit 10
fi
for num in $(seq $MDSCOUNT); do
echo "Format mds$num: $(mdsdevname $num)"
add mds$num $(mkfs_opts mds$num $(mdsdevname ${num})) \
- --reformat $(mdsdevname $num) $(mdsvdevname $num) \
- ${quiet:+>/dev/null} || exit 10
+ --reformat $(mdsdevname $num) $(mdsvdevname $num) \
+ ${quiet:+>/dev/null} || exit 10
done
for num in $(seq $OSTCOUNT); do
echo "Format ost$num: $(ostdevname $num)"
add ost$num $(mkfs_opts ost$num $(ostdevname ${num})) \
- --reformat $(ostdevname $num) $(ostvdevname ${num}) \
- ${quiet:+>/dev/null} || exit 10
+ --reformat $(ostdevname $num) $(ostvdevname ${num}) \
+ ${quiet:+>/dev/null} || exit 10
done
}
return $RC
}
+drop_update_reply() {
+# OBD_FAIL_MDS_OBJ_UPDATE_NET
+ local index=$1
+ shift 1
+ RC=0
+ do_facet mds${index} lctl set_param fail_loc=0x188
+ do_facet client "$@" || RC=$?
+ do_facet mds${index} lctl set_param fail_loc=0
+ return $RC
+}
+
pause_bulk() {
#define OBD_FAIL_OST_BRW_PAUSE_BULK 0x214
RC=0
$LFS mdts $2 | sed -ne "/^$1: /s/.* \(.*\) .*$/\1/p"
}
+# Description:
+# Return unique identifier for given hostname
+host_id() {
+ local host_name=$1
+ echo $host_name | md5sum | cut -d' ' -f1
+}
+
+# Description:
+# Returns list of ip addresses for each interface
+local_addr_list() {
+ ip addr | awk '/inet\ / {print $2}' | awk -F\/ '{print $1}'
+}
+
+is_local_addr() {
+ local addr=$1
+ # Cache address list to avoid mutiple execution of local_addr_list
+ LOCAL_ADDR_LIST=${LOCAL_ADDR_LIST:-$(local_addr_list)}
+ local i
+ for i in $LOCAL_ADDR_LIST ; do
+ [[ "$i" == "$addr" ]] && return 0
+ done
+ return 1
+}
+
+local_node() {
+ local host_name=$1
+ local is_local="IS_LOCAL_$(host_id $host_name)"
+ if [ -z "${!is_local-}" ] ; then
+ eval $is_local=0
+ local host_ip=$($LUSTRE/tests/resolveip $host_name)
+ is_local_addr "$host_ip" && eval $is_local=1
+ fi
+ [[ "${!is_local}" == "1" ]]
+}
+
remote_node () {
- local node=$1
- [ "$node" != "$(hostname)" ]
+ local node=$1
+ local_node $node && return 1
+ return 0
}
remote_mds ()
echo "$TESTLOG_PREFIX.$TESTNAME.$logname.$(hostname -s).log"
}
+
+# mkdir directory on different MDTs
+test_mkdir() {
+ local option
+ local parent
+ local child
+ local path
+ local dir
+ local rc=0
+
+ if [ $# -eq 2 ]; then
+ option=$1
+ path=$2
+ else
+ path=$1
+ fi
+
+ child=${path##*/}
+ parent=${path%/*}
+
+ if [ "$parent" == "$child" ]; then
+ parent=$(pwd)
+ fi
+
+ if [ "$option" == "-p" -a -d ${parent}/${child} ]; then
+ return $rc
+ fi
+
+ # it needs to check whether there is further / in child
+ dir=$(echo $child | awk -F '/' '{print $2}')
+ if [ ! -z "$dir" ]; then
+ local subparent=$(echo $child | awk -F '/' '{ print $1 }')
+ parent=${parent}"/"${subparent}
+ child=$dir
+ fi
+
+ if [ ! -d ${parent} ]; then
+ if [ "$option" == "-p" ]; then
+ mkdir -p ${parent}
+ else
+ return 1
+ fi
+ fi
+
+ if [ $MDSCOUNT -le 1 ]; then
+ mkdir $option ${parent}/${child} || rc=$?
+ else
+ local mdt_idx=$($LFS getstripe -M $parent)
+
+ if [ "$mdt_idx" -ne 0 ]; then
+ mkdir $option ${parent}/${child} || rc=$?
+ return $rc
+ fi
+
+ local test_num=$(echo $testnum | sed -e 's/[^0-9]*//g')
+ local mdt_idx=$((test_num % MDSCOUNT))
+ echo "mkdir $mdt_idx for ${parent}/${child}"
+ $LFS setdirstripe -i $mdt_idx ${parent}/${child} || rc=$?
+ fi
+ return $rc
+}