X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Fsanity.sh;h=2afc8effe6c986a8d47a40e763cb1b4a30a6e6a8;hp=0bdc2f52f4806429ada36122ec0d6054b9187153;hb=3e8fa8a7396cd029cb0d7714a324343eed7f535e;hpb=3043c6f18964b0cc843b2e7866756a1d1ddd61e3 diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 0bdc2f5..2afc8ef 100644 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -51,16 +51,22 @@ fi selinux_status=$(getenforce) if [ "$selinux_status" != "Disabled" ]; then - # bug number: LU-12895 LU-12469 LU-12469 - ALWAYS_EXCEPT+=" 185a 230b 230d" + # bug number: + ALWAYS_EXCEPT+="" fi # skip the grant tests for ARM until they are fixed if [[ $(uname -m) = aarch64 ]]; then # bug number: LU-11596 ALWAYS_EXCEPT+=" $GRANT_CHECK_LIST" - # bug number: LU-11671 LU-11667 LU-4398 - ALWAYS_EXCEPT+=" 45 317 817" + # bug number: LU-11671 LU-11667 + ALWAYS_EXCEPT+=" 45 317" +fi + +# skip nfs tests on kernels >= 4.14.0 until they are fixed +if [ $LINUX_VERSION_CODE -ge $(version_code 4.14.0) ];then + # bug number: LU-12661 + ALWAYS_EXCEPT+=" 817" fi # 5 12 (min)" @@ -4981,7 +4987,7 @@ test_49() { # LU-1030 [ $PARALLEL == "yes" ] && skip "skip parallel run" remote_ost_nodsh && skip "remote OST with nodsh" - # get ost1 size - lustre-OST0000 + # get ost1 size - $FSNAME-OST0000 ost1_size=$(do_facet ost1 $LFS df | grep ${ost1_svc} | awk '{ print $4 }') # write 800M at maximum @@ -5744,6 +5750,65 @@ test_56ob() { } run_test 56ob "check lfs find -atime -mtime -ctime with units" +test_newerXY_base() { + local x=$1 + local y=$2 + local dir=$DIR/$tdir + local ref + local negref + + if [ $y == "t" ]; then + ref="\"$(date +"%Y-%m-%d %H:%M:%S")\"" + else + ref=$DIR/$tfile.newer + touch $ref || error "touch $ref failed" + fi + sleep 2 + setup_56 $dir $NUMFILES $NUMDIRS "-i0 -c1" "-i0 -c1" + sleep 2 + if [ $y == "t" ]; then + negref="\"$(date +"%Y-%m-%d %H:%M:%S")\"" + else + negref=$DIR/$tfile.newerneg + touch $negref || error "touch $negref failed" + fi + + local cmd="$LFS find $dir -newer$x$y $ref" + local nums=$(eval $cmd | wc -l) + local expected=$(((NUMFILES + 2) * NUMDIRS + 1)) + + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + + cmd="$LFS find $dir ! -newer$x$y $negref" + nums=$(eval $cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + + cmd="$LFS find $dir -newer$x$y $ref ! -newer$x$y $negref" + nums=$(eval $cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + + rm -rf $DIR/* +} + +test_56oc() { + test_newerXY_base "a" "a" + test_newerXY_base "a" "m" + test_newerXY_base "a" "c" + test_newerXY_base "m" "a" + test_newerXY_base "m" "m" + test_newerXY_base "m" "c" + test_newerXY_base "c" "a" + test_newerXY_base "c" "m" + test_newerXY_base "c" "c" + test_newerXY_base "a" "t" + test_newerXY_base "m" "t" + test_newerXY_base "c" "t" +} +run_test 56oc "check lfs find -newerXY work" + test_56p() { [ $RUNAS_ID -eq $UID ] && skip_env "RUNAS_ID = UID = $UID -- skipping" @@ -7816,8 +7881,13 @@ test_65n() { local dir3=$MOUNT/$tdir-3 mkdir $dir3 || error "mkdir $dir3 failed" - ! getfattr -n trusted.lov $dir3 &> /dev/null || - error "$dir3 shouldn't have LOV EA" + # $dir3 shouldn't have LOV EA, but "lfs getstripe -d $dir3" should show + # the root layout, which is the actual default layout that will be used + # when new files are created in $dir3. + local dir3_layout=$(get_layout_param $dir3) + local root_dir_layout=$(get_layout_param $MOUNT) + [[ "$dir3_layout" = "$root_dir_layout" ]] || + error "$dir3 should show the default layout from $MOUNT" # set OST pool on root directory local pool=$TESTNAME @@ -7839,8 +7909,14 @@ test_65n() { local dir4=$MOUNT/$tdir-4 mkdir $dir4 || error "mkdir $dir4 failed" - ! getfattr -n trusted.lov $dir4 &> /dev/null || - error "$dir4 shouldn't have LOV EA" + local dir4_layout=$(get_layout_param $dir4) + root_dir_layout=$(get_layout_param $MOUNT) + echo "$LFS getstripe -d $dir4" + $LFS getstripe -d $dir4 + echo "$LFS getstripe -d $MOUNT" + $LFS getstripe -d $MOUNT + [[ "$dir4_layout" = "$root_dir_layout" ]] || + error "$dir4 should show the default layout from $MOUNT" # new file created in $dir4 should inherit the pool from # the filesystem default @@ -7859,7 +7935,7 @@ test_65n() { local dir5=$dir4/$tdir-5 mkdir $dir5 || error "mkdir $dir5 failed" - local dir4_layout=$(get_layout_param $dir4) + dir4_layout=$(get_layout_param $dir4) local dir5_layout=$(get_layout_param $dir5) [[ "$dir4_layout" = "$dir5_layout" ]] || error "$dir5 should inherit the default layout from $dir4" @@ -8521,31 +8597,35 @@ test_80() { # bug 10718 [ $PARALLEL == "yes" ] && skip "skip parallel run" # relax strong synchronous semantics for slow backends like ZFS - local soc="obdfilter.*.sync_on_lock_cancel" - local soc_old=$(do_facet ost1 lctl get_param -n $soc | head -n1) - local hosts= - if [ "$soc_old" != "never" ] && - [ "$ost1_FSTYPE" != "ldiskfs" ]; then - hosts=$(for host in $(seq -f "ost%g" 1 $OSTCOUNT); do - facet_active_host $host; done | sort -u) - do_nodes $hosts lctl set_param $soc=never - fi + if [ "$ost1_FSTYPE" != "ldiskfs" ]; then + local soc="obdfilter.*.sync_lock_cancel" + local save=$(do_facet ost1 $LCTL get_param -n $soc | head -n1) - dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 seek=1M - sync; sleep 1; sync - local BEFORE=`date +%s` - cancel_lru_locks osc - local AFTER=`date +%s` - local DIFF=$((AFTER-BEFORE)) - if [ $DIFF -gt 1 ] ; then - error "elapsed for 1M@1T = $DIFF" - fi + # "sync_on_lock_cancel" was broken by v2_11_55_0-26-g7059644e9a + if [ -z "$save" ]; then + soc="obdfilter.*.sync_on_lock_cancel" + save=$(do_facet ost1 $LCTL get_param -n $soc | head -n1) + fi - [ -n "$hosts" ] && do_nodes $hosts lctl set_param $soc=$soc_old + if [ "$save" != "never" ]; then + local hosts=$(comma_list $(osts_nodes)) - rm -f $DIR/$tfile + do_nodes $hosts $LCTL set_param $soc=never + stack_trap "do_nodes $hosts $LCTL set_param $soc=$save" + fi + fi + + dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 seek=1M + sync; sleep 1; sync + local before=$(date +%s) + cancel_lru_locks osc + local after=$(date +%s) + local diff=$((after - before)) + [ $diff -le 1 ] || error "elapsed for 1M@1T = $diff" + + rm -f $DIR/$tfile } -run_test 80 "Page eviction is equally fast at high offsets too ====" +run_test 80 "Page eviction is equally fast at high offsets too" test_81a() { # LU-456 [ $PARALLEL == "yes" ] && skip "skip parallel run" @@ -16926,6 +17006,61 @@ test_230l() { } run_test 230l "readdir between MDTs won't crash" +test_230m() { + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" + [ $MDS1_VERSION -lt $(version_code 2.11.56) ] && + skip "Need MDS version at least 2.11.56" + + local MDTIDX=1 + local mig_dir=$DIR/$tdir/migrate_dir + local longstr="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + local shortstr="b" + local val + + echo "Creating files and dirs with xattrs" + test_mkdir $DIR/$tdir + test_mkdir -i0 -c1 $mig_dir + mkdir $mig_dir/dir + setfattr -n user.attr1 -v $longstr $mig_dir/dir || + error "cannot set xattr attr1 on dir" + setfattr -n user.attr2 -v $shortstr $mig_dir/dir || + error "cannot set xattr attr2 on dir" + touch $mig_dir/dir/f0 + setfattr -n user.attr1 -v $longstr $mig_dir/dir/f0 || + error "cannot set xattr attr1 on file" + setfattr -n user.attr2 -v $shortstr $mig_dir/dir/f0 || + error "cannot set xattr attr2 on file" + sync ; sync ; echo 3 > /proc/sys/vm/drop_caches + val=$(getfattr --only-values -n user.attr1 $mig_dir/dir 2>/dev/null) + [ "$val" = $longstr ] || error "xattr attr1 not set properly on dir" + val=$(getfattr --only-values -n user.attr2 $mig_dir/dir 2>/dev/null) + [ "$val" = $shortstr ] || error "xattr attr2 not set properly on dir" + val=$(getfattr --only-values -n user.attr1 $mig_dir/dir/f0 2>/dev/null) + [ "$val" = $longstr ] || error "xattr attr1 not set properly on file" + val=$(getfattr --only-values -n user.attr2 $mig_dir/dir/f0 2>/dev/null) + [ "$val" = $shortstr ] || error "xattr attr2 not set properly on file" + + echo "Migrating to MDT1" + $LFS migrate -m $MDTIDX $mig_dir || + error "fails on migrating dir to MDT1" + + sync ; sync ; echo 3 > /proc/sys/vm/drop_caches + echo "Checking xattrs" + val=$(getfattr --only-values -n user.attr1 $mig_dir/dir 2>/dev/null) + [ "$val" = $longstr ] || + error "expecting xattr1 $longstr on dir, found $val" + val=$(getfattr --only-values -n user.attr2 $mig_dir/dir 2>/dev/null) + [ "$val" = $shortstr ] || + error "expecting xattr2 $shortstr on dir, found $val" + val=$(getfattr --only-values -n user.attr1 $mig_dir/dir/f0 2>/dev/null) + [ "$val" = $longstr ] || + error "expecting xattr1 $longstr on file, found $val" + val=$(getfattr --only-values -n user.attr2 $mig_dir/dir/f0 2>/dev/null) + [ "$val" = $shortstr ] || + error "expecting xattr2 $shortstr on file, found $val" +} +run_test 230m "xattrs not changed after dir migration" + test_231a() { # For simplicity this test assumes that max_pages_per_rpc @@ -17330,21 +17465,6 @@ test_245() { } run_test 245 "check mdc connection flag/data: multiple modify RPCs" -test_246() { # LU-7371 - remote_ost_nodsh && skip "remote OST with nodsh" - [ $OST1_VERSION -lt $(version_code 2.7.62) ] && - skip "Need OST version >= 2.7.62" - - do_facet ost1 $LCTL set_param fail_val=4095 -#define OBD_FAIL_OST_READ_SIZE 0x234 - do_facet ost1 $LCTL set_param fail_loc=0x234 - $LFS setstripe $DIR/$tfile -i 0 -c 1 - dd if=/dev/zero of=$DIR/$tfile bs=4095 count=1 > /dev/null 2>&1 - cancel_lru_locks $FSNAME-OST0000 - dd if=$DIR/$tfile of=/dev/null bs=1048576 || error "Read failed" -} -run_test 246 "Read file of size 4095 should return right length" - cleanup_247() { local submount=$1 @@ -17437,7 +17557,7 @@ test_247e() { } run_test 247e "mount .. as fileset" -test_248() { +test_248a() { local fast_read_sav=$($LCTL get_param -n llite.*.fast_read 2>/dev/null) [ -z "$fast_read_sav" ] && skip "no fast read support" @@ -17488,7 +17608,89 @@ test_248() { $LCTL set_param -n llite.*.fast_read=$fast_read_sav rm -f $DIR/$tfile } -run_test 248 "fast read verification" +run_test 248a "fast read verification" + +test_248b() { + # Default short_io_bytes=16384, try both smaller and larger sizes. + # Lustre O_DIRECT read and write needs to be a multiple of PAGE_SIZE. + # 6017024 = 2^12*13*113 = 47008*128 = 11752*512 = 4096*1469 = 53248*113 + echo "bs=53248 count=113 normal buffered write" + dd if=/dev/urandom of=$TMP/$tfile.0 bs=53248 count=113 || + error "dd of initial data file failed" + stack_trap "rm -f $DIR/$tfile.[0-3] $TMP/$tfile.[0-3]" EXIT + + echo "bs=47008 count=128 oflag=dsync normal write $tfile.0" + dd if=$TMP/$tfile.0 of=$DIR/$tfile.0 bs=47008 count=128 oflag=dsync || + error "dd with sync normal writes failed" + cmp $TMP/$tfile.0 $DIR/$tfile.0 || error "compare $DIR/$tfile.0 failed" + + echo "bs=11752 count=512 oflag=dsync small write $tfile.1" + dd if=$TMP/$tfile.0 of=$DIR/$tfile.1 bs=11752 count=512 oflag=dsync || + error "dd with sync small writes failed" + cmp $TMP/$tfile.0 $DIR/$tfile.1 || error "compare $DIR/$tfile.1 failed" + + cancel_lru_locks osc + + # calculate the small O_DIRECT size and count for the client PAGE_SIZE + local num=$((13 * 113 / (PAGE_SIZE / 4096))) + echo "bs=$PAGE_SIZE count=$num iflag=direct small read $tfile.1" + dd if=$DIR/$tfile.1 of=$TMP/$tfile.1 bs=$PAGE_SIZE count=$num \ + iflag=direct || error "dd with O_DIRECT small read failed" + # adjust bytes checked to handle larger PAGE_SIZE for ARM/PPC + cmp --bytes=$((PAGE_SIZE * num)) $TMP/$tfile.0 $TMP/$tfile.1 || + error "compare $TMP/$tfile.1 failed" + + local save=$($LCTL get_param -n osc.*OST000*.short_io_bytes | head -n 1) + stack_trap "$LCTL set_param osc.$FSNAME-*.short_io_bytes=$save" EXIT + + # just to see what the maximum tunable value is, and test parsing + echo "test invalid parameter 2MB" + $LCTL set_param osc.$FSNAME-OST0000*.short_io_bytes=2M && + error "too-large short_io_bytes allowed" + echo "test maximum parameter 512KB" + # if we can set a larger short_io_bytes, run test regardless of version + if ! $LCTL set_param osc.$FSNAME-OST0000*.short_io_bytes=512K; then + # older clients may not allow setting it this large, that's OK + [ $CLIENT_VERSION -ge $(version_code 2.13.50) ] || + skip "Need at least client version 2.13.50" + error "medium short_io_bytes failed" + fi + $LCTL get_param osc.$FSNAME-OST0000*.short_io_bytes + size=$($LCTL get_param -n osc.$FSNAME-OST0000*.short_io_bytes) + + echo "test large parameter 64KB" + $LCTL set_param osc.$FSNAME-*.short_io_bytes=65536 + $LCTL get_param osc.$FSNAME-OST0000*.short_io_bytes + + echo "bs=47008 count=128 oflag=dsync large write $tfile.2" + dd if=$TMP/$tfile.0 of=$DIR/$tfile.2 bs=47008 count=128 oflag=dsync || + error "dd with sync large writes failed" + cmp $TMP/$tfile.0 $DIR/$tfile.2 || error "compare $DIR/$tfile.2 failed" + + # calculate the large O_DIRECT size and count for the client PAGE_SIZE + local size=$(((4096 * 13 + PAGE_SIZE - 1) / PAGE_SIZE * PAGE_SIZE)) + num=$((113 * 4096 / PAGE_SIZE)) + echo "bs=$size count=$num oflag=direct large write $tfile.3" + dd if=$TMP/$tfile.0 of=$DIR/$tfile.3 bs=$size count=$num oflag=direct || + error "dd with O_DIRECT large writes failed" + cmp --bytes=$((size * num)) $TMP/$tfile.0 $DIR/$tfile.3 || + error "compare $DIR/$tfile.3 failed" + + cancel_lru_locks osc + + echo "bs=$size count=$num iflag=direct large read $tfile.2" + dd if=$DIR/$tfile.2 of=$TMP/$tfile.2 bs=$size count=$num iflag=direct || + error "dd with O_DIRECT large read failed" + cmp --bytes=$((size * num)) $TMP/$tfile.0 $TMP/$tfile.2 || + error "compare $TMP/$tfile.2 failed" + + echo "bs=$size count=$num iflag=direct large read $tfile.3" + dd if=$DIR/$tfile.3 of=$TMP/$tfile.3 bs=$size count=$num iflag=direct || + error "dd with O_DIRECT large read failed" + cmp --bytes=$((size * num)) $TMP/$tfile.0 $TMP/$tfile.3 || + error "compare $TMP/$tfile.3 failed" +} +run_test 248b "test short_io read and write for both small and large sizes" test_249() { # LU-7890 [ $MDS1_VERSION -lt $(version_code 2.8.53) ] && @@ -19576,8 +19778,9 @@ test_300k() { # this test needs a huge transaction local kb - kb=$(do_facet $SINGLEMDS lctl get_param -n osd*.lustre-MDT0000.kbytestotal) - [ $kb -lt $((1024*1024)) ] && skip "too small mds: $kb" + kb=$(do_facet $SINGLEMDS "$LCTL get_param -n \ + osd*.$FSNAME-MDT0000.kbytestotal") + [ $kb -lt $((1024*1024)) ] && skip "MDT0 too small: $kb" local stripe_count local file @@ -20259,7 +20462,7 @@ test_fake_rw() { $LFS setstripe -c 1 -i 0 $DIR/$tfile - # get ost1 size - lustre-OST0000 + # get ost1 size - $FSNAME-OST0000 local ost1_avail_size=$($LFS df | awk /${ost1_svc}/'{ print $4 }') local blocks=$((ost1_avail_size/2/1024)) # half avail space by megabytes [ $blocks -gt 1000 ] && blocks=1000 # 1G in maximum @@ -20801,13 +21004,13 @@ test_qos_mkdir() { lmv.*.qos_maxage=$lmv_qos_maxage > /dev/null" EXIT lod_qos_prio_free=$(do_facet mds1 $LCTL get_param -n \ - lod.lustre-MDT0000-mdtlov.mdt_qos_prio_free | head -n1) + lod.$FSNAME-MDT0000-mdtlov.mdt_qos_prio_free | head -n1) lod_qos_prio_free=${lod_qos_prio_free%%%} lod_qos_threshold_rr=$(do_facet mds1 $LCTL get_param -n \ - lod.lustre-MDT0000-mdtlov.mdt_qos_threshold_rr | head -n1) + lod.$FSNAME-MDT0000-mdtlov.mdt_qos_threshold_rr | head -n1) lod_qos_threshold_rr=${lod_qos_threshold_rr%%%} lod_qos_maxage=$(do_facet mds1 $LCTL get_param -n \ - lod.lustre-MDT0000-mdtlov.qos_maxage | awk '{ print $1 }') + lod.$FSNAME-MDT0000-mdtlov.qos_maxage | awk '{ print $1 }') stack_trap "do_nodes $mdts $LCTL set_param \ lod.*.mdt_qos_prio_free=$lod_qos_prio_free > /dev/null" EXIT stack_trap "do_nodes $mdts $LCTL set_param \ @@ -21979,7 +22182,7 @@ test_805() { local usedkb local old local quota - local pref="osd-zfs.lustre-MDT0000." + local pref="osd-zfs.$FSNAME-MDT0000." # limit available space on MDS dataset to meet nospace issue # quickly. then ZFS 0.7.2 can use reserved space if asked @@ -22287,7 +22490,7 @@ test_811() { } run_test 811 "orphan name stub can be cleaned up in startup" -test_812() { +test_812a() { [ $OST1_VERSION -lt $(version_code 2.12.51) ] && skip "OST < 2.12.51 doesn't support this fail_loc" [ "$SHARED_KEY" = true ] && @@ -22308,7 +22511,31 @@ test_812() { stat $DIR/$tfile >/dev/null || error "can't stat file" } -run_test 812 "do not drop reqs generated when imp is going to idle (LU-11951)" +run_test 812a "do not drop reqs generated when imp is going to idle (LU-11951)" + +test_812b() { # LU-12378 + [ $OST1_VERSION -lt $(version_code 2.12.51) ] && + skip "OST < 2.12.51 doesn't support this fail_loc" + [ "$SHARED_KEY" = true ] && + skip "OSC connections never go IDLE with Shared-Keys enabled" + + $LFS setstripe -c 1 -i 0 $DIR/$tfile || error "setstripe failed" + # ensure ost1 is connected + stat $DIR/$tfile >/dev/null || error "can't stat" + wait_osc_import_state client ost1 FULL + # no locks, no reqs to let the connection idle + cancel_lru_locks osc + + # delay OST_DISCONNECT on OST1 to put OSC into intermediate state +#define OBD_FAIL_OST_DISCONNECT_DELAY 0x245 + do_facet ost1 "$LCTL set_param fail_loc=0x245 fail_val=8" + wait_osc_import_state client ost1 CONNECTING + do_facet ost1 "$LCTL set_param fail_loc=0 fail_val=0" + + $LFS quota -u 0 $DIR/ || error "lfs quota should succeed" + wait_osc_import_state client ost1 IDLE +} +run_test 812b "do not drop no resend request for idle connect" test_813() { local file_heat_sav=$($LCTL get_param -n llite.*.file_heat 2>/dev/null) @@ -22596,6 +22823,31 @@ test_900() { } run_test 900 "umount should not race with any mgc requeue thread" +# LUS-6253/LU-11185 +test_901() { + local oldc + local newc + local olds + local news + [ $PARALLEL == "yes" ] && skip "skip parallel run" + + # some get_param have a bug to handle dot in param name + cancel_lru_locks MGC + oldc=$($LCTL get_param -n 'ldlm.namespaces.MGC*.lock_count') + olds=$(do_facet mgs $LCTL get_param -n 'ldlm.namespaces.MGS*.lock_count') + umount_client $MOUNT || error "umount failed" + mount_client $MOUNT || error "mount failed" + cancel_lru_locks MGC + newc=$($LCTL get_param -n 'ldlm.namespaces.MGC*.lock_count') + news=$(do_facet mgs $LCTL get_param -n 'ldlm.namespaces.MGS*.lock_count') + + [ $oldc -lt $newc ] && error "mgc lock leak ($oldc != $newc)" + [ $olds -lt $news ] && error "mgs lock leak ($olds != $news)" + + return 0 +} +run_test 901 "don't leak a mgc lock on client umount" + complete $SECONDS [ -f $EXT2_DEV ] && rm $EXT2_DEV || true check_and_cleanup_lustre