Whamcloud - gitweb
LU-3244 utils: tunefs.lustre should preserve virgin label
[fs/lustre-release.git] / lustre / tests / conf-sanity.sh
index 2e7ae14..52a4031 100644 (file)
@@ -49,6 +49,7 @@ PTLDEBUG=${PTLDEBUG:--1}
 SAVE_PWD=$PWD
 LUSTRE=${LUSTRE:-`dirname $0`/..}
 RLUSTRE=${RLUSTRE:-$LUSTRE}
+LUSTRE_TESTS_API_DIR=${LUSTRE_TESTS_API_DIR:-${LUSTRE}/tests/clientapi}
 export MULTIOP=${MULTIOP:-multiop}
 
 . $LUSTRE/tests/test-framework.sh
@@ -603,24 +604,25 @@ test_17() {
                return
        fi
 
-        setup
-        check_mount || return 41
-        cleanup || return $?
+       setup
+       check_mount || return 41
+       cleanup || return $?
 
-        echo "Remove mds config log"
-        if ! combined_mgs_mds ; then
-                stop mgs
-        fi
+       echo "Remove mds config log"
+       if ! combined_mgs_mds ; then
+               stop mgs
+       fi
 
-        do_facet mgs "$DEBUGFS -w -R 'unlink CONFIGS/$FSNAME-MDT0000' $MGSDEV || return \$?" || return $?
+       do_facet mgs "$DEBUGFS -w -R 'unlink CONFIGS/$FSNAME-MDT0000' \
+               $(mgsdevname) || return \$?" || return $?
 
-        if ! combined_mgs_mds ; then
-                start_mgs
-        fi
+       if ! combined_mgs_mds ; then
+               start_mgs
+       fi
 
-        start_ost
-        start_mds && return 42
-        reformat_and_config
+       start_ost
+       start_mds && return 42
+       reformat_and_config
 }
 run_test 17 "Verify failed mds_postsetup won't fail assertion (2936) (should return errs)"
 
