Skip to content
Snippets Groups Projects
conf-sanity.sh 49.9 KiB
Newer Older
#!/bin/bash
# requirement:
#	add uml1 uml2 uml3 in your /etc/hosts

Robert Read's avatar
Robert Read committed
# FIXME - there is no reason to use all of these different
#   return codes, espcially when most of them are mapped to something
#   else anyway.  The combination of test number and return code
#   figure out what failed.

Nathan Rutman's avatar
Nathan Rutman committed
ONLY=${ONLY:-"$*"}

# These tests don't apply to mountconf
Yong Fan's avatar
Yong Fan committed
MOUNTCONFSKIP="10 11 12 13 13b 14 15"
# bug number for skipped test: 13739 
HEAD_EXCEPT="                  32a 32b "
Nathan Rutman's avatar
Nathan Rutman committed

chenzheng's avatar
chenzheng committed
# bug number for skipped test:                                 
ALWAYS_EXCEPT=" $CONF_SANITY_EXCEPT $MOUNTCONFSKIP $HEAD_EXCEPT"
Nathan Rutman's avatar
Nathan Rutman committed
# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!

SRCDIR=`dirname $0`
PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH

PTLDEBUG=${PTLDEBUG:--1}
Elena Gryaznova's avatar
Elena Gryaznova committed
SAVE_PWD=$PWD
LUSTRE=${LUSTRE:-`dirname $0`/..}
RLUSTRE=${RLUSTRE:-$LUSTRE}
MOUNTLUSTRE=${MOUNTLUSTRE:-/sbin/mount.lustre}
MKFSLUSTRE=${MKFSLUSTRE:-/usr/sbin/mkfs.lustre}
Nathan Rutman's avatar
Nathan Rutman committed
HOSTNAME=`hostname`

. $LUSTRE/tests/test-framework.sh
init_test_env $@
Elena Gryaznova's avatar
Elena Gryaznova committed
# STORED_MDSSIZE is used in test_18
if [ -n "$MDSSIZE" ]; then
    STORED_MDSSIZE=$MDSSIZE
fi
Elena Gryaznova's avatar
Elena Gryaznova committed
# use small MDS + OST size to speed formatting time
MDSSIZE=40000
OSTSIZE=40000
. ${CONFIG:=$LUSTRE/tests/cfg/local.sh}
Elena Gryaznova's avatar
Elena Gryaznova committed
#
[ "$SLOW" = "no" ] && EXCEPT_SLOW="0 1 2 3 6 7 15 18 24b 25 30 31 32 33 34a "

Elena Gryaznova's avatar
Elena Gryaznova committed
assert_DIR

