IDENTITY_UPCALL=false
;;
esac
+ export LOAD_MODULES_REMOTE=${LOAD_MODULES_REMOTE:-false}
# Paths on remote nodes, if different
export RLUSTRE=${RLUSTRE:-$LUSTRE}
export RPWD=${RPWD:-$PWD}
export I_MOUNTED=${I_MOUNTED:-"no"}
+ if [ ! -f /lib/modules/$(uname -r)/kernel/fs/lustre/mds.ko -a \
+ ! -f `dirname $0`/../mds/mds.ko ]; then
+ export CLIENTMODSONLY=yes
+ fi
# command line
fi
}
-load_modules() {
+load_modules_local() {
if [ -n "$MODPROBE" ]; then
# use modprobe
return 0
load_module osc/osc
load_module lov/lov
load_module mgc/mgc
- if [ -z "$CLIENTONLY" ] && [ -z "$CLIENTMODSONLY" ]; then
+ if ! client_only; then
grep -q crc16 /proc/kallsyms || { modprobe crc16 2>/dev/null || true; }
grep -q jbd /proc/kallsyms || { modprobe jbd 2>/dev/null || true; }
[ "$FSTYPE" = "ldiskfs" ] && load_module ../ldiskfs/ldiskfs/ldiskfs
[ -f $LUSTRE/utils/mount.lustre ] && cp $LUSTRE/utils/mount.lustre /sbin/. || true
}
+load_modules () {
+ load_modules_local
+ # bug 19124
+ # load modules on remote nodes optionally
+ # lustre-tests have to be installed on these nodes
+ if $LOAD_MODULES_REMOTE ; then
+ local list=$(comma_list $(remote_nodes_list))
+ echo loading modules on $list
+ do_rpc_nodes $list load_modules
+ fi
+}
+
check_mem_leak () {
LEAK_LUSTRE=$(dmesg | tail -n 30 | grep "obd_memory.*leaked" || true)
LEAK_PORTALS=$(dmesg | tail -n 20 | grep "Portals memory leaked" || true)
$LUSTRE_RMMOD $FSTYPE || return 2
+ if $LOAD_MODULES_REMOTE ; then
+ local list=$(comma_list $(remote_nodes_list))
+ echo unloading modules on $list
+ do_rpc_nodes $list $LUSTRE_RMMOD $FSTYPE
+ do_rpc_nodes $list check_mem_leak
+ fi
+
HAVE_MODULES=false
check_mem_leak || return 254
echo $(comma_list $expanded)
}
+testslist_filter () {
+ local script=$LUSTRE/tests/${TESTSUITE}.sh
+
+ [ -f $script ] || return 0
+
+ local start_at=$START_AT
+ local stop_at=$STOP_AT
+
+ local var=${TESTSUITE}_START_AT
+ [ x"${!var}" != x ] && start_at=${!var}
+ var=${TESTSUITE}_STOP_AT
+ [ x"${!var}" != x ] && stop_at=${!var}
+
+ sed -n 's/^test_\([^ (]*\).*/\1/p' $script | \
+ awk ' BEGIN { if ("'${start_at:-0}'" != 0) flag = 1 }
+ /^'${start_at}'$/ {flag = 0}
+ {if (flag == 1) print $0}
+ /^'${stop_at}'$/ { flag = 1 }'
+}
+
absolute_path() {
(cd `dirname $1`; echo $PWD/`basename $1`)
}
}
build_test_filter() {
+ EXCEPT="$EXCEPT $(testslist_filter)"
+
[ "$ONLY" ] && log "only running test `echo $ONLY`"
for O in $ONLY; do
eval ONLY_${O}=true
echo ${nodes[i]}
}
+client_only () {
+ [ "$CLIENTONLY" ] || [ "$CLIENTMODSONLY" = yes ]
+}
+
is_patchless ()
{
lctl get_param version | grep -q patchless
fi
}
+oos_full() {
+ local -a AVAILA
+ local -a GRANTA
+ local OSCFULL=1
+ AVAILA=($(do_nodes $(comma_list $(osts_nodes)) \
+ $LCTL get_param obdfilter.*.kbytesavail))
+ GRANTA=($(do_nodes $(comma_list $(osts_nodes)) \
+ $LCTL get_param -n obdfilter.*.tot_granted))
+ for ((i=0; i<${#AVAILA[@]}; i++)); do
+ local -a AVAIL1=(${AVAILA[$i]//=/ })
+ GRANT=$((${GRANTA[$i]}/1024))
+ echo -n $(echo ${AVAIL1[0]} | cut -d"." -f2) avl=${AVAIL1[1]} grnt=$GRANT diff=$((AVAIL1[1] - GRANT))
+ [ $((AVAIL1[1] - GRANT)) -lt 400 ] && OSCFULL=0 && echo " FULL" || echo
+ done
+ return $OSCFULL
+}
+
+gather_logs () {
+ local list=$1
+
+ local ts=$(date +%s)
+
+ # bug 20237, comment 11
+ # It would also be useful to provide the option
+ # of writing the file to an NFS directory so it doesn't need to be copied.
+ local tmp=$TMP
+ local docp=true
+ [ -d "$SHARED_DIR_LOGS" ] && tmp=$SHARED_DIR_LOGS && docp=false
+
+ # dump lustre logs, dmesg
+ do_nodes $list "log=$tmp/\\\$(hostname)-debug-$ts.log ;
+lctl dk \\\$log >/dev/null;
+log=$tmp/\\\$(hostname)-dmesg-$ts.log;
+dmesg > \\\$log; "
+
+ # FIXME: does it make sense to collect the logs for $ts only, but all
+ # TESTSUITE logs?
+ # rsync $TMP/*${TESTSUITE}* to gather the logs dumped by error fn
+ local logs=$TMP/'*'${TESTSUITE}'*'
+ if $docp; then
+ logs=$logs' '$tmp/'*'$ts'*'
+ fi
+ for node in ${list//,/ }; do
+ rsync -az $node:"$logs" $TMP
+ done
+
+ local archive=$TMP/${TESTSUITE}-$ts.tar.bz2
+ tar -jcf $archive $tmp/*$ts* $TMP/*${TESTSUITE}*
+
+ echo $archive
+}
+
+cleanup_logs () {
+ local list=${1:-$(comma_list $(nodes_list))}
+
+ [ -n ${TESTSUITE} ] && do_nodes $list "rm -f $TMP/*${TESTSUITE}*" || true
+}
+