X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Ftests%2Fsanity.sh;h=661be1a7b6d5a86a6b708ade0848bed4bb030bf2;hb=cd5660a4c5732e0ac81bb0be4dee0c75163a8e38;hp=8ec81119433fd5c0ad7b09bad33baa330a2c2a92;hpb=7cc486b0a9e5000f8a4a130ce0ba7288cde585d7;p=fs%2Flustre-release.git diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh old mode 100755 new mode 100644 index 8ec8111..661be1a --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -105,7 +105,6 @@ check_swap_layouts_support() } check_and_setup_lustre - DIR=${DIR:-$MOUNT} assert_DIR @@ -2020,6 +2019,7 @@ run_test 27C "check full striping across all OSTs" test_27D() { [ $OSTCOUNT -lt 2 ] && skip "needs >= 2 OSTs" && return + [ -n "$FILESET" ] && skip "SKIP due to FILESET set" && return local POOL=${POOL:-testpool} local first_ost=0 local last_ost=$(($OSTCOUNT - 1)) @@ -4960,6 +4960,29 @@ test_56x() { } run_test 56x "lfs migration support" +test_56xa() { + check_swap_layouts_support && return 0 + [[ $OSTCOUNT -lt 2 ]] && + skip_env "need 2 OST, skipping test" && return + + local dir0=$DIR/$tdir/$testnum + test_mkdir -p $dir0 || error "creating dir $dir0" + + local ref1=/etc/passwd + local file1=$dir0/file1 + + $SETSTRIPE -c 2 $file1 + cp $ref1 $file1 + $LFS migrate --block -c 1 $file1 || error "migrate failed rc = $?" + local stripe=$($GETSTRIPE -c $file1) + [[ $stripe == 1 ]] || error "stripe of $file1 is $stripe != 1" + cmp $file1 $ref1 || error "content mismatch $file1 differs from $ref1" + + # clean up + rm -f $file1 +} +run_test 56xa "lfs migration --block support" + test_56y() { [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.53) ] && skip "No HSM $(lustre_build_version $SINGLEMDS) MDS < 2.4.53" && @@ -9946,6 +9969,7 @@ test_154a() { [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.51) ]] || { skip "Need MDS version at least 2.2.51"; return 0; } [ -z "$(which setfacl)" ] && skip "must have setfacl tool" && return + [ -n "$FILESET" ] && skip "SKIP due to FILESET set" && return cp /etc/hosts $DIR/$tfile @@ -9972,6 +9996,7 @@ test_154b() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.51) ]] || { skip "Need MDS version at least 2.2.51"; return 0; } + [ -n "$FILESET" ] && skip "SKIP due to FILESET set" && return [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return @@ -10068,6 +10093,7 @@ test_154e() run_test 154e ".lustre is not returned by readdir" test_154f() { + [ -n "$FILESET" ] && skip "SKIP due to FILESET set" && return # create parent directory on a single MDT to avoid cross-MDT hardlinks test_mkdir -p -c1 $DIR/$tdir/d # test dirs inherit from its stripe @@ -10147,6 +10173,7 @@ test_154g() { [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.92) ]] || { skip "Need MDS version at least 2.6.92"; return 0; } + [ -n "$FILESET" ] && skip "SKIP due to FILESET set" && return mkdir -p $DIR/$tdir llapi_fid_test -d $DIR/$tdir @@ -11435,6 +11462,7 @@ test_185() { # LU-2441 local mtime1=$(stat -c "%Y" $DIR/$tdir) local fid=$($MULTIOP $DIR/$tdir VFw4096c) || error "cannot create/write a volatile file" + [ "$FILESET" == "" ] && $CHECKSTAT -t file $MOUNT/.lustre/fid/$fid 2>/dev/null && error "FID is still valid after close" @@ -11449,8 +11477,10 @@ test_185() { # LU-2441 # is unfortunately eaten by multiop_bg_pause local n=$((${fidv[1]} + 1)) local next_fid="${fidv[0]}:$(printf "0x%x" $n):${fidv[2]}" - $CHECKSTAT -t file $MOUNT/.lustre/fid/$next_fid || - error "FID is missing before close" + if [ "$FILESET" == "" ]; then + $CHECKSTAT -t file $MOUNT/.lustre/fid/$next_fid || + error "FID is missing before close" + fi kill -USR1 $multi_pid # 1 second delay, so if mtime change we will see it sleep 1 @@ -11501,6 +11531,7 @@ run_test 187b "Test data version change on volatile file" test_200() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mgs_nodsh && skip "remote MGS with nodsh" && return + [ -n "$FILESET" ] && skip "SKIP due to FILESET set" && return local POOL=${POOL:-cea1} local POOL_ROOT=${POOL_ROOT:-$DIR/d200.pools} @@ -13197,6 +13228,7 @@ run_test 232 "failed lock should not block umount" test_233a() { [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.3.64) ] || { skip "Need MDS version at least 2.3.64"; return; } + [ -n "$FILESET" ] && skip "SKIP due to FILESET set" && return local fid=$($LFS path2fid $MOUNT) stat $MOUNT/.lustre/fid/$fid > /dev/null || @@ -13207,6 +13239,7 @@ run_test 233a "checking that OBF of the FS root succeeds" test_233b() { [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.5.90) ] || { skip "Need MDS version at least 2.5.90"; return; } + [ -n "$FILESET" ] && skip "SKIP due to FILESET set" && return local fid=$($LFS path2fid $MOUNT/.lustre) stat $MOUNT/.lustre/fid/$fid > /dev/null || @@ -13488,6 +13521,90 @@ test_246() { # LU-7371 } run_test 246 "Read file of size 4095 should return right length" +test_247a() { + lctl get_param -n mdc.$FSNAME-MDT0000*.import | + grep -q subtree || + { skip "Fileset feature is not supported"; return; } + + local submount=${MOUNT}_$tdir + + mkdir $MOUNT/$tdir + mkdir -p $submount || error "mkdir $submount failed" + FILESET="$FILESET/$tdir" mount_client $submount || + error "mount $submount failed" + echo foo > $submount/$tfile || error "write $submount/$tfile failed" + [ $(cat $MOUNT/$tdir/$tfile) = "foo" ] || + error "read $MOUNT/$tdir/$tfile failed" + umount_client $submount || error "umount $submount failed" + rmdir $submount +} +run_test 247a "mount subdir as fileset" + +test_247b() { + lctl get_param -n mdc.$FSNAME-MDT0000*.import | grep -q subtree || + { skip "Fileset feature is not supported"; return; } + + local submount=${MOUNT}_$tdir + + rm -rf $MOUNT/$tdir + mkdir -p $submount || error "mkdir $submount failed" + SKIP_FILESET=1 + FILESET="$FILESET/$tdir" mount_client $submount && + error "mount $submount should fail" + rmdir $submount +} +run_test 247b "mount subdir that dose not exist" + +test_247c() { + lctl get_param -n mdc.$FSNAME-MDT0000*.import | grep -q subtree || + { skip "Fileset feature is not supported"; return; } + + local submount=${MOUNT}_$tdir + + mkdir -p $MOUNT/$tdir/dir1 + mkdir -p $submount || error "mkdir $submount failed" + FILESET="$FILESET/$tdir" mount_client $submount || + error "mount $submount failed" + local fid=$($LFS path2fid $MOUNT/) + $LFS fid2path $submount $fid && error "fid2path should fail" + umount_client $submount || error "umount $submount failed" + rmdir $submount +} +run_test 247c "running fid2path outside root" + +test_247d() { + lctl get_param -n mdc.$FSNAME-MDT0000*.import | grep -q subtree || + { skip "Fileset feature is not supported"; return; } + + local submount=${MOUNT}_$tdir + + mkdir -p $MOUNT/$tdir/dir1 + mkdir -p $submount || error "mkdir $submount failed" + FILESET="$FILESET/$tdir" mount_client $submount || + error "mount $submount failed" + local fid=$($LFS path2fid $submount/dir1) + $LFS fid2path $submount $fid || error "fid2path should succeed" + umount_client $submount || error "umount $submount failed" + rmdir $submount +} +run_test 247d "running fid2path inside root" + +# LU-8037 +test_247e() { + lctl get_param -n mdc.$FSNAME-MDT0000*.import | + grep -q subtree || + { skip "Fileset feature is not supported"; return; } + + local submount=${MOUNT}_$tdir + + mkdir $MOUNT/$tdir + mkdir -p $submount || error "mkdir $submount failed" + FILESET="$FILESET/.." mount_client $submount && + error "mount $submount should fail" + rmdir $submount +} +run_test 247e "mount .. as fileset" + test_250() { [ "$(facet_fstype ost$(($($GETSTRIPE -i $DIR/$tfile) + 1)))" = "zfs" ] \ && skip "no 16TB file size limit on ZFS" && return @@ -13570,6 +13687,47 @@ test_252() { } run_test 252 "check lr_reader tool" +test_254() { + local cl_user + + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + remote_mds_nodsh && skip "remote MDS with nodsh" && return + do_facet mds1 $LCTL get_param -n mdd.$MDT0.changelog_size || + { skip "MDS does not support changelog_size" && return; } + + cl_user=$(do_facet mds1 $LCTL --device $MDT0 changelog_register -n) + echo "Registered as changelog user $cl_user" + + $LFS changelog_clear $MDT0 $cl_user 0 + + local size1=$(do_facet mds1 \ + $LCTL get_param -n mdd.$MDT0.changelog_size) + echo "Changelog size $size1" + + rm -rf $DIR/$tdir + $LFS mkdir -i 0 $DIR/$tdir + # change something + mkdir -p $DIR/$tdir/pics/2008/zachy + touch $DIR/$tdir/pics/2008/zachy/timestamp + cp /etc/hosts $DIR/$tdir/pics/2008/zachy/pic1.jpg + mv $DIR/$tdir/pics/2008/zachy $DIR/$tdir/pics/zach + ln $DIR/$tdir/pics/zach/pic1.jpg $DIR/$tdir/pics/2008/portland.jpg + ln -s $DIR/$tdir/pics/2008/portland.jpg $DIR/$tdir/pics/desktop.jpg + rm $DIR/$tdir/pics/desktop.jpg + + local size2=$(do_facet mds1 \ + $LCTL get_param -n mdd.$MDT0.changelog_size) + echo "Changelog size after work $size2" + + do_facet mds1 $LCTL --device $MDT0 changelog_deregister $cl_user + + if (( size2 <= size1 )); then + error "Changelog size after work should be greater than original" + fi + return 0 +} +run_test 254 "Check changelog size" + test_256() { local cl_user local cat_sl @@ -14436,6 +14594,58 @@ test_401b() { } run_test 401b "Verify 'lctl {get,set}_param' continue after error" +test_401c() { + local jobid_var_old=$($LCTL get_param -n jobid_var) + local jobid_var_new + + $LCTL set_param jobid_var= && + error "no error returned for 'set_param a='" + + jobid_var_new=$($LCTL get_param -n jobid_var) + [[ "$jobid_var_old" == "$jobid_var_new" ]] || + error "jobid_var was changed by setting without value" + + $LCTL set_param jobid_var && + error "no error returned for 'set_param a'" + + jobid_var_new=$($LCTL get_param -n jobid_var) + [[ "$jobid_var_old" == "$jobid_var_new" ]] || + error "jobid_var was changed by setting without value" +} +run_test 401c "Verify 'lctl set_param' without value fails in either format." + +test_401d() { + local jobid_var_old=$($LCTL get_param -n jobid_var) + local jobid_var_new + local new_value="foo=bar" + + $LCTL set_param jobid_var=$new_value || + error "'set_param a=b' did not accept a value containing '='" + + jobid_var_new=$($LCTL get_param -n jobid_var) + [[ "$jobid_var_new" == "$new_value" ]] || + error "'set_param a=b' failed on a value containing '='" + + # Reset the jobid_var to test the other format + $LCTL set_param jobid_var=$jobid_var_old + jobid_var_new=$($LCTL get_param -n jobid_var) + [[ "$jobid_var_new" == "$jobid_var_old" ]] || + error "failed to reset jobid_var" + + $LCTL set_param jobid_var $new_value || + error "'set_param a b' did not accept a value containing '='" + + jobid_var_new=$($LCTL get_param -n jobid_var) + [[ "$jobid_var_new" == "$new_value" ]] || + error "'set_param a b' failed on a value containing '='" + + $LCTL set_param jobid_var $jobid_var_old + jobid_var_new=$($LCTL get_param -n jobid_var) + [[ "$jobid_var_new" == "$jobid_var_old" ]] || + error "failed to reset jobid_var" +} +run_test 401d "Verify 'lctl set_param' accepts values containing '='" + test_402() { $LFS setdirstripe -i 0 $DIR/$tdir || error "setdirstripe -i 0 failed" #define OBD_FAIL_MDS_FLD_LOOKUP 0x15c @@ -14445,6 +14655,61 @@ test_402() { } run_test 402 "Return ENOENT to lod_generate_and_set_lovea" +test_403() { + local file1=$DIR/$tfile.1 + local file2=$DIR/$tfile.2 + local tfile=$TMP/$tfile + + rm -f $file1 $file2 $tfile + + touch $file1 + ln $file1 $file2 + + # 30 sec OBD_TIMEOUT in ll_getattr() + # right before populating st_nlink + $LCTL set_param fail_loc=0x80001409 + stat -c %h $file1 > $tfile & + + # create an alias, drop all locks and reclaim the dentry + < $file2 + cancel_lru_locks mdc + cancel_lru_locks osc + sysctl -w vm.drop_caches=2 + + wait + + [ `cat $tfile` -gt 0 ] || error "wrong nlink count: `cat $tfile`" + + rm -f $tfile $file1 $file2 +} +run_test 403 "i_nlink should not drop to zero due to aliasing" + +test_404() { # LU-6601 + local mosps=$(do_facet $SINGLEMDS $LCTL dl | + awk '/osp .*-osc-MDT/ { print $4}') + + local osp + for osp in $mosps; do + echo "Deactivate: " $osp + do_facet $SINGLEMDS $LCTL --device %$osp deactivate + local stat=$(do_facet $SINGLEMDS $LCTL dl | + awk -vp=$osp '$4 == p { print $2 }') + [ $stat = IN ] || { + do_facet $SINGLEMDS $LCTL dl | grep -w $osp + error "deactivate error" + } + echo "Activate: " $osp + do_facet $SINGLEMDS $LCTL --device %$osp activate + local stat=$(do_facet $SINGLEMDS $LCTL dl | + awk -vp=$osp '$4 == p { print $2 }') + [ $stat = UP ] || { + do_facet $SINGLEMDS $LCTL dl | grep -w $osp + error "activate error" + } + done +} +run_test 404 "validate manual {de}activated works properly for OSPs" + # # tests that do cleanup/setup should be run at the end #