Nathan Rutman's avatar
Nathan Rutman committed
reformat() {
        formatall
Nathan Rutman's avatar
Nathan Rutman committed
writeconf() {
    local facet=mds
    shift
    stop ${facet} -f
    rm -f ${facet}active
    # who knows if/where $TUNEFS is installed?  Better reformat if it fails...
    do_facet ${facet} "$TUNEFS --writeconf $MDSDEV" || echo "tunefs failed, reformatting instead" && reformat
}
Nathan Rutman's avatar
Nathan Rutman committed
gen_config() {
        reformat
        # The MGS must be started before the OSTs for a new fs, so start
        # and stop to generate the startup logs. 
	start_mds
	start_ost
	sleep 5
	stop_ost
	stop_mds
Nathan Rutman's avatar
Nathan Rutman committed
	echo "start mds service on `facet_active_host mds`"
	start mds $MDSDEV $MDS_MOUNT_OPTS || return 94
Nathan Rutman's avatar
Nathan Rutman committed
	echo "stop mds service on `facet_active_host mds`"
	# These tests all use non-failover stop
	stop mds -f  || return 97
Nathan Rutman's avatar
Nathan Rutman committed
	echo "start ost1 service on `facet_active_host ost1`"
	start ost1 `ostdevname 1` $OST_MOUNT_OPTS || return 95
Nathan Rutman's avatar
Nathan Rutman committed
	echo "stop ost1 service on `facet_active_host ost1`"
	# These tests all use non-failover stop
	stop ost1 -f  || return 98
}

start_ost2() {
	echo "start ost2 service on `facet_active_host ost2`"
	start ost2 `ostdevname 2` $OST_MOUNT_OPTS || return 92
}

stop_ost2() {
	echo "stop ost2 service on `facet_active_host ost2`"
	# These tests all use non-failover stop
	stop ost2 -f  || return 93
}

mount_client() {
	local MOUNTPATH=$1
Nathan Rutman's avatar
Nathan Rutman committed
	echo "mount $FSNAME on ${MOUNTPATH}....."
	zconf_mount `hostname` $MOUNTPATH  || return 96
}

remount_client() {
	local SAVEMOUNTOPT=$MOUNTOPT
	MOUNTOPT="remount,$1"
	local MOUNTPATH=$2
	echo "remount '$1' lustre on ${MOUNTPATH}....."
	zconf_mount `hostname`  $MOUNTPATH  || return 96
Nathan Rutman's avatar
Nathan Rutman committed
	MOUNTOPT=$SAVEMOUNTOPT
}

umount_client() {
	local MOUNTPATH=$1
	echo "umount lustre on ${MOUNTPATH}....."
Nathan Rutman's avatar
Nathan Rutman committed
	zconf_umount `hostname` $MOUNTPATH || return 97
Nathan Rutman's avatar
Nathan Rutman committed
	echo "manual umount lustre on ${MOUNT}...."
	do_facet client "umount -d $MOUNT"
	mount_client $MOUNT
Nathan Rutman's avatar
Nathan Rutman committed
cleanup_nocli() {
Yury Umanets's avatar
Yury Umanets committed
	stop_mds || return 201
Nic Henke's avatar
Nic Henke committed
	stop_ost || return 202
Nathan Rutman's avatar
Nathan Rutman committed
	unload_modules || return 203
}

cleanup() {
 	umount_client $MOUNT || return 200
	cleanup_nocli || return $?
Nathan Rutman's avatar
Nathan Rutman committed
	do_facet client "cp /etc/passwd $DIR/a" || return 71
	do_facet client "rm $DIR/a" || return 72
	# make sure lustre is actually mounted (touch will block, 
        # but grep won't, so do it after) 
        do_facet client "grep $MOUNT' ' /proc/mounts > /dev/null" || return 73
	echo "setup single mount lustre success"
}

check_mount2() {
	do_facet client "touch $DIR/a" || return 71	
	do_facet client "rm $DIR/a" || return 72	
	do_facet client "touch $DIR2/a" || return 73	
	do_facet client "rm $DIR2/a" || return 74	
	echo "setup double mount lustre success"
}

build_test_filter

Nathan Rutman's avatar
Nathan Rutman committed
if [ "$ONLY" == "setup" ]; then
	setup
	exit
fi

if [ "$ONLY" == "cleanup" ]; then
	cleanup
	exit
fi

#create single point mountpoint

gen_config
Nathan Rutman's avatar
Nathan Rutman committed

Eric Mei's avatar
Eric Mei committed
init_gss
Nathan Rutman's avatar
Nathan Rutman committed
        setup
	check_mount || return 41
Nic Henke's avatar
Nic Henke committed
	cleanup || return $?
}
run_test 0 "single mount setup"

test_1() {
	start_ost
	echo "start ost second time..."
Nathan Rutman's avatar
Nathan Rutman committed
	setup
	check_mount || return 42
Nic Henke's avatar
Nic Henke committed
	cleanup || return $?
Nathan Rutman's avatar
Nathan Rutman committed
run_test 1 "start up ost twice (should return errors)"

test_2() {
	start_ost
	start_mds	
	echo "start mds second time.."
Nathan Rutman's avatar
Nathan Rutman committed
	start_mds
	mount_client $MOUNT
	check_mount || return 43
Nic Henke's avatar
Nic Henke committed
	cleanup || return $?
Nathan Rutman's avatar
Nathan Rutman committed
run_test 2 "start up mds twice (should return err)"
Nathan Rutman's avatar
Nathan Rutman committed
	#mount.lustre returns an error if already in mtab
	mount_client $MOUNT && return $?
	check_mount || return 44
Nathan Rutman's avatar
Nathan Rutman committed
	cleanup || return $?
Nathan Rutman's avatar
Nathan Rutman committed
run_test 3 "mount client twice (should return err)"

test_4() {
	setup
	touch $DIR/$tfile || return 85
Nathan Rutman's avatar
Nathan Rutman committed
	stop_ost -f
Nic Henke's avatar
Nic Henke committed
	eno=$?
	# ok for ost to fail shutdown
	if [ 202 -ne $eno ]; then
		return $eno;
	fi
	return 0
}
run_test 4 "force cleanup ost, then cleanup"

Elena Gryaznova's avatar
Elena Gryaznova committed
test_5a() {	# was test_5
Robert Read's avatar
Robert Read committed
	touch $DIR/$tfile || return 1
Elena Gryaznova's avatar
Elena Gryaznova committed
	fuser -m -v $MOUNT && echo "$MOUNT is in use by user space process."

Nathan Rutman's avatar
Nathan Rutman committed
	stop_mds -f || return 2
Robert Read's avatar
Robert Read committed

	# cleanup may return an error from the failed
	# disconnects; for now I'll consider this successful
Robert Read's avatar
Robert Read committed
	# if all the modules have unloaded.
Nathan Rutman's avatar
Nathan Rutman committed
 	umount -d $MOUNT &
Robert Read's avatar
Robert Read committed
	UMOUNT_PID=$!
Nathan Rutman's avatar
Nathan Rutman committed
	sleep 6
Robert Read's avatar
Robert Read committed
	echo "killing umount"
	kill -TERM $UMOUNT_PID
Robert Read's avatar
Robert Read committed
	echo "waiting for umount to finish"
	wait $UMOUNT_PID
Elena Gryaznova's avatar
Elena Gryaznova committed
	if grep " $MOUNT " /proc/mounts; then
		echo "test 5: /proc/mounts after failed umount"
Nathan Rutman's avatar
Nathan Rutman committed
		umount $MOUNT &
		UMOUNT_PID=$!
		sleep 2
		echo "killing umount"
		kill -TERM $UMOUNT_PID
		echo "waiting for umount to finish"
		wait $UMOUNT_PID
Elena Gryaznova's avatar
Elena Gryaznova committed
		grep " $MOUNT " /proc/mounts && echo "test 5: /proc/mounts after second umount" && return 11
Nathan Rutman's avatar
Nathan Rutman committed
	fi
Robert Read's avatar
Robert Read committed

Nathan Rutman's avatar
Nathan Rutman committed
	manual_umount_client
Robert Read's avatar
Robert Read committed
	# stop_mds is a no-op here, and should not fail
Nathan Rutman's avatar
Nathan Rutman committed
	cleanup_nocli || return $?
	# df may have lingering entry
	manual_umount_client
	# mtab may have lingering entry
Elena Gryaznova's avatar
Elena Gryaznova committed
	local WAIT=0
	local MAX_WAIT=20
	local sleep=1
	while [ "$WAIT" -ne "$MAX_WAIT" ]; do
		sleep $sleep
		grep -q $MOUNT" " /etc/mtab || break
        	echo "Waiting /etc/mtab updated ... "
		WAIT=$(( WAIT + sleep))
	done
	[ "$WAIT" -eq "$MAX_WAIT" ] && error "/etc/mtab is not updated in $WAIT secs"
	echo "/etc/mtab updated in $WAIT secs"
Elena Gryaznova's avatar
Elena Gryaznova committed
run_test 5a "force cleanup mds, then cleanup"
Robert Read's avatar
Robert Read committed
test_5b() {
	start_ost
	[ -d $MOUNT ] || mkdir -p $MOUNT
Nathan Rutman's avatar
Nathan Rutman committed
	grep " $MOUNT " /etc/mtab && echo "test 5b: mtab before mount" && return 10
	mount_client $MOUNT && return 1
	grep " $MOUNT " /etc/mtab && echo "test 5b: mtab after failed mount" && return 11
	umount_client $MOUNT	
Robert Read's avatar
Robert Read committed
	# stop_mds is a no-op here, and should not fail
Nathan Rutman's avatar
Nathan Rutman committed
	cleanup_nocli || return $?
Robert Read's avatar
Robert Read committed
	return 0
}
Nathan Rutman's avatar
Nathan Rutman committed
run_test 5b "mds down, cleanup after failed mount (bug 2712) (should return errs)"
Robert Read's avatar
Robert Read committed

test_5c() {
	start_ost
	start_mds
	[ -d $MOUNT ] || mkdir -p $MOUNT
Nathan Rutman's avatar
Nathan Rutman committed
	grep " $MOUNT " /etc/mtab && echo "test 5c: mtab before mount" && return 10
Elena Gryaznova's avatar
Elena Gryaznova committed
	local oldfs="${FSNAME}"
	FSNAME="wrong.${FSNAME}"
	mount_client $MOUNT || :
	FSNAME=${oldfs}
Nathan Rutman's avatar
Nathan Rutman committed
	grep " $MOUNT " /etc/mtab && echo "test 5c: mtab after failed mount" && return 11
	umount_client $MOUNT
	cleanup_nocli  || return $?
Robert Read's avatar
Robert Read committed
}
Nathan Rutman's avatar
Nathan Rutman committed
run_test 5c "cleanup after failed mount (bug 2712) (should return errs)"
Robert Read's avatar
Robert Read committed

Nathan Rutman's avatar
Nathan Rutman committed
	start_ost
	start_mds
	stop_ost -f
	grep " $MOUNT " /etc/mtab && echo "test 5d: mtab before mount" && return 10
	mount_client $MOUNT || return 1
	cleanup  || return $?
	grep " $MOUNT " /etc/mtab && echo "test 5d: mtab after unmount" && return 11
	return 0
}
run_test 5d "mount with ost down"
Nathan Rutman's avatar
Nathan Rutman committed
test_5e() {
	start_ost
	start_mds
Nathan Rutman's avatar
Nathan Rutman committed
#define OBD_FAIL_PTLRPC_DELAY_SEND       0x506
komaln's avatar
komaln committed
	do_facet client "lctl set_param fail_loc=0x80000506"
Nathan Rutman's avatar
Nathan Rutman committed
	grep " $MOUNT " /etc/mtab && echo "test 5e: mtab before mount" && return 10
	mount_client $MOUNT || echo "mount failed (not fatal)"
	cleanup  || return $?
	grep " $MOUNT " /etc/mtab && echo "test 5e: mtab after unmount" && return 11
	return 0
Nathan Rutman's avatar
Nathan Rutman committed
run_test 5e "delayed connect, don't crash (bug 10268)"
test_6() {
	setup
	manual_umount_client
	mount_client ${MOUNT} || return 87
	touch $DIR/a || return 86
Nic Henke's avatar
Nic Henke committed
	cleanup  || return $?
}
run_test 6 "manual umount, then mount again"

test_7() {
	setup
	manual_umount_client
Nathan Rutman's avatar
Nathan Rutman committed
	cleanup_nocli || return $?
}
run_test 7 "manual umount, then cleanup"

test_8() {
Nathan Rutman's avatar
Nathan Rutman committed
	setup
	mount_client $MOUNT2
	check_mount2 || return 45
	umount_client $MOUNT2
Nathan Rutman's avatar
Nathan Rutman committed
	cleanup  || return $?
}
run_test 8 "double mount setup"

wangchao's avatar
wangchao committed
test_9() {
        start_ost

komaln's avatar
komaln committed
	do_facet ost1 lctl set_param debug=\'inode trace\' || return 1
	do_facet ost1 lctl set_param subsystem_debug=\'mds ost\' || return 1
wangchao's avatar
wangchao committed

komaln's avatar
komaln committed
        CHECK_PTLDEBUG="`do_facet ost1 lctl get_param -n debug`"
Nathan Rutman's avatar
Nathan Rutman committed
        if [ "$CHECK_PTLDEBUG" ] && [ "$CHECK_PTLDEBUG" = "trace inode" ];then
           echo "lnet.debug success"
Nathan Rutman's avatar
Nathan Rutman committed
           echo "lnet.debug: want 'trace inode', have '$CHECK_PTLDEBUG'"
komaln's avatar
komaln committed
        CHECK_SUBSYS="`do_facet ost1 lctl get_param -n subsystem_debug`"
Nathan Rutman's avatar
Nathan Rutman committed
        if [ "$CHECK_SUBSYS" ] && [ "$CHECK_SUBSYS" = "mds ost" ]; then
           echo "lnet.subsystem_debug success"
Nathan Rutman's avatar
Nathan Rutman committed
           echo "lnet.subsystem_debug: want 'mds ost', have '$CHECK_SUBSYS'"
Nathan Rutman's avatar
Nathan Rutman committed
        stop_ost || return $?
wangchao's avatar
wangchao committed
}
Nathan Rutman's avatar
Nathan Rutman committed
run_test 9 "test ptldebug and subsystem for mkfs"
wangchao's avatar
wangchao committed

wangchao's avatar
wangchao committed
test_10() {
wangchao's avatar
wangchao committed
        echo "generate configuration with the same name for node and mds"
wangchao's avatar
wangchao committed
        OLDXMLCONFIG=$XMLCONFIG
        XMLCONFIG="broken.xml"
        [ -f "$XMLCONFIG" ] && rm -f $XMLCONFIG
Nathan Rutman's avatar
Nathan Rutman committed
        facet="mds"
wangchao's avatar
wangchao committed
        rm -f ${facet}active
        add_facet $facet
        echo "the name for node and mds is the same"
        do_lmc --add mds --node ${facet}_facet --mds ${facet}_facet \
            --dev $MDSDEV --size $MDSSIZE || return $?
        do_lmc --add lov --mds ${facet}_facet --lov lov1 --stripe_sz \
            $STRIPE_BYTES --stripe_cnt $STRIPES_PER_OBJ \
            --stripe_pattern 0 || return $?
        add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE
        facet="client"
        add_facet $facet --lustre_upcall $UPCALL
Nathan Rutman's avatar
Nathan Rutman committed
        do_lmc --add mtpt --node ${facet}_facet --mds mds_facet \
wangchao's avatar
wangchao committed
            --lov lov1 --path $MOUNT

        echo "mount lustre"
        start_ost
        start_mds
        mount_client $MOUNT
        check_mount || return 41
        cleanup || return $?

wangchao's avatar
wangchao committed
        echo "Success!"
        XMLCONFIG=$OLDXMLCONFIG
}
wangchao's avatar
wangchao committed
run_test 10 "mount lustre with the same name for node and mds"
wangchao's avatar
wangchao committed
test_11() {
        OLDXMLCONFIG=$XMLCONFIG
        XMLCONFIG="conf11.xml"

        [ -f "$XMLCONFIG" ] && rm -f $XMLCONFIG
Nathan Rutman's avatar
Nathan Rutman committed
        add_mds mds --dev $MDSDEV --size $MDSSIZE
wangchao's avatar
wangchao committed
        add_ost ost --dev $OSTDEV --size $OSTSIZE
Nathan Rutman's avatar
Nathan Rutman committed
        add_client client mds --path $MOUNT --ost ost_svc || return $?
wangchao's avatar
wangchao committed
        echo "Default lov config success!"
wangchao's avatar
wangchao committed
        [ -f "$XMLCONFIG" ] && rm -f $XMLCONFIG
Nathan Rutman's avatar
Nathan Rutman committed
        add_mds mds --dev $MDSDEV --size $MDSSIZE
wangchao's avatar
wangchao committed
        add_ost ost --dev $OSTDEV --size $OSTSIZE
Nathan Rutman's avatar
Nathan Rutman committed
        add_client client mds --path $MOUNT && return $?
wangchao's avatar
wangchao committed
        echo "--add mtpt with neither --lov nor --ost will return error"

        echo ""
        echo "Success!"
        XMLCONFIG=$OLDXMLCONFIG
}
run_test 11 "use default lov configuration (should return error)"

wangchao's avatar
wangchao committed
test_12() {
        OLDXMLCONFIG=$XMLCONFIG
        XMLCONFIG="batch.xml"
        BATCHFILE="batchfile"

        # test double quote
        [ -f "$XMLCONFIG" ] && rm -f $XMLCONFIG
        [ -f "$BATCHFILE" ] && rm -f $BATCHFILE
Nathan Rutman's avatar
Nathan Rutman committed
        echo "--add net --node $HOSTNAME --nid $HOSTNAME --nettype tcp" > $BATCHFILE
        echo "--add mds --node $HOSTNAME --mds mds1 --mkfsoptions \"-I 128\"" >> $BATCHFILE
wangchao's avatar
wangchao committed
        # --mkfsoptions "-I 128"
        do_lmc -m $XMLCONFIG --batch $BATCHFILE || return $?
        if [ `sed -n '/>-I 128</p' $XMLCONFIG | wc -l` -eq 1 ]; then
                echo "matched double quote success"
        else
                echo "matched double quote fail"
                return 1
wangchao's avatar
wangchao committed
        rm -f $XMLCONFIG
        rm -f $BATCHFILE
Nathan Rutman's avatar
Nathan Rutman committed
        echo "--add net --node $HOSTNAME --nid $HOSTNAME --nettype tcp" > $BATCHFILE
        echo "--add mds --node $HOSTNAME --mds mds1 --mkfsoptions \"-I 128" >> $BATCHFILE
wangchao's avatar
wangchao committed
        # --mkfsoptions "-I 128
        do_lmc -m $XMLCONFIG --batch $BATCHFILE && return $?
        echo "unmatched double quote should return error"

        # test single quote
        rm -f $BATCHFILE
Nathan Rutman's avatar
Nathan Rutman committed
        echo "--add net --node $HOSTNAME --nid $HOSTNAME --nettype tcp" > $BATCHFILE
        echo "--add mds --node $HOSTNAME --mds mds1 --mkfsoptions '-I 128'" >> $BATCHFILE
wangchao's avatar
wangchao committed
        # --mkfsoptions '-I 128'
        do_lmc -m $XMLCONFIG --batch $BATCHFILE || return $?
        if [ `sed -n '/>-I 128</p' $XMLCONFIG | wc -l` -eq 1 ]; then
                echo "matched single quote success"
        else
                echo "matched single quote fail"
                return 1
        fi
        rm -f $XMLCONFIG
        rm -f $BATCHFILE
Nathan Rutman's avatar
Nathan Rutman committed
        echo "--add net --node $HOSTNAME --nid $HOSTNAME --nettype tcp" > $BATCHFILE
        echo "--add mds --node $HOSTNAME --mds mds1 --mkfsoptions '-I 128" >> $BATCHFILE
wangchao's avatar
wangchao committed
        # --mkfsoptions '-I 128
        do_lmc -m $XMLCONFIG --batch $BATCHFILE && return $?
        echo "unmatched single quote should return error"

        # test backslash
        rm -f $BATCHFILE
Nathan Rutman's avatar
Nathan Rutman committed
        echo "--add net --node $HOSTNAME --nid $HOSTNAME --nettype tcp" > $BATCHFILE
        echo "--add mds --node $HOSTNAME --mds mds1 --mkfsoptions \-\I\ \128" >> $BATCHFILE
wangchao's avatar
wangchao committed
        # --mkfsoptions \-\I\ \128
        do_lmc -m $XMLCONFIG --batch $BATCHFILE || return $?
        if [ `sed -n '/>-I 128</p' $XMLCONFIG | wc -l` -eq 1 ]; then
                echo "backslash followed by a whitespace/letter success"
        else
                echo "backslash followed by a whitespace/letter fail"
                return 1
        fi
        rm -f $XMLCONFIG
        rm -f $BATCHFILE
Nathan Rutman's avatar
Nathan Rutman committed
        echo "--add net --node $HOSTNAME --nid $HOSTNAME --nettype tcp" > $BATCHFILE
        echo "--add mds --node $HOSTNAME --mds mds1 --mkfsoptions -I\ 128\\" >> $BATCHFILE
wangchao's avatar
wangchao committed
        # --mkfsoptions -I\ 128\
        do_lmc -m $XMLCONFIG --batch $BATCHFILE && return $?
        echo "backslash followed by nothing should return error"

        rm -f $BATCHFILE
        XMLCONFIG=$OLDXMLCONFIG
}
run_test 12 "lmc --batch, with single/double quote, backslash in batchfile"

Elena Gryaznova's avatar
Elena Gryaznova committed
test_13a() {	# was test_13
wangchao's avatar
wangchao committed
        OLDXMLCONFIG=$XMLCONFIG
        XMLCONFIG="conf13-1.xml"

        # check long uuid will be truncated properly and uniquely
        echo "To generate XML configuration file(with long ost name): $XMLCONFIG"
        [ -f "$XMLCONFIG" ] && rm -f $XMLCONFIG
Nathan Rutman's avatar
Nathan Rutman committed
        do_lmc --add net --node $HOSTNAME --nid $HOSTNAME --nettype tcp
        do_lmc --add mds --node $HOSTNAME --mds mds1_name_longer_than_31characters
        do_lmc --add mds --node $HOSTNAME --mds mds2_name_longer_than_31characters
wangchao's avatar
wangchao committed
        if [ ! -f "$XMLCONFIG" ]; then
                echo "Error:no file $XMLCONFIG created!"
                return 1
        fi
        EXPECTEDMDS1UUID="e_longer_than_31characters_UUID"
        EXPECTEDMDS2UUID="longer_than_31characters_UUID_2"
        FOUNDMDS1UUID=`awk -F"'" '/<mds .*uuid=/' $XMLCONFIG | sed -n '1p' \
                       | sed "s/ /\n\r/g" | awk -F"'" '/uuid=/{print $2}'`
        FOUNDMDS2UUID=`awk -F"'" '/<mds .*uuid=/' $XMLCONFIG | sed -n '2p' \
                       | sed "s/ /\n\r/g" | awk -F"'" '/uuid=/{print $2}'`
Nathan Rutman's avatar
Nathan Rutman committed
	[ -z "$FOUNDMDS1UUID" ] && echo "MDS1 UUID empty" && return 1
	[ -z "$FOUNDMDS2UUID" ] && echo "MDS2 UUID empty" && return 1
        if ([ $EXPECTEDMDS1UUID = $FOUNDMDS1UUID ] && [ $EXPECTEDMDS2UUID = $FOUNDMDS2UUID ]) || \
           ([ $EXPECTEDMDS1UUID = $FOUNDMDS2UUID ] && [ $EXPECTEDMDS2UUID = $FOUNDMDS1UUID ]); then
                echo "Success:long uuid truncated successfully and being unique."
        else
                echo "Error:expected uuid for mds1 and mds2: $EXPECTEDMDS1UUID; $EXPECTEDMDS2UUID"
                echo "but:     found uuid for mds1 and mds2: $FOUNDMDS1UUID; $FOUNDMDS2UUID"
wangchao's avatar
wangchao committed
                return 1
        fi
Nathan Rutman's avatar
Nathan Rutman committed
        rm -f $XMLCONFIG
        XMLCONFIG=$OLDXMLCONFIG
}
Elena Gryaznova's avatar
Elena Gryaznova committed
run_test 13a "check new_uuid of lmc operating correctly"
wangchao's avatar
wangchao committed

Nathan Rutman's avatar
Nathan Rutman committed
test_13b() {
        OLDXMLCONFIG=$XMLCONFIG
        XMLCONFIG="conf13-1.xml"
        SECONDXMLCONFIG="conf13-2.xml"
wangchao's avatar
wangchao committed
        # check multiple invocations for lmc generate same XML configuration file
        rm -f $XMLCONFIG
        echo "Generate the first XML configuration file"
        gen_config
        echo "mv $XMLCONFIG to $SECONDXMLCONFIG"
Nathan Rutman's avatar
Nathan Rutman committed
        sed -e "s/mtime[^ ]*//" $XMLCONFIG > $SECONDXMLCONFIG || return $?
wangchao's avatar
wangchao committed
        echo "Generate the second XML configuration file"
        gen_config
Nathan Rutman's avatar
Nathan Rutman committed
	# don't compare .xml mtime, it will always be different
        if [ `sed -e "s/mtime[^ ]*//" $XMLCONFIG | diff - $SECONDXMLCONFIG | wc -l` -eq 0 ]; then
wangchao's avatar
wangchao committed
                echo "Success:multiple invocations for lmc generate same XML file"
        else
                echo "Error: multiple invocations for lmc generate different XML file"
                return 1
        fi

Nathan Rutman's avatar
Nathan Rutman committed
        rm -f $XMLCONFIG $SECONDXMLCONFIG
wangchao's avatar
wangchao committed
        XMLCONFIG=$OLDXMLCONFIG
}
Nathan Rutman's avatar
Nathan Rutman committed
run_test 13b "check lmc generates consistent .xml file"
wangchao's avatar
wangchao committed

wangchao's avatar
wangchao committed
test_14() {
        rm -f $XMLCONFIG

        # create xml file with --mkfsoptions for ost
        echo "create xml file with --mkfsoptions for ost"
Nathan Rutman's avatar
Nathan Rutman committed
        add_mds mds --dev $MDSDEV --size $MDSSIZE
        add_lov lov1 mds --stripe_sz $STRIPE_BYTES\
wangchao's avatar
wangchao committed
            --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
        add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE \
            --mkfsoptions "-Llabel_conf_14"
Nathan Rutman's avatar
Nathan Rutman committed
        add_client client mds --lov lov1 --path $MOUNT
wangchao's avatar
wangchao committed

        FOUNDSTRING=`awk -F"<" '/<mkfsoptions>/{print $2}' $XMLCONFIG`
        EXPECTEDSTRING="mkfsoptions>-Llabel_conf_14"
Nathan Rutman's avatar
Nathan Rutman committed
        if [ "$EXPECTEDSTRING" != "$FOUNDSTRING" ]; then
                echo "Error: expected: $EXPECTEDSTRING; found: $FOUNDSTRING"
wangchao's avatar
wangchao committed
                return 1
        fi
        echo "Success:mkfsoptions for ost written to xml file correctly."

        # mount lustre to test lconf mkfsoptions-parsing
        echo "mount lustre"
        start_ost
        start_mds
        mount_client $MOUNT || return $?
Nathan Rutman's avatar
Nathan Rutman committed
        if [ -z "`do_facet ost1 dumpe2fs -h $OSTDEV | grep label_conf_14`" ]; then
                echo "Error: the mkoptions not applied to mke2fs of ost."
                return 1
        fi
wangchao's avatar
wangchao committed
        cleanup
        echo "lconf mkfsoptions for ost success"
wangchao's avatar
wangchao committed

        gen_config
}
run_test 14 "test mkfsoptions of ost for lmc and lconf"

cleanup_15() {
	trap 0
	[ -f $MOUNTLUSTRE ] && echo "remove $MOUNTLUSTRE" && rm -f $MOUNTLUSTRE
	if [ -f $MOUNTLUSTRE.sav ]; then
		echo "return original $MOUNTLUSTRE.sav to $MOUNTLUSTRE"
		mv $MOUNTLUSTRE.sav $MOUNTLUSTRE
	fi
}

Nathan Rutman's avatar
Nathan Rutman committed
# this only tests the kernel mount command, not anything about lustre.
Nathan Rutman's avatar
Nathan Rutman committed
        MOUNTLUSTRE=${MOUNTLUSTRE:-/sbin/mount.lustre}
	start_ost
	start_mds
Nathan Rutman's avatar
Nathan Rutman committed

	echo "mount lustre on ${MOUNT} without $MOUNTLUSTRE....."
	if [ -f "$MOUNTLUSTRE" ]; then
		echo "save $MOUNTLUSTRE to $MOUNTLUSTRE.sav"
Nathan Rutman's avatar
Nathan Rutman committed
		mv $MOUNTLUSTRE $MOUNTLUSTRE.sav && trap cleanup_15 EXIT INT
		if [ -f $MOUNTLUSTRE ]; then
Elena Gryaznova's avatar
Elena Gryaznova committed
			skip "$MOUNTLUSTRE cannot be moved, skipping test"
Nathan Rutman's avatar
Nathan Rutman committed
			return 0
		fi
Nathan Rutman's avatar
Nathan Rutman committed
	mount_client $MOUNT && error "mount succeeded" && return 1
	echo "mount lustre on $MOUNT without $MOUNTLUSTRE failed as expected"
	cleanup_15
Nathan Rutman's avatar
Nathan Rutman committed
	cleanup || return $?
}
run_test 15 "zconf-mount without /sbin/mount.lustre (should return error)"

Yong Fan's avatar
Yong Fan committed
# LOGS/PENDING do not exist anymore since CMD3
Walter Poxon's avatar
Walter Poxon committed
        TMPMTPT="${TMP}/conf16"
Nathan Rutman's avatar
Nathan Rutman committed

Elena Gryaznova's avatar
Elena Gryaznova committed
        if [ ! -e "$MDSDEV" ]; then
            log "no $MDSDEV existing, so mount Lustre to create one"
Nathan Rutman's avatar
Nathan Rutman committed
	    setup
            check_mount || return 41
            cleanup || return $?
Nathan Rutman's avatar
Nathan Rutman committed

Elena Gryaznova's avatar
Elena Gryaznova committed
        [ -f "$MDSDEV" ] && LOOPOPT="-o loop"

Yong Fan's avatar
Yong Fan committed
        log "change the mode of $MDSDEV/OBJECTS to 555"
Nathan Rutman's avatar
Nathan Rutman committed
        do_facet mds "mkdir -p $TMPMTPT &&
Elena Gryaznova's avatar
Elena Gryaznova committed
                      mount $LOOPOPT -t $FSTYPE $MDSDEV $TMPMTPT &&
Yong Fan's avatar
Yong Fan committed
                      chmod 555 $TMPMTPT/OBJECTS &&
Nathan Rutman's avatar
Nathan Rutman committed
                      umount $TMPMTPT" || return $?

Yong Fan's avatar
Yong Fan committed
        log "mount Lustre to change the mode of OBJECTS, then umount Lustre"
Nathan Rutman's avatar
Nathan Rutman committed
	setup
        check_mount || return 41
        cleanup || return $?
Nathan Rutman's avatar
Nathan Rutman committed

Yong Fan's avatar
Yong Fan committed
        log "read the mode of OBJECTS and check if they has been changed properly"
Nathan Rutman's avatar
Nathan Rutman committed
        EXPECTEDOBJECTSMODE=`do_facet mds "debugfs -R 'stat OBJECTS' $MDSDEV 2> /dev/null" | grep 'Mode: ' | sed -e "s/.*Mode: *//" -e "s/ *Flags:.*//"`

        if [ "$EXPECTEDOBJECTSMODE" = "0777" ]; then
Elena Gryaznova's avatar
Elena Gryaznova committed
                log "Success:Lustre change the mode of OBJECTS correctly"
Elena Gryaznova's avatar
Elena Gryaznova committed
                error "Lustre does not change mode of OBJECTS properly"
Yong Fan's avatar
Yong Fan committed
run_test 16 "verify that lustre will correct the mode of OBJECTS"
Robert Read's avatar
Robert Read committed
test_17() {
Elena Gryaznova's avatar
Elena Gryaznova committed
        if [ ! -e "$MDSDEV" ]; then
Robert Read's avatar
Robert Read committed
            echo "no $MDSDEV existing, so mount Lustre to create one"
Nathan Rutman's avatar
Nathan Rutman committed
	    setup
Robert Read's avatar
Robert Read committed
            check_mount || return 41
            cleanup || return $?
        fi

        echo "Remove mds config log"
Nathan Rutman's avatar
Nathan Rutman committed
        do_facet mds "debugfs -w -R 'unlink CONFIGS/$FSNAME-MDT0000' $MDSDEV || return \$?" || return $?
Robert Read's avatar
Robert Read committed

        start_ost
Nathan Rutman's avatar
Nathan Rutman committed
	start_mds && return 42
	gen_config
Robert Read's avatar
Robert Read committed
}
Nathan Rutman's avatar
Nathan Rutman committed
run_test 17 "Verify failed mds_postsetup won't fail assertion (2936) (should return errs)"
Robert Read's avatar
Robert Read committed

test_18() {
Elena Gryaznova's avatar
Elena Gryaznova committed
        [ "$FSTYPE" != "ldiskfs" ] && skip "not needed for FSTYPE=$FSTYPE" && return

        local MIN=2000000

        local OK=
        # check if current MDSSIZE is large enough
        [ $MDSSIZE -ge $MIN ] && OK=1 && myMDSSIZE=$MDSSIZE && \
                log "use MDSSIZE=$MDSSIZE"

        # check if the global config has a large enough MDSSIZE
        [ -z "$OK" -a ! -z "$STORED_MDSSIZE" ] && [ $STORED_MDSSIZE -ge $MIN ] && \
                OK=1 && myMDSSIZE=$STORED_MDSSIZE && \
                log "use STORED_MDSSIZE=$STORED_MDSSIZE"

        # check if the block device is large enough
        [ -z "$OK" -a -b $MDSDEV ] && \
                [ "$(dd if=$MDSDEV of=/dev/null bs=1k count=1 skip=$MIN 2>&1 |
                     awk '($3 == "in") { print $1 }')" = "1+0" ] && OK=1 && \
                myMDSSIZE=$MIN && log "use device $MDSDEV with MIN=$MIN"

        # check if a loopback device has enough space for fs metadata (5%)
        [ -z "$OK" ] && [ -f $MDSDEV -o ! -e $MDSDEV ] &&
                SPACE=$(df -P $(dirname $MDSDEV) |
                        awk '($1 != "Filesystem") {print $4}') &&
                [ $SPACE -gt $((MIN / 20)) ] && OK=1 && myMDSSIZE=$MIN && \
                        log "use file $MDSDEV with MIN=$MIN"

        [ -z "$OK" ] && skip "$MDSDEV too small for ${MIN}kB MDS" && return


        echo "mount mds with large journal..."
Elena Gryaznova's avatar
Elena Gryaznova committed
        local OLD_MDS_MKFS_OPTS=$MDS_MKFS_OPTS
Elena Gryaznova's avatar
Elena Gryaznova committed

        MDS_MKFS_OPTS="--mgs --mdt --fsname=$FSNAME --device-size=$myMDSSIZE --param sys.timeout=$TIMEOUT $MDSOPT"
Nathan Rutman's avatar
Nathan Rutman committed

Elena Gryaznova's avatar
Elena Gryaznova committed
        gen_config
        echo "mount lustre system..."
Nathan Rutman's avatar
Nathan Rutman committed
	setup
        check_mount || return 41
Nathan Rutman's avatar
Nathan Rutman committed

        echo "check journal size..."
Elena Gryaznova's avatar
Elena Gryaznova committed
        local FOUNDSIZE=`do_facet mds "debugfs -c -R 'stat <8>' $MDSDEV" | awk '/Size: / { print $NF; exit;}'`
Elena Gryaznova's avatar
Elena Gryaznova committed
        if [ $FOUNDSIZE -gt $((32 * 1024 * 1024)) ]; then
Elena Gryaznova's avatar
Elena Gryaznova committed
                log "Success: mkfs creates large journals. Size: $((FOUNDSIZE >> 20))M"
Elena Gryaznova's avatar
Elena Gryaznova committed
                error "expected journal size > 32M, found $((FOUNDSIZE >> 20))M"
Nathan Rutman's avatar
Nathan Rutman committed

        cleanup || return $?
Nathan Rutman's avatar
Nathan Rutman committed

Elena Gryaznova's avatar
Elena Gryaznova committed
        MDS_MKFS_OPTS=$OLD_MDS_MKFS_OPTS
        gen_config
}
Elena Gryaznova's avatar
Elena Gryaznova committed
run_test 18 "check mkfs creates large journals"
Robert Read's avatar
Robert Read committed

Nathan Rutman's avatar
Nathan Rutman committed
test_19a() {
	start_mds || return 1
	stop_mds -f || return 2
}
run_test 19a "start/stop MDS without OSTs"

test_19b() {
	start_ost || return 1
	stop_ost -f || return 2
}
run_test 19b "start/stop OSTs without MDS"

test_20() {
	# first format the ost/mdt
	start_ost
	start_mds
	mount_client $MOUNT
	check_mount || return 43
	rm -f $DIR/$tfile
	remount_client ro $MOUNT || return 44
	touch $DIR/$tfile && echo "$DIR/$tfile created incorrectly" && return 45
	[ -e $DIR/$tfile ] && echo "$DIR/$tfile exists incorrectly" && return 46
	remount_client rw $MOUNT || return 47
	touch $DIR/$tfile
	[ ! -f $DIR/$tfile ] && echo "$DIR/$tfile missing" && return 48
	MCNT=`grep -c $MOUNT /etc/mtab`
	[ "$MCNT" -ne 1 ] && echo "$MOUNT in /etc/mtab $MCNT times" && return 49
	umount_client $MOUNT
	stop_mds
	stop_ost
}
run_test 20 "remount ro,rw mounts work and doesn't break /etc/mtab"

test_21a() {
        start_mds
	start_ost
	stop_ost
	stop_mds
}
run_test 21a "start mds before ost, stop ost first"

test_21b() {
        start_ost
	start_mds
	stop_mds
	stop_ost
}
run_test 21b "start ost before mds, stop mds first"

test_21c() {
        start_ost
	start_mds
	start_ost2
	stop_ost
	stop_ost2
	stop_mds
}
run_test 21c "start mds between two osts, stop mds last"

test_22() {
Nathan Rutman's avatar
Nathan Rutman committed
	#reformat to remove all logs
	reformat
Nathan Rutman's avatar
Nathan Rutman committed
	start_mds
	echo Client mount before any osts are in the logs
	mount_client $MOUNT
	check_mount && return 41
	pass

	echo Client mount with ost in logs, but none running
	start_ost
	stop_ost
	mount_client $MOUNT
	# check_mount will block trying to contact ost
	umount_client $MOUNT
	pass

	echo Client mount with a running ost
	start_ost
Eric Mei's avatar
Eric Mei committed
	if $GSS; then
		# if gss enabled, wait full time to let connection from
		# mds to ost be established, due to the mismatch between
		# initial connect timeout and gss context negotiation timeout.
		# This perhaps could be remove after AT landed.
		echo "sleep $((TIMEOUT + TIMEOUT + TIMEOUT))s"
		sleep $((TIMEOUT + TIMEOUT + TIMEOUT))
	fi
Nathan Rutman's avatar
Nathan Rutman committed
	mount_client $MOUNT
	check_mount || return 41
	pass

	cleanup
}
run_test 22 "start a client before osts (should return errs)"

Elena Gryaznova's avatar
Elena Gryaznova committed
test_23a() {	# was test_23
Nathan Rutman's avatar
Nathan Rutman committed
        setup
        # fail mds
	stop mds   
	# force down client so that recovering mds waits for reconnect
Elena Gryaznova's avatar
Elena Gryaznova committed
	local running=$(grep -c $MOUNT /proc/mounts) || true
    	if [ $running -ne 0 ]; then
        	echo "Stopping client $MOUNT (opts: -f)"
        	umount -f $MOUNT
    	fi

Nathan Rutman's avatar
Nathan Rutman committed
	# enter recovery on mds
	start_mds
	# try to start a new client
	mount_client $MOUNT &
	sleep 5
Elena Gryaznova's avatar
Elena Gryaznova committed
	MOUNT_PID=$(ps -ef | grep "t lustre" | grep -v grep | awk '{print $2}')
Nathan Rutman's avatar
Nathan Rutman committed
	MOUNT_LUSTRE_PID=`ps -ef | grep mount.lustre | grep -v grep | awk '{print $2}'`
	echo mount pid is ${MOUNT_PID}, mount.lustre pid is ${MOUNT_LUSTRE_PID}
	ps --ppid $MOUNT_PID
	ps --ppid $MOUNT_LUSTRE_PID
	# FIXME why o why can't I kill these? Manual "ctrl-c" works...
Elena Gryaznova's avatar
Elena Gryaznova committed
	kill -TERM $MOUNT_LUSTRE_PID
Nathan Rutman's avatar
Nathan Rutman committed
	echo "waiting for mount to finish"
	ps -ef | grep mount
Elena Gryaznova's avatar
Elena Gryaznova committed
	# we can not wait $MOUNT_PID because it is not a child of this shell
	local PID1
	local PID2
	local WAIT=0
	local MAX_WAIT=20
	local sleep=1
	while [ "$WAIT" -lt "$MAX_WAIT" ]; do
		sleep $sleep
		PID1=$(ps -ef | awk '{print $2}' | grep -w $MOUNT_PID)
		PID2=$(ps -ef | awk '{print $2}' | grep -w $MOUNT_LUSTRE_PID)
		echo PID1=$PID1
		echo PID2=$PID2
		[ -z "$PID1" -a -z "$PID2" ] && break
		echo "waiting for mount to finish ... "
		WAIT=$(( WAIT + sleep))
	done
	[ "$WAIT" -eq "$MAX_WAIT" ] && error "MOUNT_PID $MOUNT_PID and \
		MOUNT__LUSTRE_PID $MOUNT__LUSTRE_PID still not killed in $WAIT secs"
	ps -ef | grep mount
	stop_mds || error
	stop_ost || error
Nathan Rutman's avatar
Nathan Rutman committed
}
Elena Gryaznova's avatar
Elena Gryaznova committed
run_test 23a "interrupt client during recovery mount delay"

Elena Gryaznova's avatar
Elena Gryaznova committed
umount_client $MOUNT
cleanup_nocli

test_23b() {    # was test_23
	start_ost
	start_mds
	# Simulate -EINTR during mount OBD_FAIL_LDLM_CLOSE_THREAD
komaln's avatar
komaln committed
	lctl set_param fail_loc=0x80000313
Elena Gryaznova's avatar
Elena Gryaznova committed
	mount_client $MOUNT
	cleanup
}
run_test 23b "Simulate -EINTR during mount"

Elena Gryaznova's avatar
Elena Gryaznova committed
fs2mds_HOST=$mds_HOST
fs2ost_HOST=$ost_HOST

cleanup_24a() {
	trap 0
	echo "umount $MOUNT2 ..."
	umount $MOUNT2 || true
	echo "stopping fs2mds ..."
	stop fs2mds -f || true
	echo "stopping fs2ost ..."
	stop fs2ost -f || true
}
Nathan Rutman's avatar
Nathan Rutman committed

test_24a() {
Nathan Rutman's avatar
Nathan Rutman committed
	#set up fs1 
	gen_config
	#set up fs2
Elena Gryaznova's avatar
Elena Gryaznova committed
	[ -n "$ost1_HOST" ] && fs2ost_HOST=$ost1_HOST
	if [ -z "$fs2ost_DEV" -o -z "$fs2mds_DEV" ]; then
		do_facet $SINGLEMDS [ -b "$MDSDEV" ] && \
		skip "mixed loopback and real device not working" && return
	fi
Elena Gryaznova's avatar
Elena Gryaznova committed

	local fs2mdsdev=${fs2mds_DEV:-${MDSDEV}_2}
	local fs2ostdev=${fs2ost_DEV:-$(ostdevname 1)_2}

Nathan Rutman's avatar
Nathan Rutman committed
	# test 8-char fsname as well
	local FSNAME2=test1234
Elena Gryaznova's avatar
Elena Gryaznova committed
	add fs2mds $MDS_MKFS_OPTS --fsname=${FSNAME2} --nomgs --mgsnode=$MGSNID --reformat $fs2mdsdev || exit 10
Nathan Rutman's avatar
Nathan Rutman committed

Nathan Rutman's avatar
Nathan Rutman committed
	add fs2ost $OST_MKFS_OPTS --fsname=${FSNAME2} --reformat $fs2ostdev || exit 10
Nathan Rutman's avatar
Nathan Rutman committed

	setup
Elena Gryaznova's avatar
Elena Gryaznova committed
	start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && trap cleanup_24a EXIT INT
Nathan Rutman's avatar
Nathan Rutman committed
	start fs2ost $fs2ostdev $OST_MOUNT_OPTS
	mkdir -p $MOUNT2
Nathan Rutman's avatar
Nathan Rutman committed
	mount -t lustre $MGSNID:/${FSNAME2} $MOUNT2 || return 1
Nathan Rutman's avatar
Nathan Rutman committed
	# 1 still works
	check_mount || return 2
	# files written on 1 should not show up on 2
	cp /etc/passwd $DIR/$tfile
	sleep 10
	[ -e $MOUNT2/$tfile ] && error "File bleed" && return 7
	# 2 should work
	sleep 5
Nathan Rutman's avatar
Nathan Rutman committed
	cp /etc/passwd $MOUNT2/b || return 3
	rm $MOUNT2/b || return 4
	# 2 is actually mounted
        grep $MOUNT2' ' /proc/mounts > /dev/null || return 5
	# failover 
	facet_failover fs2mds
	facet_failover fs2ost
	df
 	umount_client $MOUNT 
	# the MDS must remain up until last MDT
	stop_mds
komaln's avatar
komaln committed
	MDS=$(do_facet $SINGLEMDS "lctl get_param -n devices" | awk '($3 ~ "mdt" && $4 ~ "MDT") { print $4 }')
	[ -z "$MDS" ] && error "No MDT" && return 8
Elena Gryaznova's avatar
Elena Gryaznova committed
	cleanup_24a
Nathan Rutman's avatar
Nathan Rutman committed
	cleanup_nocli || return 6
}
run_test 24a "Multiple MDTs on a single node"

test_24b() {
Elena Gryaznova's avatar
Elena Gryaznova committed
	if [ -z "$fs2mds_DEV" ]; then
		do_facet $SINGLEMDS [ -b "$MDSDEV" ] && \
		skip "mixed loopback and real device not working" && return
	fi
Elena Gryaznova's avatar
Elena Gryaznova committed

	local fs2mdsdev=${fs2mds_DEV:-${MDSDEV}_2}

Elena Gryaznova's avatar
Elena Gryaznova committed
	add fs2mds $MDS_MKFS_OPTS --fsname=${FSNAME}2 --mgs --reformat $fs2mdsdev || exit 10 
Nathan Rutman's avatar
Nathan Rutman committed
	setup
Elena Gryaznova's avatar
Elena Gryaznova committed
	start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && return 2
Nathan Rutman's avatar
Nathan Rutman committed
	cleanup || return 6
}
run_test 24b "Multiple MGSs on a single node (should return err)"

test_25() {
	setup
	check_mount || return 2
	local MODULES=$($LCTL modules | awk '{ print $2 }')
	rmmod $MODULES 2>/dev/null || true
	cleanup || return 6
}
run_test 25 "Verify modules are referenced"

test_26() {
    load_modules
    # we need modules before mount for sysctl, so make sure...
Elena Gryaznova's avatar
Elena Gryaznova committed
    do_facet mds "lsmod | grep -q lustre || modprobe lustre"
Nathan Rutman's avatar
Nathan Rutman committed
#define OBD_FAIL_MDS_FS_SETUP            0x135
komaln's avatar
komaln committed
    do_facet mds "lctl set_param fail_loc=0x80000135"
Nathan Rutman's avatar
Nathan Rutman committed
    start_mds && echo MDS started && return 1
komaln's avatar
komaln committed
    lctl get_param -n devices
    DEVS=$(lctl get_param -n devices | wc -l)