Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lustre / tests / conf-sanity.sh
index 2a5f580..757785f 100644 (file)
@@ -12,12 +12,17 @@ set -e
 ONLY=${ONLY:-"$*"}
 
 # These tests don't apply to mountconf
-MOUNTCONFSKIP="9 10 11 12 13 13b 14 15"
+MOUNTCONFSKIP="10 11 12 13 13b 14 15"
+# bug number for skipped test: 13739 
+HEAD_EXCEPT="                  32a 32b "
 
-# bug number for skipped test:
-ALWAYS_EXCEPT=" $CONF_SANITY_EXCEPT $MOUNTCONFSKIP 16 23"
+# bug number for skipped test:                                  10510 12743
+ALWAYS_EXCEPT=" $CONF_SANITY_EXCEPT $MOUNTCONFSKIP $HEAD_EXCEPT 23    36"
 # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
 
+#                                                   
+[ "$SLOW" = "no" ] && EXCEPT_SLOW="0 1 2 3 6 7 15 18 24b 25 30 31 32 33 34a "
+
 SRCDIR=`dirname $0`
 PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH
 
@@ -277,7 +282,10 @@ test_5c() {
        start_mds
        [ -d $MOUNT ] || mkdir -p $MOUNT
        grep " $MOUNT " /etc/mtab && echo "test 5c: mtab before mount" && return 10
-       mount -t lustre $MGSNID:/wrong.$FSNAME $MOUNT || :
+       local oldfs="${FSNAME}"
+       FSNAME="wrong.${FSNAME}"
+       mount_client $MOUNT || :
+       FSNAME=${oldfs}
        grep " $MOUNT " /etc/mtab && echo "test 5c: mtab after failed mount" && return 11
        umount_client $MOUNT
        cleanup_nocli  || return $?
@@ -299,8 +307,6 @@ run_test 5d "mount with ost down"
 test_5e() {
        start_ost
        start_mds
-        # give MDS a chance to connect to OSTs (bz 10476)
-       sleep 5 
 
 #define OBD_FAIL_PTLRPC_DELAY_SEND       0x506
        do_facet client "sysctl -w lustre.fail_loc=0x80000506"
@@ -615,6 +621,7 @@ test_15() {
 }
 run_test 15 "zconf-mount without /sbin/mount.lustre (should return error)"
 
+# LOGS/PENDING do not exist anymore since CMD3
 test_16() {
         TMPMTPT="${MOUNT%/*}/conf16"
 
@@ -627,41 +634,27 @@ test_16() {
 
         [ -f "$MDSDEV" ] && LOOPOPT="-o loop"
 
-        log "change the mode of $MDSDEV/OBJECTS,LOGS,PENDING to 555"
+        log "change the mode of $MDSDEV/OBJECTS to 555"
         do_facet mds "mkdir -p $TMPMTPT &&
                       mount $LOOPOPT -t $FSTYPE $MDSDEV $TMPMTPT &&
-                      chmod 555 $TMPMTPT/{OBJECTS,LOGS,PENDING} &&
+                      chmod 555 $TMPMTPT/OBJECTS &&
                       umount $TMPMTPT" || return $?
 
-        log "mount Lustre to change the mode of OBJECTS/LOGS/PENDING, then umount Lustre"
+        log "mount Lustre to change the mode of OBJECTS, then umount Lustre"
        setup
         check_mount || return 41
         cleanup || return $?
 
-        log "read the mode of OBJECTS/LOGS/PENDING and check if they has been changed properly"
+        log "read the mode of OBJECTS and check if they has been changed properly"
         EXPECTEDOBJECTSMODE=`do_facet mds "debugfs -R 'stat OBJECTS' $MDSDEV 2> /dev/null" | grep 'Mode: ' | sed -e "s/.*Mode: *//" -e "s/ *Flags:.*//"`
-        EXPECTEDLOGSMODE=`do_facet mds "debugfs -R 'stat LOGS' $MDSDEV 2> /dev/null" | grep 'Mode: ' | sed -e "s/.*Mode: *//" -e "s/ *Flags:.*//"`
-        EXPECTEDPENDINGMODE=`do_facet mds "debugfs -R 'stat PENDING' $MDSDEV 2> /dev/null" | grep 'Mode: ' | sed -e "s/.*Mode: *//" -e "s/ *Flags:.*//"`
 
         if [ "$EXPECTEDOBJECTSMODE" = "0777" ]; then
                 log "Success:Lustre change the mode of OBJECTS correctly"
         else
                 error "Lustre does not change mode of OBJECTS properly"
         fi
-
-        if [ "$EXPECTEDLOGSMODE" = "0777" ]; then
-                log "Success:Lustre change the mode of LOGS correctly"
-        else
-                error "Lustre does not change mode of LOGS properly"
-        fi
-
-        if [ "$EXPECTEDPENDINGMODE" = "0777" ]; then
-                log "Success:Lustre change the mode of PENDING correctly"
-        else
-                error "Lustre does not change mode of PENDING properly"
-        fi
 }
-run_test 16 "verify that lustre will correct the mode of OBJECTS/LOGS/PENDING"
+run_test 16 "verify that lustre will correct the mode of OBJECTS"
 
 test_17() {
         if [ ! -e "$MDSDEV" ]; then
@@ -768,8 +761,8 @@ test_21c() {
 run_test 21c "start mds between two osts, stop mds last"
 
 test_22() {
-        #reformat to remove all logs
-        reformat
+       #reformat to remove all logs
+       reformat
        start_mds
        echo Client mount before any osts are in the logs
        mount_client $MOUNT
@@ -787,7 +780,6 @@ test_22() {
        echo Client mount with a running ost
        start_ost
        mount_client $MOUNT
-       sleep 5 #bz10476
        check_mount || return 41
        pass
 
@@ -824,11 +816,16 @@ test_23() {
 #run_test 23 "interrupt client during recovery mount delay"
 
 test_24a() {
+       #set up fs1 
+       gen_config
+       #set up fs2
        local fs2mds_HOST=$mds_HOST
        local fs2ost_HOST=$ost_HOST
-
-       [ -z "$fs2ost_DEV" -o -z "$fs2mds_DEV" ] && [ -b "$MDSDEV" ] && \
-            log "mixed loopback and real device not working" && return
+       [ -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
 
        local fs2mdsdev=${fs2mds_DEV:-${MDSDEV}_2}
        local fs2ostdev=${fs2ost_DEV:-$(ostdevname 1)_2}
@@ -863,7 +860,7 @@ test_24a() {
        umount_client $MOUNT 
        # the MDS must remain up until last MDT
        stop_mds
-       MDS=$(do_facet mds "cat $LPROC/devices" | awk '($3 ~ "mdt" && $4 ~ "MDT") { print $4 }')
+       MDS=$(do_facet $SINGLEMDS "cat $LPROC/devices" | awk '($3 ~ "mdt" && $4 ~ "MDT") { print $4 }')
        [ -z "$MDS" ] && error "No MDT" && return 8
        umount $MOUNT2
        stop fs2mds -f
@@ -874,12 +871,14 @@ run_test 24a "Multiple MDTs on a single node"
 
 test_24b() {
        local fs2mds_HOST=$mds_HOST
-        [ -z "$fs2mds_DEV" ] && [ -b "$MDSDEV" ] && \
-            log "mixed loopback and real device not working" && return
+       if [ -z "$fs2mds_DEV" ]; then
+               do_facet $SINGLEMDS [ -b "$MDSDEV" ] && \
+               skip "mixed loopback and real device not working" && return
+       fi
 
        local fs2mdsdev=${fs2mds_DEV:-${MDSDEV}_2}
 
-        add fs2mds $MDS_MKFS_OPTS --fsname=${FSNAME}2 --mgs --reformat $fs2mdsdev || exit 10 
+       add fs2mds $MDS_MKFS_OPTS --fsname=${FSNAME}2 --mgs --reformat $fs2mdsdev || exit 10 
        setup
        start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && return 2
        cleanup || return 6
@@ -1046,14 +1045,15 @@ test_29() {
        cleanup_nocli
        #writeconf to remove all ost2 traces for subsequent tests
        writeconf
+       start_mds
+       start_ost
+       cleanup
 }
 run_test 29 "permanently remove an OST"
 
 test_30() {
-       # start mds first after writeconf
-       start_mds
-       start_ost
-       mount_client $MOUNT
+       setup
+
        TEST="cat $LPROC/llite/$FSNAME-*/max_read_ahead_whole_mb"
        ORIG=$($TEST) 
        for i in $(seq 1 20); do 
@@ -1081,9 +1081,14 @@ test_32a() {
         #       there appears to be a lot of assumption here about loopback
         #       devices
         # or maybe this test is just totally useless on a client-only system
+       [ "$mds_HOST" = "`hostname`" ] || { skip "remote MDS" && return 0; }
+       [ "$ost_HOST" = "`hostname`" -o "$ost1_HOST" = "`hostname`" ] || \
+               { skip "remote OST" && return 0; }
+
         [ -z "$TUNEFS" ] && skip "No tunefs" && return
        local DISK1_4=$LUSTRE/tests/disk1_4.zip
         [ ! -r $DISK1_4 ] && skip "Cant find $DISK1_4, skipping" && return
+       mkdir -p $TMP/$tdir
        unzip -o -j -d $TMP/$tdir $DISK1_4 || { skip "Cant unzip $DISK1_4, skipping" && return ; }
        load_modules
        sysctl lnet.debug=$PTLDEBUG
@@ -1138,9 +1143,14 @@ test_32b() {
         #       there appears to be a lot of assumption here about loopback
         #       devices
         # or maybe this test is just totally useless on a client-only system
+        [ "$mds_HOST" = "`hostname`" ] || { skip "remote MDS" && return 0; }
+        [ "$ost_HOST" = "`hostname`" -o "$ost1_HOST" = "`hostname`" ] || \
+               { skip "remote OST" && return 0; }
+
         [ -z "$TUNEFS" ] && skip "No tunefs" && return
        local DISK1_4=$LUSTRE/tests/disk1_4.zip
         [ ! -r $DISK1_4 ] && skip "Cant find $DISK1_4, skipping" && return
+       mkdir -p $TMP/$tdir
        unzip -o -j -d $TMP/$tdir $DISK1_4 || { skip "Cant unzip $DISK1_4, skipping" && return ; }
        load_modules
        sysctl lnet.debug=$PTLDEBUG
@@ -1183,14 +1193,17 @@ test_33() { # bug 12333
         local FSNAME2=test1234
         local fs2mds_HOST=$mds_HOST
         local fs2ost_HOST=$ost_HOST
+        [ -n "$ost1_HOST" ] && fs2ost_HOST=$ost1_HOST
 
-        [ -z "$fs2ost_DEV" -o -z "$fs2mds_DEV" ] && [ -b "$MDSDEV" ] && \
-            log "mixed loopback and real device not working" && return
+        if [ -z "$fs2ost_DEV" -o -z "$fs2mds_DEV" ]; then
+                do_facet $SINGLEMDS [ -b "$MDSDEV" ] && \
+                skip "mixed loopback and real device not working" && return
+        fi
 
         local fs2mdsdev=${fs2mds_DEV:-${MDSDEV}_2}
         local fs2ostdev=${fs2ost_DEV:-$(ostdevname 1)_2}
         add fs2mds $MDS_MKFS_OPTS --fsname=${FSNAME2} --reformat $fs2mdsdev || exit 10
-        add fs2ost $OST_MKFS_OPTS --fsname=${FSNAME2} --index=8191 --mgsnode=`hostname`@tcp --reformat $fs2ostdev || exit 10
+        add fs2ost $OST_MKFS_OPTS --fsname=${FSNAME2} --index=8191 --mgsnode=$MGSNID --reformat $fs2ostdev || exit 10
 
         start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS
         start fs2ost $fs2ostdev $OST_MOUNT_OPTS
@@ -1206,6 +1219,67 @@ test_33() { # bug 12333
 }
 run_test 33 "Mount ost with a large index number"
 
+test_34() {
+        setup
+
+        do_facet client dd if=/dev/zero of=$MOUNT/24 bs=1024k count=1
+        # Drop lock cancelation reply during umount
+       #define OBD_FAIL_LDLM_CANCEL             0x304
+        do_facet client sysctl -w lustre.fail_loc=0x80000304
+        #sysctl -w lnet.debug=-1
+        umount_client $MOUNT
+        cleanup
+}
+run_test 34 "Drop cancel during umount"
+
+test_34a() {
+        setup
+       do_facet client multiop $DIR/file O_c &
+       sleep 0.500s
+       manual_umount_client
+       rc=$?
+       do_facet client killall -USR1 multiop
+       if [ $rc -eq 0 ]; then
+               error "umount not fail!"
+       fi
+       sleep 1
+        cleanup
+}
+run_test 34a "umount with opened file should be fail"
+
+
+test_34b() {
+       setup
+       touch $DIR/$tfile || return 1
+       stop_mds --force || return 2
+
+       manual_umount_client --force
+       rc=$?
+       if [ $rc -ne 0 ]; then
+               error "mtab after failed umount - rc $rc"
+       fi
+
+       cleanup
+       return 0        
+}
+run_test 34b "force umount with failed mds should be normal"
+
+test_34c() {
+       setup
+       touch $DIR/$tfile || return 1
+       stop_ost --force || return 2
+
+       manual_umount_client --force
+       rc=$?
+       if [ $rc -ne 0 ]; then
+               error "mtab after failed umount - rc $rc"
+       fi
+
+       cleanup
+       return 0        
+}
+run_test 34c "force umount with failed ost should be normal"
+
 test_35() { # bug 12459
        setup
 
@@ -1219,7 +1293,7 @@ test_35() { # bug 12459
        log "Wait for RECONNECT_INTERVAL seconds (10s)"
        sleep 10
 
-       MSG="conf-sanity.sh test_33 `date +%F%kh%Mm%Ss`"
+       MSG="conf-sanity.sh test_35 `date +%F%kh%Mm%Ss`"
        $LCTL clear
        log "$MSG"
        log "Stopping the MDT:"
@@ -1258,19 +1332,25 @@ test_36() { # 12743
         local fs2mds_HOST=$mds_HOST
         local fs2ost_HOST=$ost_HOST
         local fs3ost_HOST=$ost_HOST
-        rc=0
 
-        [ -z "$fs2ost_DEV" -o -z "$fs2mds_DEV" ] && [ -b "$MDSDEV" ] && \
-            log "mixed loopback and real device not working" && return
+        [ -n "$ost1_HOST" ] && fs2ost_HOST=$ost1_HOST && fs3ost_HOST=$ost1_HOST
+        rc=0
 
+        if [ -z "$fs2ost_DEV" -o -z "$fs2mds_DEV" -o -z "$fs3ost_DEV" ]; then
+               do_facet $SINGLEMDS [ -b "$MDSDEV" ] && \
+               skip "mixed loopback and real device not working" && return
+        fi
         [ $OSTCOUNT -lt 2 ] && skip "skipping test for single OST" && return
 
+        [ $(grep -c obdfilter $LPROC/devices) -eq 0 ] &&
+                skip "skipping test for remote OST" && return
+
         local fs2mdsdev=${fs2mds_DEV:-${MDSDEV}_2}
         local fs2ostdev=${fs2ost_DEV:-$(ostdevname 1)_2}
         local fs3ostdev=${fs3ost_DEV:-$(ostdevname 2)_2}
         add fs2mds $MDS_MKFS_OPTS --fsname=${FSNAME2} --reformat $fs2mdsdev || exit 10
-        add fs2ost $OST_MKFS_OPTS --mkfsoptions='-b1024' --fsname=${FSNAME2} --mgsnode=`hostname`@tcp --reformat $fs2ostdev || exit 10
-        add fs3ost $OST_MKFS_OPTS --mkfsoptions='-b4096' --fsname=${FSNAME2} --mgsnode=`hostname`@tcp --reformat $fs3ostdev || exit 10
+        add fs2ost $OST_MKFS_OPTS --mkfsoptions='-b1024' --fsname=${FSNAME2} --mgsnode=$MGSNID --reformat $fs2ostdev || exit 10
+        add fs3ost $OST_MKFS_OPTS --mkfsoptions='-b4096' --fsname=${FSNAME2} --mgsnode=$MGSNID --reformat $fs3ostdev || exit 10
 
         start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS
         start fs2ost $fs2ostdev $OST_MOUNT_OPTS
@@ -1278,9 +1358,10 @@ test_36() { # 12743
         mkdir -p $MOUNT2
         mount -t lustre $MGSNID:/${FSNAME2} $MOUNT2 || return 1
 
+        sleep 5 # until 11778 fixed
+
         dd if=/dev/zero of=$MOUNT2/$tfile bs=1M count=7 || return 2
-        [ $(grep -c obdfilter $LPROC/devices) -eq 0 ] &&
-                skip "skipping test for remote OST" && return
+
         BKTOTAL=`awk 'BEGIN{total=0}; {total+=$1}; END{print total}' \
                 $LPROC/obdfilter/*/kbytestotal`
         BKFREE=`awk 'BEGIN{free=0}; {free+=$1}; END{print free}' \
@@ -1321,7 +1402,93 @@ test_36() { # 12743
 }
 run_test 36 "df report consistency on OSTs with different block size"
 
-umount_client $MOUNT   
+test_37() {
+       LOCAL_MDSDEV="$TMP/mdt.img"
+       SYM_MDSDEV="$TMP/sym_mdt.img"
+
+       echo "MDS :     $LOCAL_MDSDEV"
+       echo "SYMLINK : $SYM_MDSDEV"
+       rm -f $LOCAL_MDSDEV
+
+       touch $LOCAL_MDSDEV
+       mkfs.lustre --reformat --fsname=lustre --mdt --mgs --device-size=9000 $LOCAL_MDSDEV ||
+               error "mkfs.lustre $LOCAL_MDSDEV failed"
+       ln -s $LOCAL_MDSDEV $SYM_MDSDEV
+
+       echo "mount symlink device - $SYM_MDSDEV"
+
+       mount_op=`mount -v -t lustre -o loop $SYM_MDSDEV ${MOUNT%/*}/mds 2>&1 | grep "unable to set tunable"`
+       umount -d ${MOUNT%/*}/mds
+       rm -f $LOCAL_MDSDEV $SYM_MDSDEV
+
+       if [ -n "$mount_op" ]; then
+               error "**** FAIL: set tunables failed for symlink device"
+       fi
+       return 0
+}
+run_test 37 "verify set tunables works for symlink device"
+
+test_38() { # bug 14222
+       setup
+       # like runtests
+       COUNT=10
+       SRC="/etc /bin"
+       FILES=`find $SRC -type f -mtime +1 | head -n $COUNT`
+       log "copying $(echo $FILES | wc -w) files to $DIR/$tdir"
+       mkdir -p $DIR/$tdir
+       tar cf - $FILES | tar xf - -C $DIR/$tdir || \
+               error "copying $SRC to $DIR/$tdir"
+       sync
+       umount_client $MOUNT
+       stop_mds
+       log "rename lov_objid file on MDS"
+       rm -f $TMP/lov_objid.orig
+       do_facet mds "debugfs -w $MDSDEV" <<-EOF
+               dump lov_objid $TMP/lov_objid.orig
+               rm lov_objid
+       EOF
+       do_facet mds "od -Ax -td8 $TMP/lov_objid.orig"
+       # check create in mds_lov_connect
+       start_mds
+       mount_client $MOUNT
+       for f in $FILES; do
+               [ $V ] && log "verifying $DIR/$tdir/$f"
+               diff $f $DIR/$tdir/$f || ERROR=y
+       done
+       do_facet mds "debugfs -c $MDSDEV" <<-EOF
+               dump lov_objid $TMP/lov_objid.new
+       EOF
+       do_facet mds "od -Ax -td8 $TMP/lov_objid.new"
+       [ "$ERROR" = "y" ] && error "old and new files are different after connect" || true
+       
+       
+       # check it's updates in sync
+       umount_client $MOUNT
+       stop_mds        
+       multiop $TMP/lov_objid.clear Ow4096c
+       do_facet mds "debugfs -w $MDSDEV" <<-EOF
+               write $TMP/lov_objid.clear lov_objid
+       EOF
+       start_mds
+       mount_client $MOUNT
+       for f in $FILES; do
+               [ $V ] && log "verifying $DIR/$tdir/$f"
+               diff $f $DIR/$tdir/$f || ERROR=y
+       done
+       do_facet mds "debugfs -c $MDSDEV" <<-EOF
+               dump lov_objid $TMP/lov_objid.new1
+       EOF
+       do_facet mds "od -Ax -td8 $TMP/lov_objid.new1"
+       umount_client $MOUNT
+       stop_mds
+       [ "$ERROR" = "y" ] && error "old and new files are different after sync" || true
+       
+       log "files compared the same"
+       #cleanup
+}
+run_test 38 "MDS recreates missing lov_objid file from OST data"
+
+umount_client $MOUNT
 cleanup_nocli
 cleanup_krb5_env