diff --git a/lustre/tests/replay-single-lmv.sh b/lustre/tests/replay-single-lmv.sh new file mode 100755 index 0000000000000000000000000000000000000000..776ab3873f3b0264d0f1478e313944ddc63bb6c2 --- /dev/null +++ b/lustre/tests/replay-single-lmv.sh @@ -0,0 +1,169 @@ +#!/bin/sh + +set -e + +# +# This test needs to be run on the client +# + +LUSTRE=${LUSTRE:-`dirname $0`/..} +. $LUSTRE/tests/test-framework.sh + +init_test_env $@ + +. ${CONFIG:=$LUSTRE/tests/cfg/lmv.sh} + +# Skip these tests +ALWAYS_EXCEPT="" + + +gen_config() { + rm -f $XMLCONFIG + + if [ "$MDSCOUNT" -gt 1 ]; then + add_lmv lmv1 + for num in `seq $MDSCOUNT`; do + MDSDEV=$TMP/mds${num}-`hostname` + add_mds mds$num --dev $MDSDEV --size $MDSSIZE --lmv lmv1 + done + add_lov_to_lmv lov1 lmv1 --stripe_sz $STRIPE_BYTES \ + --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0 + add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE + add_ost ost2 --lov lov1 --dev ${OSTDEV}-2 --size $OSTSIZE + add_client client --lmv lmv1 --lov lov1 --path $MOUNT + else + add_mds mds1 --dev $MDSDEV --size $MDSSIZE + if [ ! -z "$mdsfailover_HOST" ]; then + add_mdsfailover mds --dev $MDSDEV --size $MDSSIZE + fi + + add_lov lov1 mds1 --stripe_sz $STRIPE_BYTES \ + --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0 + add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE + add_ost ost2 --lov lov1 --dev ${OSTDEV}-2 --size $OSTSIZE + add_client client --mds mds1_svc --lov lov1 --path $MOUNT + fi +} + +build_test_filter + +cleanup() { + # make sure we are using the primary MDS, so the config log will + # be able to clean up properly. + activemds=`facet_active mds` + if [ $activemds != "mds" ]; then + fail mds + fi + zconf_umount `hostname` $MOUNT + if [ "$MDSCOUNT" -gt 1 ]; then + for num in `seq $MDSCOUNT`; do + stop mds$num ${FORCE} $MDSLCONFARGS + done + else + stop mds ${FORCE} $MDSLCONFARGS + fi + stop ost2 ${FORCE} --dump cleanup.log + stop ost ${FORCE} --dump cleanup.log +} + +if [ "$ONLY" == "cleanup" ]; then + sysctl -w portals.debug=0 || true + cleanup + exit +fi + +SETUP=${SETUP:-"setup"} +CLEANUP=${CLEANUP:-"cleanup"} + +setup() { + gen_config + + start ost --reformat $OSTLCONFARGS + start ost2 --reformat $OSTLCONFARGS + [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE + start mds1 $MDSLCONFARGS --reformat + start mds2 $MDSLCONFARGS --reformat + start mds3 $MDSLCONFARGS --reformat + grep " $MOUNT " /proc/mounts || zconf_mount `hostname` $MOUNT +} + +$SETUP + +if [ "$ONLY" == "setup" ]; then + exit 0 +fi + +mkdir -p $DIR + +test_0() { + replay_barrier mds1 + fail mds1 +} +run_test 0 "empty replay" + +test_0b() { + # this test attempts to trigger a race in the precreation code, + # and must run before any other objects are created on the filesystem + fail ost + createmany -o $DIR/$tfile 20 || return 1 + unlinkmany $DIR/$tfile 20 || return 2 +} +run_test 0b "ensure object created after recover exists. (3284)" + +test_1a() { + mkdir $DIR/dir01 + replay_barrier mds2 + $CHECKSTAT -t dir $DIR/dir01 || return 1 + rmdir $DIR/dir01 + fail mds2 + stat $DIR/dir01 +} +run_test 1a "unlink cross-node dir (fail mds with inode)" + +test_1b() { + mkdir $DIR/dir11 + replay_barrier mds1 + $CHECKSTAT -t dir $DIR/dir11 || return 1 + rmdir $DIR/dir11 + fail mds1 + stat $DIR/dir11 +} +run_test 1b "unlink cross-node dir (fail mds with name)" + +test_2a() { + mkdir $DIR/dir21 + createmany -o $DIR/dir21/f 3000 + sleep 10 + $CHECKSTAT -t dir $DIR/dir21 || return 1 + $CHECKSTAT -t file $DIR/dir21/f1002 || return 1 + replay_barrier mds1 + rm $DIR/dir21/f1002 + fail mds1 + stat $DIR/dir21/f1002 +} +run_test 2a "unlink cross-node file (fail mds with name)" + + +test_3a() { + replay_barrier mds2 + mkdir $DIR/dir3a1 + $LCTL mark "FAILOVER mds2" + fail mds2 + stat $DIR + $CHECKSTAT -t dir $DIR/dir3a1 || return 1 +} +run_test 3a "mkdir cross-node dir (fail mds with inode)" + +test_3b() { + mkdir $DIR/dir13 + replay_barrier mds1 + $CHECKSTAT -t dir $DIR/dir13 || return 1 + rmdir $DIR/dir13 + fail mds1 + stat $DIR/dir13 +} +run_test 3b "mkdir cross-node dir (fail mds with name)" + +equals_msg test complete, cleaning up +$CLEANUP + diff --git a/lustre/tests/sanity-lmv.sh b/lustre/tests/sanity-lmv.sh index 2eedda12593fb3db3e07657c6f9ed38ecff3e317..4799a4b31c223abf39c2aa0b3b53c7d119c7122d 100644 --- a/lustre/tests/sanity-lmv.sh +++ b/lustre/tests/sanity-lmv.sh @@ -248,19 +248,23 @@ test_1c() { touch $DIR/1b1/file1 touch $DIR/1b1/file2 - echo "3 files left" + ls $DIR/1b1/ + log "3 files left" rmdir $DIR/1b1 && error rm -f $DIR/1b1/file0 - echo "2 files left" + ls $DIR/1b1/ + log "2 files left" rmdir $DIR/1b1 && error rm -f $DIR/1b1/file1 - echo "1 files left" + ls $DIR/1b1/ + log "1 files left" rmdir $DIR/1b1 && error rm -f $DIR/1b1/file2 - echo "0 files left" + ls $DIR/1b1/ + log "0 files left" rmdir $DIR/1b1 || error } run_test 1c " remove splitted cross-node dir ============================="