set -e
+# attempt to print a useful error location, but the ERR trap isn't
+# exported to functions, and the $LINENO doesn't work in EXIT.
+
+trap 'echo ERROR $0:$FUNCNAME:$LINENO: rc: $?' ERR EXIT
+
LUSTRE=${LUSTRE:-`dirname $0`/..}
LTESTDIR=${LTESTDIR:-$LUSTRE/../ltest}
PATH=$PATH:$LUSTRE/utils:$LUSTRE/tests
stop() {
facet=$1
shift
- lconf --node ${facet}_facet $@ -d replay-dual.xml
+ lconf --node ${facet}_facet $@ --cleanup replay-dual.xml
}
replay_barrier() {
}
fail() {
- stop mds
- start mds
+ local facet=$1
+ stop $facet --force --failover --nomod
+ start $facet --nomod
df $MOUNT1 | tail -1
df $MOUNT2 | tail -1
}
do_lmc --add mtpt --node client1_facet --path $MOUNT1 --mds mds1 --ost ost1
do_lmc --add mtpt --node client1_facet --path $MOUNT2 --mds mds1 --ost ost1
}
+error() {
+ echo '**** FAIL:' $@
+ exit 1
+}
+
+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
+}
+
+_basetest() {
+ echo $*
+}
+
+basetest() {
+ IFS=abcdefghijklmnopqrstuvwxyz _basetest $1
+}
+
+run_test() {
+ base=`basetest $1`
+ if [ ! -z "$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 $?
+}
+
+EQUALS="======================================================================"
+
+run_one() {
+ testnum=$1
+ message=$2
+
+ # Pretty tests run faster.
+ echo -n '=====' $testnum: $message
+ local suffixlen=`echo -n $2 | awk '{print 65 - length($0)}'`
+ printf ' %.*s\n' $suffixlen $EQUALS
+
+ test_${testnum} || error "test_$testnum failed with $?"
+}
+
+build_test_filter
gen_config
-start mds
-start ost
+start mds --reformat
+start ost --reformat
start client1
start client2
-touch $MOUNT1/lustre-works
-replay_barrier mds
-touch $MOUNT2/lustre-does-not-work
+test_1() {
+ touch $MOUNT1/lustre-works
+ replay_barrier mds
+ touch $MOUNT2/lustre-does-not-work
-stop client2
-stop client1
-stop ost
-stop mds
+ fail mds
+ if [ -e $MOUNT1/lustre-does-not-work ]; then
+ echo "$MOUNT1/lustre-does-not-work exists"
+ exit 1
+ fi
+}
-start mds
-start ost
-start client1
-start client2
+run_test 1 "|X| simple create"
+
+
+test_2() {
+ replay_barrier mds
+ mkdir $MOUNT1/1
+
+ fail mds
+ ls $MOUNT2/1
+}
+
+run_test 2 "|X| mkdir "
+
+
+test_3() {
+ replay_barrier mds
+ mkdir $MOUNT1/1
+ mkdir $MOUNT2/1/2
+
+ fail mds
+ ls $MOUNT2/1
+ ls $MOUNT1/1/2
+}
-if [ -e $MOUNT1/lustre-does-not-work ]; then
- echo "$MOUNT1/lustre-does-not-work exists"
- exit 1
-fi
+run_test 3 "|X| mkdir 1, mkdir 1/2 "
stop client2
stop client1
}
run_test() {
- base=`basetest $1`
- if [ ! -z $ONLY ]; then
+ base=`basetest $1`
+ if [ ! -z "$ONLY" ]; then
testname=ONLY_$1
if [ ${!testname}x != x ]; then
- run_one $1 "$2"
- return $?
+ run_one $1 "$2"
+ return $?
fi
testname=ONLY_$base
if [ ${!testname}x != x ]; then
- run_one $1 "$2"
- return $?
+ run_one $1 "$2"
+ return $?
fi
echo -n "."
return 0
- fi
+ fi
testname=EXCEPT_$1
if [ ${!testname}x != x ]; then
echo "skipping excluded test $1"
return 0
fi
run_one $1 "$2"
- return $?
+
+ return $?
}
EQUALS="======================================================================"
run_test 4 "open |X| close"
test_5() {
- :
+ replay_barrier mds
+ mcreate $MOUNTPT/f5
+ local old_inum=`ls -i $MOUNTPT/f5 | awk '{print $1}'`
+ fail mds
+ local new_inum=`ls -i $MOUNTPT/f5 | awk '{print $1}'`
+
+ echo " old_inum == $old_inum, new_inum == $new_inum"
+ if [ $old_inum -eq $new_inum ] ;
+ then
+ echo " old_inum and new_inum match"
+ else
+ echo "!!!! old_inum and new_inum NOT match"
+
+ fi
+ rm -f $MOUNTPT/f5
}
run_test 5 "|X| create (same inum/gen)"
test_6() {
- :
+ mcreate $MOUNTPT/f6
+ replay_barrier mds
+ mv $MOUNTPT/f6 $MOUNTPT/F6
+ rm -f $MOUNTPT/F6
+ fail mds
+ ls $MOUNTPT/f6
+ ls $MOUNTPT/F6
+ rm -f $MOUNTPT/f6
+ rm -f $MOUNTPT/F6
+
}
run_test 6 "create |X| rename unlink"
test_7() {
- :
+ mcreate $MOUNTPT/f7
+ echo "old" > $MOUNTPT/f7
+ mv $MOUNTPT/f7 $MOUNTPT/F7
+ replay_barrier mds
+ mcreate $MOUNTPT/f7
+ echo "new" > $MOUNTPT/f7
+ cat $MOUNTPT/f7 | grep new
+ cat $MOUNTPT/F7 | grep old
+ fail mds
+ cat $MOUNTPT/f7 | grep new
+ cat $MOUNTPT/F7 | grep old
}
run_test 7 "create open write rename |X| create-old-name read"