X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Fsanity.sh;h=3ff0118faef14cd6584a8f97547184cec65fc8f8;hp=29d5033e058c7b09f9d08bc724e4f68671d6a440;hb=489afbe69d5b7a867e44f6c2364513e660cf862b;hpb=7281635521a823548d497bce2f19acfa3318dfe9 diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 29d5033..3ff0118 100755 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -31,8 +31,8 @@ GRANT_CHECK_LIST=${GRANT_CHECK_LIST:-""} export PARALLEL=${PARALLEL:-"no"} TRACE=${TRACE:-""} -LUSTRE_TESTS_API_DIR=${LUSTRE_TESTS_API_DIR:-${LUSTRE}/tests/clientapi} LUSTRE=${LUSTRE:-$(dirname $0)/..} +LUSTRE_TESTS_API_DIR=${LUSTRE_TESTS_API_DIR:-${LUSTRE}/tests/clientapi} . $LUSTRE/tests/test-framework.sh init_test_env $@ @@ -75,7 +75,7 @@ if (( $LINUX_VERSION_CODE >= $(version_code 4.18.0) && ALWAYS_EXCEPT+=" 411" fi -# 5 12 (min)" +# 5 12 8 12 (min)" [ "$SLOW" = "no" ] && EXCEPT_SLOW="27m 64b 68 71 115 135 136 300o" if [ "$mds1_FSTYPE" = "zfs" ]; then @@ -3749,6 +3749,46 @@ test_33g() { } run_test 33g "nonroot user create already existing root created file" +test_33h() { + [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs" + [ $MDS1_VERSION -lt $(version_code 2.13.50) ] && + skip "Need MDS version at least 2.13.50" + + test_mkdir -c $MDSCOUNT -H crush $DIR/$tdir || + error "mkdir $tdir failed" + touch $DIR/$tdir/$tfile || error "touch $tfile failed" + + local index=$($LFS getstripe -m $DIR/$tdir/$tfile) + local index2 + + for fname in $DIR/$tdir/$tfile.bak \ + $DIR/$tdir/$tfile.SAV \ + $DIR/$tdir/$tfile.orig \ + $DIR/$tdir/$tfile~; do + touch $fname || error "touch $fname failed" + index2=$($LFS getstripe -m $fname) + [ $index -eq $index2 ] || + error "$fname MDT index mismatch $index != $index2" + done + + local failed=0 + for i in {1..50}; do + for fname in $(mktemp -u $DIR/$tdir/.$tfile.XXXXXX) \ + $(mktemp $DIR/$tdir/$tfile.XXXXXXXX); do + touch $fname || error "touch $fname failed" + index2=$($LFS getstripe -m $fname) + if [[ $index != $index2 ]]; then + failed=$((failed + 1)) + echo "$fname MDT index mismatch $index != $index2" + fi + done + done + echo "$failed MDT index mismatches" + (( failed < 4 )) || error "MDT index mismatch $failed times" + +} +run_test 33h "temp file is located on the same MDT as target" + TEST_34_SIZE=${TEST_34_SIZE:-2000000000000} test_34a() { rm -f $DIR/f34 @@ -6438,7 +6478,9 @@ test_56wb() { echo "done." echo -n "Removing test file from pool '$pool'..." - $LFS migrate $file1 &> /dev/null || + # "lfs migrate $file" won't remove the file from the pool + # until some striping information is changed. + $LFS migrate -c 1 $file1 &> /dev/null || error "cannot remove from pool" [ "$($LFS getstripe -p $file1)" ] && error "pool still set" @@ -6460,19 +6502,23 @@ run_test 56wb "check lfs_migrate pool support" test_56wc() { local file1="$DIR/$tdir/file1" + local parent_ssize + local parent_scount + local cur_ssize + local cur_scount + local orig_ssize echo -n "Creating test dir..." test_mkdir $DIR/$tdir &> /dev/null || error "cannot create dir" - local def_stripe_size=$($LFS getstripe -S $DIR/$tdir 2>/dev/null) $LFS setstripe -S 1M -c 1 "$DIR/$tdir" &> /dev/null || - error "cannot set stripe" + error "cannot set stripe by '-S 1M -c 1'" echo "done" echo -n "Setting initial stripe for test file..." $LFS setstripe -S 512K -c 1 "$file1" &> /dev/null || error "cannot set stripe" - [ $($LFS getstripe -S "$file1") -eq 524288 ] || - error "stripe size not set" + cur_ssize=$($LFS getstripe -S "$file1") + [ $cur_ssize -eq 524288 ] || error "setstripe -S $cur_ssize != 524288" echo "done." # File currently set to -S 512K -c 1 @@ -6489,8 +6535,8 @@ test_56wc() { echo -n "Verifying -S option is passed through to lfs migrate..." $LFS_MIGRATE -y -S 1M "$file1" &> /dev/null || error "migration failed" - [ $($LFS getstripe -S "$file1") -eq 1048576 ] || - error "file was not restriped" + cur_ssize=$($LFS getstripe -S "$file1") + [ $cur_ssize -eq 1048576 ] || error "migrate -S $cur_ssize != 1048576" echo "done." # File currently set to -S 1M -c 1 @@ -6501,8 +6547,9 @@ test_56wc() { error "long option without argument not supported" $LFS_MIGRATE -y --stripe-size 512K "$file1" &> /dev/null || error "long option with argument not supported" - [ $($LFS getstripe -S "$file1") -eq 524288 ] || - error "file not restriped with --stripe-size option" + cur_ssize=$($LFS getstripe -S "$file1") + [ $cur_ssize -eq 524288 ] || + error "migrate --stripe-size $cur_ssize != 524288" echo "done." # File currently set to -S 512K -c 1 @@ -6511,8 +6558,8 @@ test_56wc() { echo -n "Verifying explicit stripe count can be set..." $LFS_MIGRATE -y -c 2 "$file1" &> /dev/null || error "migrate failed" - [ $($LFS getstripe -c "$file1") -eq 2 ] || - error "file not restriped to explicit count" + cur_scount=$($LFS getstripe -c "$file1") + [ $cur_scount -eq 2 ] || error "migrate -c $cur_scount != 2" echo "done." fi @@ -6521,17 +6568,21 @@ test_56wc() { # Ensure parent striping is used if -R is set, and no stripe # count or size is specified echo -n "Setting stripe for parent directory..." - $LFS setstripe -S 1M -c 1 "$DIR/$tdir" &> /dev/null || - error "cannot set stripe" + $LFS setstripe -S 2M -c 1 "$DIR/$tdir" &> /dev/null || + error "cannot set stripe '-S 2M -c 1'" echo "done." echo -n "Verifying restripe option uses parent stripe settings..." + parent_ssize=$($LFS getstripe -S $DIR/$tdir 2>/dev/null) + parent_scount=$($LFS getstripe -c $DIR/$tdir 2>/dev/null) $LFS_MIGRATE -y -R "$file1" &> /dev/null || error "migrate failed" - [ $($LFS getstripe -S "$file1") -eq $def_stripe_size ] || - error "file not restriped to parent settings" - [ $($LFS getstripe -c "$file1") -eq 1 ] || - error "file not restriped to parent settings" + cur_ssize=$($LFS getstripe -S "$file1") + [ $cur_ssize -eq $parent_ssize ] || + error "migrate -R stripe_size $cur_ssize != $parent_ssize" + cur_scount=$($LFS getstripe -c "$file1") + [ $cur_scount -eq $parent_scount ] || + error "migrate -R stripe_count $cur_scount != $parent_scount" echo "done." # File currently set to -S 1M -c 1 @@ -6539,13 +6590,14 @@ test_56wc() { # Ensure striping is preserved if -R is not set, and no stripe # count or size is specified echo -n "Verifying striping size preserved when not specified..." - local orig_stripe_size=$($LFS getstripe -S "$file1" 2>/dev/null) + orig_ssize=$($LFS getstripe -S "$file1" 2>/dev/null) $LFS setstripe -S 2M -c 1 "$DIR/$tdir" &> /dev/null || error "cannot set stripe on parent directory" $LFS_MIGRATE -y "$file1" &> /dev/null || error "migrate failed" - [ $($LFS getstripe -S "$file1") -eq $orig_stripe_size ] || - error "file was restriped" + cur_ssize=$($LFS getstripe -S "$file1") + [ $cur_ssize -eq $orig_ssize ] || + error "migrate by default $cur_ssize != $orig_ssize" echo "done." # Ensure file name properly detected when final option has no argument @@ -6833,6 +6885,75 @@ test_56xc() { } run_test 56xc "lfs migration autostripe" +test_56xd() { + [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" + + local dir=$DIR/$tdir + local f_mgrt=$dir/$tfile.mgrt + local f_yaml=$dir/$tfile.yaml + local f_copy=$dir/$tfile.copy + local layout_yaml="-E 1M -S 512K -c 1 -E -1 -S 1M -c 2 -i 0" + local layout_copy="-c 2 -S 2M -i 1" + local yamlfile=$dir/yamlfile + local layout_before; + local layout_after; + + test_mkdir "$dir" || error "cannot create dir $dir" + $LFS setstripe $layout_yaml $f_yaml || + error "cannot setstripe $f_yaml with layout $layout_yaml" + $LFS getstripe --yaml $f_yaml > $yamlfile + $LFS setstripe $layout_copy $f_copy || + error "cannot setstripe $f_copy with layout $layout_copy" + touch $f_mgrt + dd if=/dev/zero of=$f_mgrt bs=1M count=4 + + # 1. test option --yaml + $LFS_MIGRATE -y --yaml $yamlfile $f_mgrt || + error "cannot migrate $f_mgrt with --yaml $yamlfile" + layout_before=$(get_layout_param $f_yaml) + layout_after=$(get_layout_param $f_mgrt) + [ "$layout_after" == "$layout_before" ] || + error "lfs_migrate --yaml: $layout_after != $layout_before" + + # 2. test option --copy + $LFS_MIGRATE -y --copy $f_copy $f_mgrt || + error "cannot migrate $f_mgrt with --copy $f_copy" + layout_before=$(get_layout_param $f_copy) + layout_after=$(get_layout_param $f_mgrt) + [ "$layout_after" == "$layout_before" ] || + error "lfs_migrate --copy: $layout_after != $layout_before" +} +run_test 56xd "check lfs_migrate --yaml and --copy support" + +test_56xe() { + [[ $OSTCOUNT -lt 2 ]] && skip_env "needs >= 2 OSTs" + + local dir=$DIR/$tdir + local f_comp=$dir/$tfile + local layout="-E 1M -S 512K -c 1 -E -1 -S 1M -c 2 -i 0" + local layout_before="" + local layout_after="" + + test_mkdir "$dir" || error "cannot create dir $dir" + $LFS setstripe $layout $f_comp || + error "cannot setstripe $f_comp with layout $layout" + layout_before=$(get_layout_param $f_comp) + dd if=/dev/zero of=$f_comp bs=1M count=4 + + # 1. migrate a comp layout file by lfs_migrate + $LFS_MIGRATE -y $f_comp || error "cannot migrate $f_comp by lfs_migrate" + layout_after=$(get_layout_param $f_comp) + [ "$layout_before" == "$layout_after" ] || + error "lfs_migrate: $layout_before != $layout_after" + + # 2. migrate a comp layout file by lfs migrate + $LFS migrate $f_comp || error "cannot migrate $f_comp by lfs migrate" + layout_after=$(get_layout_param $f_comp) + [ "$layout_before" == "$layout_after" ] || + error "lfs migrate: $layout_before != $layout_after" +} +run_test 56xe "migrate a composite layout file" + test_56y() { [ $MDS1_VERSION -lt $(version_code 2.4.53) ] && skip "No HSM $(lustre_build_version $SINGLEMDS) MDS < 2.4.53" @@ -7492,8 +7613,8 @@ run_test 63b "async write errors should be returned to fsync ===" test_64a () { [ $PARALLEL == "yes" ] && skip "skip parallel run" - df $DIR - lctl get_param -n osc.*[oO][sS][cC][_-]*.cur* | grep "[0-9]" + lfs df $DIR + lctl get_param osc.*[oO][sS][cC][_-]*.cur* | grep "=[1-9]" } run_test 64a "verify filter grant calculations (in kernel) =====" @@ -8156,28 +8277,27 @@ num_inodes() { test_76() { # Now for bug 20433, added originally in bug 1443 [ $PARALLEL == "yes" ] && skip "skip parallel run" - local CPUS=$(getconf _NPROCESSORS_ONLN 2>/dev/null) - cancel_lru_locks osc - BEFORE_INODES=$(num_inodes) - echo "before inodes: $BEFORE_INODES" - local COUNT=1000 - [ "$SLOW" = "no" ] && COUNT=100 - for i in $(seq $COUNT); do + local cpus=$(getconf _NPROCESSORS_ONLN 2>/dev/null) + local before=$(num_inodes) + local count=$((512 * cpus)) + [ "$SLOW" = "no" ] && count=$((64 * cpus)) + + echo "before inodes: $before" + for i in $(seq $count); do touch $DIR/$tfile rm -f $DIR/$tfile done cancel_lru_locks osc - AFTER_INODES=$(num_inodes) - echo "after inodes: $AFTER_INODES" - local wait=0 - while [[ $((AFTER_INODES-1*${CPUS:-1})) -gt $BEFORE_INODES ]]; do - sleep 2 - AFTER_INODES=$(num_inodes) - wait=$((wait+2)) - echo "wait $wait seconds inodes: $AFTER_INODES" - if [ $wait -gt 30 ]; then - error "inode slab grew from $BEFORE_INODES to $AFTER_INODES" + local after=$(num_inodes) + echo "after inodes: $after" + while (( after > before + 8 * ${cpus:-1} )); do + sleep 1 + after=$(num_inodes) + wait=$((wait + 1)) + (( wait % 5 == 0 )) && echo "wait $wait seconds inodes: $after" + if (( wait > 30 )); then + error "inode slab grew from $before to $after" fi done } @@ -12659,7 +12779,7 @@ test_136() { local fname mkdir -p $DIR/$tdir || error "failed to create $DIR/$tdir" - $SETSTRIPE -c 1 -i 0 $DIR/$tdir || error "failed to set striping" + $LFS setstripe -c 1 -i 0 $DIR/$tdir || error "failed to set striping" #set only one record at plain llog #define OBD_FAIL_CATALOG_FULL_CHECK 0x131a do_facet $SINGLEMDS $LCTL set_param fail_loc=0x131a fail_val=1 @@ -13872,7 +13992,9 @@ test_160f() { local i # generate some changelog records to accumulate on each MDT - test_mkdir -c $MDSCOUNT $DIR/$tdir || error "test_mkdir $tdir failed" + # use fnv1a because created files should be evenly distributed + test_mkdir -c $MDSCOUNT -H fnv_1a_64 $DIR/$tdir || + error "test_mkdir $tdir failed" log "$(date +%s): creating first files" createmany -m $DIR/$tdir/$tfile $((MDSCOUNT * 2)) || error "create $DIR/$tdir/$tfile failed" @@ -13998,7 +14120,9 @@ test_160g() { local i # generate some changelog records to accumulate on each MDT - test_mkdir -c $MDSCOUNT $DIR/$tdir || error "mkdir $tdir failed" + # use fnv1a because created files should be evenly distributed + test_mkdir -c $MDSCOUNT -H fnv_1a_64 $DIR/$tdir || + error "mkdir $tdir failed" createmany -m $DIR/$tdir/$tfile $((MDSCOUNT * 2)) || error "create $DIR/$tdir/$tfile failed" @@ -14112,7 +14236,9 @@ test_160h() { local i # generate some changelog records to accumulate on each MDT - test_mkdir -c $MDSCOUNT $DIR/$tdir || error "test_mkdir $tdir failed" + # use fnv1a because created files should be evenly distributed + test_mkdir -c $MDSCOUNT -H fnv_1a_64 $DIR/$tdir || + error "test_mkdir $tdir failed" createmany -m $DIR/$tdir/$tfile $((MDSCOUNT * 2)) || error "create $DIR/$tdir/$tfile failed" @@ -14261,7 +14387,9 @@ test_160i() { changelog_register || error "first changelog_register failed" # generate some changelog records to accumulate on each MDT - test_mkdir -c $MDSCOUNT $DIR/$tdir || error "mkdir $tdir failed" + # use fnv1a because created files should be evenly distributed + test_mkdir -c $MDSCOUNT -H fnv_1a_64 $DIR/$tdir || + error "mkdir $tdir failed" createmany -m $DIR/$tdir/$tfile $((MDSCOUNT * 2)) || error "create $DIR/$tdir/$tfile failed" @@ -14326,7 +14454,9 @@ test_160j() { stack_trap "changelog_deregister" EXIT # generate some changelog - test_mkdir -c $MDSCOUNT $DIR/$tdir || error "mkdir $tdir failed" + # use fnv1a because created files should be evenly distributed + test_mkdir -c $MDSCOUNT -H fnv_1a_64 $DIR/$tdir || + error "mkdir $tdir failed" createmany -m $DIR/$tdir/${tfile}bis $((MDSCOUNT * 2)) || error "create $DIR/$tdir/${tfile}bis failed" @@ -14349,7 +14479,6 @@ test_160j() { error "User $cl_user not found in changelog_users" printf 'clear:'$cl_user':0' >&3 - } run_test 160j "client can be umounted while its chanangelog is being used" @@ -16602,6 +16731,27 @@ test_230b() { ln -s $migrate_dir/$tfile $migrate_dir/${tfile}_ln ln -s $other_dir/$tfile $migrate_dir/${tfile}_ln_other + local len + local lnktgt + + # inline symlink + for len in 58 59 60; do + lnktgt=$(str_repeat 'l' $len) + touch $migrate_dir/$lnktgt + ln -s $lnktgt $migrate_dir/${len}char_ln + done + + # PATH_MAX + for len in 4094 4095; do + lnktgt=$(str_repeat 'l' $len) + ln -s $lnktgt $migrate_dir/${len}char_ln + done + + # NAME_MAX + for len in 254 255; do + touch $migrate_dir/$(str_repeat 'l' $len) + done + $LFS migrate -m $MDTIDX $migrate_dir || error "fails on migrating remote dir to MDT1" @@ -16609,7 +16759,8 @@ test_230b() { for ((i = 0; i < 10; i++)); do for file in $(find $migrate_dir/dir_${i}); do mdt_index=$($LFS getstripe -m $file) - [ $mdt_index == $MDTIDX ] || + # broken symlink getstripe will fail + [ $mdt_index -ne $MDTIDX ] && stat -L $file && error "$file is not on MDT${MDTIDX}" done done @@ -16673,7 +16824,7 @@ test_230b() { echo "migrate back to MDT0, checking.." for file in $(find $migrate_dir); do mdt_index=$($LFS getstripe -m $file) - [ $mdt_index == $MDTIDX ] || + [ $mdt_index -ne $MDTIDX ] && stat -L $file && error "$file is not on MDT${MDTIDX}" done @@ -20393,7 +20544,7 @@ test_316() { chown nobody $DIR/$tdir/d touch $DIR/$tdir/d/file - $LFS mv -M1 $DIR/$tdir/d || error "lfs mv failed" + $LFS mv -m1 $DIR/$tdir/d || error "lfs mv failed" } run_test 316 "lfs mv" @@ -20475,9 +20626,8 @@ test_318() { llite.*.max_read_ahead_async_active 2>/dev/null) [ $max_active -ne 256 ] && error "expected 256 but got $max_active" - # currently reset to 0 is unsupported, leave it 512 for now. - $LCTL set_param llite.*.max_read_ahead_async_active=0 && - error "set max_read_ahead_async_active should fail" + $LCTL set_param llite.*.max_read_ahead_async_active=0 || + error "set max_read_ahead_async_active should succeed" $LCTL set_param llite.*.max_read_ahead_async_active=512 max_active=$($LCTL get_param -n \ @@ -20720,6 +20870,10 @@ test_400a() { # LU-1606, was conf-sanity test_74 local prefix=/usr/include/lustre local prog + # Oleg removes c files in his test rig so test if any c files exist + [ -z "$(ls -A $LUSTRE_TESTS_API_DIR)" ] && \ + skip_env "Needed c test files are missing" + if ! [[ -d $prefix ]]; then # Assume we're running in tree and fixup the include path. extra_flags+=" -I$LUSTRE/../lnet/include/uapi -I$LUSTRE/include/uapi -I$LUSTRE/include" @@ -20727,7 +20881,7 @@ test_400a() { # LU-1606, was conf-sanity test_74 fi for prog in $LUSTRE_TESTS_API_DIR/*.c; do - $CC -Wall -Werror $extra_flags -o $out $prog -llustreapi || + $CC -Wall -Werror -std=c99 $extra_flags -o $out $prog -llustreapi || error "client api broken" done rm -f $out @@ -20759,7 +20913,7 @@ test_400b() { # LU-1606, LU-5011 continue # lustre_ioctl.h is internal header fi - $CC -Wall -Werror -include $header -c -x c /dev/null -o $out || + $CC -Wall -Werror -std=c99 -include $header -c -x c /dev/null -o $out || error "cannot compile '$header'" done rm -f $out