-#!/bin/bash
+#!/bin/sh
+
set -e
-ONLY=${ONLY:-"$*"}
-# bug number for skipped test:
-ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-""}
-# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
-
-[ "$ALWAYS_EXCEPT$EXCEPT" ] && echo "Skipping tests: $ALWAYS_EXCEPT $EXCEPT"
-
-SRCDIR=`dirname $0`
-export PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH
-
-TMP=${TMP:-/tmp}
-FSTYPE=${FSTYPE:-ext3}
-
-CHECKSTAT=${CHECKSTAT:-"checkstat -v"}
-CREATETEST=${CREATETEST:-createtest}
-LFS=${LFS:-lfs}
-LSTRIPE=${LSTRIPE:-"$LFS setstripe"}
-LFIND=${LFIND:-"$LFS find"}
-LVERIFY=${LVERIFY:-ll_dirstripe_verify}
-LCTL=${LCTL:-lctl}
-MCREATE=${MCREATE:-mcreate}
-OPENFILE=${OPENFILE:-openfile}
-OPENUNLINK=${OPENUNLINK:-openunlink}
-TOEXCL=${TOEXCL:-toexcl}
-TRUNCATE=${TRUNCATE:-truncate}
-MUNLINK=${MUNLINK:-munlink}
-SOCKETSERVER=${SOCKETSERVER:-socketserver}
-SOCKETCLIENT=${SOCKETCLIENT:-socketclient}
-IOPENTEST1=${IOPENTEST1:-iopentest1}
-IOPENTEST2=${IOPENTEST2:-iopentest2}
-PTLDEBUG=${PTLDEBUG:-0}
-MODE=${MODE:mds}
-
-if [ $UID -ne 0 ]; then
- RUNAS_ID="$UID"
- RUNAS=""
-else
- RUNAS_ID=${RUNAS_ID:-500}
- RUNAS=${RUNAS:-"runas -u $RUNAS_ID"}
-fi
+#
+# This test needs to be run on the client
+#
-export NAME=${NAME:-cmobd}
+LUSTRE=${LUSTRE:-`dirname $0`/..}
-SAVE_PWD=$PWD
+. ${CONFIG:=$LUSTRE/tests/cfg/smfs.sh}
-clean() {
- echo -n "cln.."
- sh llmountcleanup.sh > /dev/null || exit 20
- I_MOUNTED=no
-}
-CLEAN=${CLEAN:-clean}
+. $LUSTRE/tests/test-framework.sh
-start() {
- echo -n "mnt.."
- sh llrmount.sh > /dev/null || exit 10
- I_MOUNTED=yes
- echo "done"
-}
-START=${START:-start}
+init_test_env $@
-log() {
- echo "$*"
- lctl mark "$*" 2> /dev/null || true
-}
-trace() {
- log "STARTING: $*"
- strace -o $TMP/$1.strace -ttt $*
- RC=$?
- log "FINISHED: $*: rc $RC"
- return 1
-}
-TRACE=${TRACE:-""}
-
-check_kernel_version() {
- VERSION_FILE=/proc/fs/lustre/kernel_version
- WANT_VER=$1
- [ ! -f $VERSION_FILE ] && echo "can't find kernel version" && return 1
- GOT_VER=`cat $VERSION_FILE`
- [ $GOT_VER -ge $WANT_VER ] && return 0
- log "test needs at least kernel version $WANT_VER, running $GOT_VER"
- return 1
-}
+build_test_filter
-run_one() {
- if ! cat /proc/mounts | grep -q $DIR; then
- $START
- fi
- echo $PTLDEBUG >/proc/sys/portals/debug
- log "== test $1: $2"
- export TESTNAME=test_$1
- test_$1 || error "test_$1: exit with rc=$?"
- unset TESTNAME
- pass
- cd $SAVE_PWD
- $CLEAN
-}
+assert_env MDSCOUNT
-build_test_filter() {
- for O in $ONLY; do
- eval ONLY_${O}=true
- done
- for E in $EXCEPT $ALWAYS_EXCEPT; do
- eval EXCEPT_${E}=true
- done
+lsync() {
+ name=$1
+ device=`$LCTL device_list | grep " $name " | awk '{print $1}'`
+
+ [ -z $device ] && {
+ echo "Can't find device $name"
+ return 1
+ }
+${LCTL} << EOF
+device $device
+lsync
+EOF
+ return $?
}
+gen_config() {
+ rm -f $XMLCONFIG
-_basetest() {
- echo $*
-}
+ add_lmv cache_lmv_svc
+ set -vx
+ add_mds $CACHE_MDS --dev $MDS_CACHE_DEV --size $MDSSIZE --lmv cache_lmv_svc \
+ --mountfsoptions $MDS_MOUNT_OPS || exit 10
+ set -e
+ add_lmv master_lmv_svc
+ add_mds $MASTER1_MDS --dev $MDS_MASTER1_DEV --size $MDSSIZE --lmv master_lmv_svc
-basetest() {
- IFS=abcdefghijklmnopqrstuvwxyz _basetest $1
-}
+ add_lov_to_cache_master_lmv lov1 cache_lmv_svc master_lmv_svc --stripe_sz $STRIPE_BYTES \
+ --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
-run_test() {
- base=`basetest $1`
- if [ "$ONLY" ]; then
- testname=ONLY_$1
- if [ ${!testname}x != x ]; then
- run_one $1 "$2"
- return $?
- fi
- testname=ONLY_$base
- if [ ${!testname}x != x ]; then
- run_one $1 "$2"
- return $?
- fi
- echo -n "."
- return 0
- fi
- testname=EXCEPT_$1
- if [ ${!testname}x != x ]; then
- echo "skipping excluded test $1"
- return 0
- fi
- testname=EXCEPT_$base
- if [ ${!testname}x != x ]; then
- echo "skipping excluded test $1 (base $base)"
- return 0
- fi
- run_one $1 "$2"
- return $?
-}
+ add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE
-[ "$SANITYLOG" ] && rm -f $SANITYLOG || true
+ add_cmobd cmobd_mds ${CACHE_MDS}_svc master_lmv_svc
-error() {
- log "FAIL: $@"
- if [ "$SANITYLOG" ]; then
- echo "FAIL: $TESTNAME $@" >> $SANITYLOG
- else
- exit 1
- fi
+ do_lmc --add cobd --node client_facet --cobd cobd_svc --cache_obd cache_lmv_svc \
+ --master_obd master_lmv_svc
+
+ add_client client cobd --lov lov1 --path $MOUNT
}
-pass() {
- echo PASS
+build_test_filter
+
+cleanup() {
+ zconf_umount `hostname` $MOUNT
+ stop $CACHE_MDS ${FORCE} $MDSLCONFARGS
+ stop $MASTER1_MDS ${FORCE} $MDSLCONFARGS
+ stop ost ${FORCE} --dump cleanup.log
}
-MOUNT="`mount | awk '/^'$NAME' .* lustre_lite / { print $3 }'`"
-if [ -z "$MOUNT" ]; then
- sh llmount.sh
- MOUNT="`mount | awk '/^'$NAME' .* lustre_lite / { print $3 }'`"
- [ -z "$MOUNT" ] && error "NAME=$NAME not mounted"
- I_MOUNTED=yes
+if [ "$ONLY" == "cleanup" ]; then
+ sysctl -w portals.debug=0 || true
+ cleanup
+ exit
fi
-[ `echo $MOUNT | wc -w` -gt 1 ] && error "NAME=$NAME mounted more than once"
-
-DIR=${DIR:-$MOUNT}
-[ -z "`echo $DIR | grep $MOUNT`" ] && echo "$DIR not in $MOUNT" && exit 99
+SETUP=${SETUP:-"setup"}
+CLEANUP=${CLEANUP:-"cleanup"}
-rm -rf $DIR/[Rdfs][1-9]*
+setup() {
+ gen_config
+ start ost --reformat $OSTLCONFARGS
+ [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
+
+ start $MASTER1_MDS --reformat $MDSLCONFARGS
+ start $CACHE_MDS --reformat $MDSLCONFARGS
+
+ grep " $MOUNT " /proc/mounts || zconf_mount `hostname` $MOUNT
+}
-build_test_filter
+$SETUP
-echo preparing for tests involving mounts
-EXT2_DEV=${EXT2_DEV:-/tmp/SANITY.LOOP}
-touch $EXT2_DEV
-mke2fs -j -F $EXT2_DEV 8000 > /dev/null
+if [ "$ONLY" == "setup" ]; then
+ exit 0
+fi
-lsync() {
- name=$1
- device=`$LCTL device_list | grep " $name " | awk '{print $1}'`
-
- [ -z $device ] && {
- echo "Can't find device $name"
- return 1
- }
-
-${LCTL} << EOF
-device $device
-lsync
-EOF
- return $?
-}
+mkdir -p $DIR
test_1a() {
rm -fr $DIR/1a0 > /dev/null
echo "mkdir $DIR/1a0"
mkdir $DIR/1a0 || error
echo "cache flush on $NAME"
- lsync $NAME >/dev/null || error
+ lsync $CMOBD_NAME >/dev/null || error
echo "touch $DIR/1a0/f0"
touch $DIR/1a0/f0 || error
echo "cache flush on $NAME"
- lsync $NAME >/dev/null || error
+ lsync $CMOBD_NAME >/dev/null || error
echo "chmod +x $DIR/1a0/f0"
chmod +x $DIR/1a0/f0 || error
echo "cache flush on $NAME"
- lsync $NAME >/dev/null || error
+ lsync $CMOBD_NAME >/dev/null || error
echo "mv $DIR/1a0/f0 $DIR/1a0/f01"
mv $DIR/1a0/f0 $DIR/1a0/f01 || error
echo "cache flush on $NAME"
- lsync $NAME >/dev/null || error
+ lsync $CMOBD_NAME >/dev/null || error
echo "rm $DIR/1a0/f01"
rm $DIR/1a0/f01 || error
echo "cache flush on $NAME"
- lsync $NAME >/dev/null || error
+ lsync $CMOBD_NAME >/dev/null || error
echo "touch $DIR/1a0/f01"
touch $DIR/1a0/f01 || error
echo "cache flush on $NAME"
- lsync $NAME >/dev/null || error
+ lsync $CMOBD_NAME >/dev/null || error
echo "ln $DIR/1a0/f01 $DIR/1a0/f01h"
ln $DIR/1a0/f01 $DIR/1a0/f01h || error
echo "cache flush on $NAME"
- lsync $NAME >/dev/null || error
+ lsync $CMOBD_NAMEN >/dev/null || error
echo "ln -s $DIR/1a0/f01 $DIR/1a0/f01s"
ln -s $DIR/1a0/f01 $DIR/1a0/f01s || error
rm -fr $DIR/1a0 > /dev/null
echo "cache flush on $NAME"
- lsync $NAME >/dev/null || error
+ lsync $CMOBD_NAME >/dev/null || error
}
run_test 1a " WB test (lsync after each MD operation)============="
rm -fr $DIR/1b0 > /dev/null
echo "cache flush on $NAME"
- lsync $NAME >/dev/null || error
+ lsync $CMOBD_NAME >/dev/null || error
}
run_test 1b " WB test (lsync after bunch of MD operarions)============="
echo "createmany -o $DIR/2a0/f 4000"
createmany -o $DIR/2a0/f 4000
echo "cache flush on $NAME"
- lsync $NAME >/dev/null || error
+ lsync $CMOBD_NAME >/dev/null || error
}
+run_test 2a " WB test (flush createmany on master LMV) ======================"
test_2b() {
echo "find $DIR/2a0 -type f -exec rm -f {} \;"
find $DIR/2a0 -type f -exec rm -f {} \;
rmdir $DIR/2a0 || error
echo "cache flush on $NAME"
- lsync $NAME >/dev/null || error
+ lsync $CMOBD_NAME >/dev/null || error
}
-
-[ "x$MODE" = "xlmv" ] && {
-run_test 2a " WB test (flush createmany on master LMV) ======================"
run_test 2b " WB test (flush delmany on master LMV) ========================="
-}
-
-TMPDIR=$OLDTMPDIR
-TMP=$OLDTMP
-HOME=$OLDHOME
-log "cleanup: ========================================================"
-if [ "`mount | grep ^$NAME`" ]; then
- rm -rf $DIR/[Rdfs][1-9]*
- if [ "$I_MOUNTED" = "yes" ]; then
- sh llmountcleanup.sh || error
- fi
-fi
+$CLEANUP
-echo "=========================== finished ============================"
-[ -f "$SANITYLOG" ] && cat $SANITYLOG && exit 1 || true