# 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 $OSTDEVn isn't defined, default is $OSTDEVBASE + num
eval DEVPTR=${!DEVNAME:=${OSTDEVBASE}${num}};;
zfs )
- #dataset name is independent of vdev device names
- eval DEVPTR=${FSNAME}-ost${num}/ost${num};;
+ #try $OSTDEVn then $OSTDEVBASE + num then zfs default
+ local foo=${OSTDEVBASE:-${FSNAME}-ost${num}/ost}${num}
+ eval DEVPTR=${!DEVNAME:=$foo};;
* )
error "unknown fstype!";;
esac
#if $MDSDEVn isn't defined, default is $MDSDEVBASE + num
eval DEVPTR=${!DEVNAME:=${MDSDEVBASE}${num}};;
zfs )
- #dataset name is independent of vdev device names
- eval DEVPTR=${FSNAME}-mdt${num}/mdt${num};;
+ # try $MDSDEVn then $MDSDEVBASE + num then zfs default
+ local foo=${MDSDEVBASE:-${FSNAME}-mdt${num}/mdt}${num}
+ eval DEVPTR=${!DEVNAME:=$foo};;
* )
error "unknown fstype!";;
esac
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
+}