@@ -787,16 +789,12 @@ test_21d() {
 run_test 21d "start mgs then ost and then mds"
 
 test_22() {
-       local num
-
        start_mds
 
        echo Client mount with ost in logs, but none running
        start_ost
        # wait until mds connected to ost and open client connection
-       for num in $(seq 1 $MDSCOUNT); do
-               wait_osc_import_state mds${num} ost FULL
-       done
+       wait_osc_import_state mds ost FULL
        stop_ost
        mount_client $MOUNT
        # check_mount will block trying to contact ost
@@ -816,9 +814,7 @@ test_22() {
                sleep $((TIMEOUT + TIMEOUT + TIMEOUT))
        fi
        mount_client $MOUNT
-       for num in $(seq 1 $MDSCOUNT); do
-               wait_osc_import_state mds${num} ost FULL
-       done
+       wait_osc_import_state mds ost FULL
        wait_osc_import_state client ost FULL
        check_mount || return 41
        pass
@@ -1210,6 +1206,11 @@ test_31() { # bug 10734
 }
 run_test 31 "Connect to non-existent node (shouldn't crash)"
 
+
+T32_QID=60000
+T32_BLIMIT=20480 # Kbytes
+T32_ILIMIT=2
+
 #
 # This is not really a test but a tool to create new disk
 # image tarballs for the upgrade tests.
@@ -1240,10 +1241,19 @@ test_32newtarball() {
 
        mkdir $tmp/src
        tar cf - -C $src . | tar xf - -C $tmp/src
+       dd if=/dev/zero of=$tmp/src/t32_qf_old bs=1M \
+               count=$(($T32_BLIMIT / 1024 / 2))
+       chown $T32_QID.$T32_QID $tmp/src/t32_qf_old
 
        formatall
 
        setupall
+
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.50) ] &&
+               $LFS quotacheck -ug /mnt/$FSNAME
+       $LFS setquota -u $T32_QID -b 0 -B $T32_BLIMIT -i 0 -I $T32_ILIMIT \
+               /mnt/$FSNAME
+
        tar cf - -C $tmp/src . | tar xf - -C /mnt/$FSNAME
        stopall
 
@@ -1257,6 +1267,19 @@ test_32newtarball() {
        popd
        $LCTL get_param -n version | head -n 1 |
                sed -e 's/^lustre: *//' >$tmp/img/commit
+
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.50) ] &&
+               $LFS quotaon -ug /mnt/$FSNAME
+       $LFS quota -u $T32_QID -v /mnt/$FSNAME
+       $LFS quota -v -u $T32_QID /mnt/$FSNAME |
+               awk 'BEGIN { num='1' } { if ($1 == "'/mnt/$FSNAME'") \
+               { if (NF == 1) { getline } else { num++ } ; print $num;} }' \
+               | tr -d "*" > $tmp/img/bspace
+       $LFS quota -v -u $T32_QID /mnt/$FSNAME |
+               awk 'BEGIN { num='5' } { if ($1 == "'/mnt/$FSNAME'") \
+               { if (NF == 1) { getline } else { num++ } ; print $num;} }' \
+               | tr -d "*" > $tmp/img/ispace
+
        stopall
 
        pushd $tmp/src
@@ -1318,8 +1341,6 @@ t32_check() {
 }
 
 t32_test_cleanup() {
-       local node=$(facet_active_host $SINGLEMDS)
-       local r="do_node $node"
        local tmp=$TMP/t32
        local rc=$?
 
@@ -1335,8 +1356,9 @@ t32_test_cleanup() {
        if $shall_cleanup_ost; then
                $r umount -d $tmp/mnt/ost || rc=$?
        fi
-       $r rm -rf $tmp || rc=$?
-       rm -rf $tmp || rc=$?
+
+       $r rm -rf $tmp
+       rm -rf $tmp
        return $rc
 }
 
@@ -1363,7 +1385,7 @@ t32_reload_modules() {
                        all_removed=true
                do_rpc_nodes $node check_mem_leak || return 1
                if $all_removed; then
-                       load_modules
+                       do_rpc_nodes $node load_modules
                        return 0
                fi
                sleep 5
@@ -1381,8 +1403,7 @@ t32_wait_til_devices_gone() {
        echo wait for devices to go
        while ((i < 20)); do
                devices=$(do_rpc_nodes $node $LCTL device_list | wc -l)
-               echo $device
-               ((devices == 0)) && return 1
+               ((devices == 0)) && return 0
                sleep 5
                i=$((i + 1))
        done
@@ -1390,6 +1411,86 @@ t32_wait_til_devices_gone() {
        return 1
 }
 
+t32_verify_quota() {
+       local node=$1
+       local fsname=$2
+       local mnt=$3
+       local fstype=$(facet_fstype $SINGLEMDS)
+       local qval
+       local cmd
+
+       $LFS quota -u $T32_QID -v $mnt
+
+       qval=$($LFS quota -v -u $T32_QID $mnt |
+               awk 'BEGIN { num='1' } { if ($1 == "'$mnt'") \
+               { if (NF == 1) { getline } else { num++ } ; print $num;} }' \
+               | tr -d "*")
+       [ $qval -eq $img_bspace ] || {
+               echo "bspace, act:$qval, exp:$img_bspace"
+               return 1
+       }
+
+       qval=$($LFS quota -v -u $T32_QID $mnt |
+               awk 'BEGIN { num='5' } { if ($1 == "'$mnt'") \
+               { if (NF == 1) { getline } else { num++ } ; print $num;} }' \
+               | tr -d "*")
+       [ $qval -eq $img_ispace ] || {
+               echo "ispace, act:$qval, exp:$img_ispace"
+               return 1
+       }
+
+       qval=$($LFS quota -v -u $T32_QID $mnt |
+               awk 'BEGIN { num='3' } { if ($1 == "'$mnt'") \
+               { if (NF == 1) { getline } else { num++ } ; print $num;} }' \
+               | tr -d "*")
+       [ $qval -eq $T32_BLIMIT ] || {
+               echo "blimit, act:$qval, exp:$T32_BLIMIT"
+               return 1
+       }
+
+       qval=$($LFS quota -v -u $T32_QID $mnt |
+               awk 'BEGIN { num='7' } { if ($1 == "'$mnt'") \
+               { if (NF == 1) { getline } else { num++ } ; print $num;} }' \
+               | tr -d "*")
+       [ $qval -eq $T32_ILIMIT ] || {
+               echo "ilimit, act:$qval, exp:$T32_ILIMIT"
+               return 1
+       }
+
+       do_node $node $LCTL conf_param $fsname.quota.mdt=ug
+       cmd="$LCTL get_param -n osd-$fstype.$fsname-MDT0000"
+       cmd=$cmd.quota_slave.enabled
+       wait_update $node "$cmd" "ug" || {
+               echo "Enable mdt quota failed"
+               return 1
+       }
+
+       do_node $node $LCTL conf_param $fsname.quota.ost=ug
+       cmd="$LCTL get_param -n osd-$fstype.$fsname-OST0000"
+       cmd=$cmd.quota_slave.enabled
+       wait_update $node "$cmd" "ug" || {
+               echo "Enable ost quota failed"
+               return 1
+       }
+
+       chmod 0777 $mnt
+       runas -u $T32_QID -g $T32_QID dd if=/dev/zero of=$mnt/t32_qf_new \
+               bs=1M count=$(($T32_BLIMIT / 1024)) oflag=sync && {
+               echo "Write succeed, but expect -EDQUOT"
+               return 1
+       }
+       rm -f $mnt/t32_qf_new
+
+       runas -u $T32_QID -g $T32_QID createmany -m $mnt/t32_qf_ \
+               $T32_ILIMIT && {
+               echo "Create succeed, but expect -EDQUOT"
+               return 1
+       }
+       unlinkmany $mnt/t32_qf_ $T32_ILIMIT
+
+       return 0
+}
+
 t32_test() {
        local tarball=$1
        local writeconf=$2
@@ -1401,11 +1502,12 @@ t32_test() {
        local node=$(facet_active_host $SINGLEMDS)
        local r="do_node $node"
        local node2=$(facet_active_host mds2)
-       local r2="do_node $node2"
        local tmp=$TMP/t32
        local img_commit
        local img_kernel
        local img_arch
+       local img_bspace
+       local img_ispace
        local fsname=t32fs
        local nid=$($r $LCTL list_nids | head -1)
        local mopts
@@ -1413,6 +1515,7 @@ t32_test() {
        local nrpcs_orig
        local nrpcs
        local list
+       local fstype=$(facet_fstype $SINGLEMDS)
 
        trap 'trap - RETURN; t32_test_cleanup' RETURN
 
@@ -1425,6 +1528,8 @@ t32_test() {
        img_commit=$($r cat $tmp/commit)
        img_kernel=$($r cat $tmp/kernel)
        img_arch=$($r cat $tmp/arch)
+       img_bspace=$($r cat $tmp/bspace)
+       img_ispace=$($r cat $tmp/ispace)
        echo "Upgrading from $(basename $tarball), created with:"
        echo "  Commit: $img_commit"
        echo "  Kernel: $img_kernel"
@@ -1438,6 +1543,12 @@ t32_test() {
        }
        if [ "$writeconf" ]; then
                mopts=loop,writeconf
+               if [ $fstype == "ldiskfs" ]; then
+                       $r $TUNEFS --quota $tmp/mdt || {
+                               error_noexit "Enable mdt quota feature"
+                               return 1
+                       }
+               fi
        else
                mopts=loop,exclude=$fsname-OST0000
        fi
@@ -1451,21 +1562,28 @@ t32_test() {
        shall_cleanup_mdt=true
 
        if [ "$dne_upgrade" != "no" ]; then
-               echo "mkfs new MDT...."
-               add mds2 $(mkfs_opts mds2 $(mdsdevname 2) $fsname) --reformat \
-                       $(mdsdevname 2) $(mdsvdevname 2) > /dev/null || {
+               local fs2mdsdev=$(mdsdevname 1_2)
+               local fs2mdsvdev=$(mdsvdevname 1_2)
+
+               echo "mkfs new MDT on ${fs2mdsdev}...."
+               if [ $(facet_fstype mds1) == ldiskfs ]; then
+                       mkfsoptions="--mkfsoptions=\\\"-J size=8\\\""
+               fi
+
+               add fs2mds $(mkfs_opts mds2 $fs2mdsdev $fsname) --reformat \
+                          $mkfsoptions $fs2mdsdev $fs2mdsvdev > /dev/null || {
                        error_noexit "Mkfs new MDT failed"
                        return 1
                }
 
-               $r2 $TUNEFS --dryrun $(mdsdevname 2) || {
+               $r $TUNEFS --dryrun $fs2mdsdev || {
                        error_noexit "tunefs.lustre before mounting the MDT"
                        return 1
                }
 
-               echo "mount new MDT...."
-               $r2 mkdir -p $tmp/mnt/mdt1
-               $r2 mount -t lustre -o $mopts $(mdsdevname 2) $tmp/mnt/mdt1 || {
+               echo "mount new MDT....$fs2mdsdev"
+               $r mkdir -p $tmp/mnt/mdt1
+               $r mount -t lustre -o $mopts $fs2mdsdev $tmp/mnt/mdt1 || {
                        error_noexit "mount mdt1 failed"
                        return 1
                }
@@ -1487,6 +1605,12 @@ t32_test() {
        }
        if [ "$writeconf" ]; then
                mopts=loop,mgsnode=$nid,$writeconf
+               if [ $fstype == "ldiskfs" ]; then
+                       $r $TUNEFS --quota $tmp/ost || {
+                               error_noexit "Enable ost quota feature"
+                               return 1
+                       }
+               fi
        else
                mopts=loop,mgsnode=$nid
        fi
@@ -1531,16 +1655,16 @@ t32_test() {
        }
 
        if [ "$dne_upgrade" != "no" ]; then
-               $r2 $LCTL conf_param \
+               $r $LCTL conf_param \
                                $fsname-MDT0001.mdc.max_rpcs_in_flight=9 || {
                        error_noexit "Setting MDT1 \"max_rpcs_in_flight\""
                        return 1
                }
-               $r2 $LCTL conf_param $fsname-MDT0001.failover.node=$nid || {
+               $r $LCTL conf_param $fsname-MDT0001.failover.node=$nid || {
                        error_noexit "Setting MDT1 \"failover.node\""
                        return 1
                }
-               $r2 $LCTL conf_param $fsname-MDT0001.lov.stripesize=4M || {
+               $r $LCTL conf_param $fsname-MDT0001.lov.stripesize=4M || {
                        error_noexit "Setting MDT1 \"lov.stripesize\""
                        return 1
                }
@@ -1554,6 +1678,12 @@ t32_test() {
                }
                shall_cleanup_lustre=true
                $LCTL set_param debug="$PTLDEBUG"
+
+               t32_verify_quota $node $fsname $tmp/mnt/lustre || {
+                       error_noexit "verify quota failed"
+                       return 1
+               }
+
                if [ "$dne_upgrade" != "no" ]; then
                        $LFS mkdir -i 1 $tmp/mnt/lustre/remote_dir || {
                                error_noexit "set remote dir failed"
@@ -1674,11 +1804,20 @@ t32_test() {
                }
                shall_cleanup_lustre=false
        else
+               if [ "$dne_upgrade" != "no" ]; then
+                       $r umount -d $tmp/mnt/mdt1 || {
+                               error_noexit "Unmounting the MDT2"
+                               return 1
+                       }
+                       shall_cleanup_mdt1=false
+               fi
+
                $r umount -d $tmp/mnt/mdt || {
                        error_noexit "Unmounting the MDT"
                        return 1
                }
                shall_cleanup_mdt=false
+
                $r umount -d $tmp/mnt/ost || {
                        error_noexit "Unmounting the OST"
                        return 1
@@ -2255,6 +2394,7 @@ test_42() { #bug 14693
 
        do_facet mgs $LCTL conf_param $FSNAME.sys.some_wrong_param=20
        cleanup || error "stopping $FSNAME failed with invalid sys param"
+       load_modules
        setup
        check_mount || "client was not mounted with invalid sys param"
        cleanup || error "stopping $FSNAME failed with invalid sys param"
@@ -3244,14 +3384,21 @@ test_58() { # bug 22658
        createmany -o $DIR/$tdir/$tfile-%d 100
        # make sure that OSTs do not cancel llog cookies before we unmount the MDS
 #define OBD_FAIL_OBD_LOG_CANCEL_NET      0x601
-       do_facet mds "lctl set_param fail_loc=0x601"
+       do_facet $SINGLEMDS "lctl set_param fail_loc=0x601"
        unlinkmany $DIR/$tdir/$tfile-%d 100
-       stop mds
-       local MNTDIR=$(facet_mntpt mds)
+       stop_mds
+
+       local MNTDIR=$(facet_mntpt $SINGLEMDS)
+       local devname=$(mdsdevname ${SINGLEMDS//mds/})
+       local opts=""
+       if ! do_facet $SINGLEMDS "test -b $devname"; then
+               opts="-o loop"
+       fi
+
        # remove all files from the OBJECTS dir
-       do_facet mds "mount -t ldiskfs $MDSDEV $MNTDIR"
-       do_facet mds "find $MNTDIR/OBJECTS -type f -delete"
-       do_facet mds "umount $MNTDIR"
+       do_facet $SINGLEMDS "mount -t ldiskfs $opts $devname $MNTDIR"
+       do_facet $SINGLEMDS "find $MNTDIR/O/1/d* -type f -delete"
+       do_facet $SINGLEMDS "umount $MNTDIR"
        # restart MDS with missing llog files
        start_mds
        do_facet mds "lctl set_param fail_loc=0"
@@ -3513,7 +3660,7 @@ test_66() {
        stop_mds || error "stopping mds failed"
 
        if combined_mgs_mds; then
-               start_mds "-o nosvc" ||
+               start_mdt 1 "-o nosvc" ||
                        error "starting mds with nosvc option failed"
        fi
 
@@ -3553,7 +3700,7 @@ test_66() {
 
        setup_noconfig
        check_mount || error "error after nid replace"
-       cleanup
+       cleanup || error "cleanup failed"
        reformat
 }
 run_test 66 "replace nids"
@@ -3808,11 +3955,18 @@ test_72() { #LU-2634
        local cmd="$E2FSCK -fnvd $mdsdev"
        local fn=3
 
+       [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] &&
+               skip "ldiskfs only test" && return
+
        #tune MDT with "-O extents"
-       add $SINGLEMDS \
-               $(mkfs_opts $SINGLEMDS ${mdsdev}) --reformat $mdsdev ||
-                       error "add $SINGLEMDS failed"
-       $TUNE2FS -O extents $mdsdev
+
+       for num in $(seq $MDSCOUNT); do
+               add mds${num} $(mkfs_opts mds$num $(mdsdevname $num)) \
+               --reformat $(mdsdevname $num) $(mdsvdevname $num) ||
+               error "add mds $num failed"
+               $TUNE2FS -O extents $(mdsdevname $num)
+       done
+
        add ost1 $(mkfs_opts ost1 $ostdev) --reformat $ostdev ||
                error "add $ostdev failed"
        start_mgsmds || error "start mds failed"
@@ -3838,6 +3992,32 @@ test_72() { #LU-2634
 }
 run_test 72 "test fast symlink with extents flag enabled"
 
+test_73() { #LU-3006
+       load_modules
+       do_facet ost1 "$TUNEFS --failnode=1.2.3.4@tcp $(ostdevname 1)" ||
+               error "1st tunefs failed"
+       start_mgsmds || error "start mds failed"
+       start_ost || error "start ost failed"
+       mount_client $MOUNT || error "mount client failed"
+       lctl get_param -n osc.*OST0000-osc-[^M]*.import | grep failover_nids |
+               grep 1.2.3.4@tcp || error "failover nids haven't changed"
+       umount_client $MOUNT || error "umount client failed"
+       stopall
+       reformat
+}
+run_test 73 "failnode to update from mountdata properly"
+
+test_74() { # LU-1606
+       for TESTPROG in $LUSTRE_TESTS_API_DIR/*.c; do
+               gcc -Wall -Werror $LUSTRE_TESTS_API_DIR/simple_test.c \
+                       -I$LUSTRE/include \
+                       -L$LUSTRE/utils -llustreapi ||
+                               error "client api broken"
+       done
+       cleanup || return $?
+}
+run_test 74 "Lustre client api program can compile and link"
+
 if ! combined_mgs_mds ; then
        stop mgs
 fi