X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Fsanity.sh;h=127a3967335dc105ad744aa24e0b71f0eb1f7b7e;hp=4212768429fcbd1671962262dbdd0b5efb3edee6;hb=94b0568059ec9825ee96de89dab8f156703e222c;hpb=c03c500529b0b6e0310c95132d5e8b40912ede8e diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 4212768..127a396 100755 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -44,11 +44,6 @@ ALWAYS_EXCEPT+=" 42a 42b 42c " # bug number: LU-8411 LU-9054 ALWAYS_EXCEPT+=" 407 312" -if $SHARED_KEY; then - # bug number: LU-9795 LU-9795 LU-9795 LU-9795 - ALWAYS_EXCEPT+=" 17n 60a 133g 300f" -fi - selinux_status=$(getenforce) if [ "$selinux_status" != "Disabled" ]; then # bug number: @@ -61,8 +56,15 @@ if [[ $(uname -m) = aarch64 ]]; then ALWAYS_EXCEPT+=" $GRANT_CHECK_LIST" # bug number: LU-11671 LU-11667 ALWAYS_EXCEPT+=" 45 317" + # bug number: LU-14067 LU-14067 + ALWAYS_EXCEPT+=" 400a 400b" fi +# skip splice tests on kernels >= 4.15.0 until they are fixed +if [ $LINUX_VERSION_CODE -ge $(version_code 4.15.0) ]; then + # bug number: LU-14045 + ALWAYS_EXCEPT+=" 426" +fi # skip nfs tests on kernels >= 4.12.0 until they are fixed if [ $LINUX_VERSION_CODE -ge $(version_code 4.12.0) ]; then # bug number: LU-12661 @@ -1443,6 +1445,23 @@ test_24F () { } run_test 24F "hash order vs readdir (LU-11330)" +test_24G () { + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" + + local ino1 + local ino2 + + $LFS mkdir -i 0 $DIR/$tdir-0 || error "mkdir $tdir-0" + $LFS mkdir -i 1 $DIR/$tdir-1 || error "mkdir $tdir-1" + touch $DIR/$tdir-0/f1 || error "touch f1" + ln -s $DIR/$tdir-0/f1 $DIR/$tdir-0/s1 || error "ln s1" + ino1=$(stat -c%i $DIR/$tdir-0/s1) + mv $DIR/$tdir-0/s1 $DIR/$tdir-1 || error "mv s1" + ino2=$(stat -c%i $DIR/$tdir-1/s1) + [ $ino1 -ne $ino2 ] || error "s1 should be migrated" +} +run_test 24G "migrate symlink in rename" + test_25a() { echo '== symlink sanity =============================================' @@ -5963,6 +5982,8 @@ test_newerXY_base() { ref=$DIR/$tfile.newer.$x$y touch $ref || error "touch $ref failed" fi + + echo "before = $ref" sleep 2 setup_56 $dir $NUMFILES $NUMDIRS "-i0 -c1" "-i0 -c1" sleep 2 @@ -5977,28 +5998,28 @@ test_newerXY_base() { touch $negref || error "touch $negref failed" fi + echo "after = $negref" 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" + [ $nums -eq $expected ] || { ls -lauR --full-time $dir ; + error "'$cmd' wrong: found $nums newer, 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" + [ $nums -eq $expected ] || { ls -lauR --full-time $dir ; + error "'$cmd' wrong: found $nums older, 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" + [ $nums -eq $expected ] || { ls -lauR --full-time $dir ; + error "'$cmd' wrong: found $nums between, expected $expected"; } rm -rf $DIR/* } test_56oc() { - test_newerXY_base "b" "t" test_newerXY_base "a" "a" test_newerXY_base "a" "m" test_newerXY_base "a" "c" @@ -6008,10 +6029,19 @@ test_56oc() { test_newerXY_base "c" "a" test_newerXY_base "c" "m" test_newerXY_base "c" "c" - test_newerXY_base "b" "b" + + [[ -n "$sles_version" ]] && + echo "skip timestamp tests on SLES, LU-13665" && return 0 + test_newerXY_base "a" "t" test_newerXY_base "m" "t" test_newerXY_base "c" "t" + + [[ $MDS1_VERSION -lt $(version_code 2.13.54) || + $CLIENT_VERSION -lt $(version_code 2.13.54) ]] && + ! btime_supported && echo "btime unsupported" && return 0 + + test_newerXY_base "b" "b" test_newerXY_base "b" "t" } run_test 56oc "check lfs find -newerXY work" @@ -8642,7 +8672,7 @@ num_objects() { awk '/lustre_inode_cache/ { print $2; exit }' /proc/slabinfo } -test_76() { # Now for b=20433, added originally in b=1443 +test_76a() { # Now for b=20433, added originally in b=1443 [ $PARALLEL == "yes" ] && skip "skip parallel run" cancel_lru_locks osc @@ -8677,8 +8707,36 @@ test_76() { # Now for b=20433, added originally in b=1443 fi done } -run_test 76 "confirm clients recycle inodes properly ====" +run_test 76a "confirm clients recycle inodes properly ====" + +test_76b() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" + [ $CLIENT_VERSION -ge $(version_code 2.13.55) ] || skip "not supported" + local count=512 + local before=$(num_objects) + + for i in $(seq $count); do + mkdir $DIR/$tdir + rmdir $DIR/$tdir + done + + local after=$(num_objects) + local wait=0 + + while (( after > before )); do + sleep 1 + after=$(num_objects) + wait=$((wait + 1)) + (( wait % 5 == 0 )) && echo "wait $wait seconds objects: $after" + if (( wait > 60 )); then + error "inode slab grew from $before to $after" + fi + done + + echo "slab objects before: $before, after: $after" +} +run_test 76b "confirm clients recycle directory inodes properly ====" export ORIG_CSUM="" set_checksums() @@ -13380,6 +13438,51 @@ test_150d() { } run_test 150d "Verify fallocate Size and Blocks - Non zero start" +test_150e() { + [ "$ost1_FSTYPE" != ldiskfs ] && skip "non-ldiskfs backend" + [ $OST1_VERSION -ge $(version_code 2.13.55) ] || + skip "Need OST version at least 2.13.55" + + echo "df before:" + $LFS df + $LFS setstripe -c${OSTCOUNT} $DIR/$tfile || + error "$LFS setstripe -c${OSTCOUNT} $DIR/$tfile failed" + + # Find OST with Minimum Size + min_size_ost=$($LFS df | awk "/$FSNAME-OST/ { print \$4 }" | + sort -un | head -1) + + # Get 90% of the available space + local space=$(((min_size_ost * 90)/100 * OSTCOUNT)) + + fallocate -l${space}k $DIR/$tfile || + error "fallocate ${space}k $DIR/$tfile failed" + echo "'fallocate -l ${space}k $DIR/$tfile' succeeded" + + # get size immediately after fallocate. This should be correctly + # updated + local size=$(stat -c '%s' $DIR/$tfile) + local used=$(( $(stat -c '%b * %B' $DIR/$tfile) / 1024)) + + # Sleep for a while for statfs to get updated. And not pull from cache. + sleep 2 + + echo "df after fallocate:" + $LFS df + + (( size / 1024 == space )) || error "size $size != requested $space" + [ "$ost1_FSTYPE" != ldiskfs ] || (( used >= space )) || + error "used $used < space $space" + + rm $DIR/$tfile || error "rm failed" + sync + wait_delete_completed + + echo "df after unlink:" + $LFS df +} +run_test 150e "Verify 90% of available OST space consumed by fallocate" + #LU-2902 roc_hit was not able to read all values from lproc function roc_hit_init() { local list=$(comma_list $(osts_nodes)) @@ -15453,6 +15556,9 @@ test_165a() { local rc local count + (( $OST1_VERSION >= $(version_code 2.13.54) )) || + skip "OFD access log unsupported" + do_facet ost1 ofd_access_log_reader --debug=- --trace=- > "${trace}" & setup_165 sleep 5 @@ -15486,10 +15592,14 @@ test_165b() { local size local flags + (( $OST1_VERSION >= $(version_code 2.13.54) )) || + skip "OFD access log unsupported" + setup_165 lfs setstripe -c 1 -i 0 "${file}" - $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_WRONLY:w1048576c || error "cannot create '${file}'" + $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_WRONLY:w1048576c || + error "cannot create '${file}'" do_facet ost1 ofd_access_log_reader --list do_facet ost1 ofd_access_log_reader --debug=- --trace=- > "${trace}" & @@ -15528,7 +15638,8 @@ test_165b() { fi do_facet ost1 ofd_access_log_reader --debug=- --trace=- > "${trace}" & - $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_RDONLY:r524288c || error "cannot read '${file}'" + $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_RDONLY:r524288c || + error "cannot read '${file}'" sleep 5 do_facet ost1 killall -TERM ofd_access_log_reader wait @@ -15562,6 +15673,10 @@ run_test 165b "ofd access log entries are produced and consumed" test_165c() { local file="${DIR}/${tdir}/${tfile}" + + (( $OST1_VERSION >= $(version_code 2.13.54) )) || + skip "OFD access log unsupported" + test_mkdir "${DIR}/${tdir}" setup_165 @@ -15570,7 +15685,8 @@ test_165c() { # 4096 / 64 = 64. Create twice as many entries. for ((i = 0; i < 128; i++)); do - $MULTIOP "${file}-${i}" oO_CREAT:O_WRONLY:w512c || error "cannot create file" + $MULTIOP "${file}-${i}" oO_CREAT:O_WRONLY:w512c || + error "cannot create file" done sync @@ -15580,7 +15696,8 @@ test_165c() { run_test 165c "full ofd access logs do not block IOs" oal_peek_entry_count() { - do_facet ost1 ofd_access_log_reader --list | awk '$1 == "_entry_count:" { print $2; }' + do_facet ost1 ofd_access_log_reader --list | + awk '$1 == "_entry_count:" { print $2; }' } oal_expect_entry_count() { @@ -15601,37 +15718,49 @@ test_165d() { local file="${DIR}/${tdir}/${tfile}" local param="obdfilter.${FSNAME}-OST0000.access_log_mask" local entry_count + + (( $OST1_VERSION >= $(version_code 2.13.54) )) || + skip "OFD access log unsupported" + test_mkdir "${DIR}/${tdir}" setup_165 lfs setstripe -c 1 -i 0 "${file}" do_facet ost1 lctl set_param "${param}=rw" - $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_WRONLY:w1048576c || error "cannot create '${file}'" + $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_WRONLY:w1048576c || + error "cannot create '${file}'" oal_expect_entry_count 1 - $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_RDONLY:r1048576c || error "cannot read '${file}'" + $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_RDONLY:r1048576c || + error "cannot read '${file}'" oal_expect_entry_count 2 do_facet ost1 lctl set_param "${param}=r" - $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_WRONLY:w1048576c || error "cannot create '${file}'" + $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_WRONLY:w1048576c || + error "cannot create '${file}'" oal_expect_entry_count 2 - $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_RDONLY:r1048576c || error "cannot read '${file}'" + $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_RDONLY:r1048576c || + error "cannot read '${file}'" oal_expect_entry_count 3 do_facet ost1 lctl set_param "${param}=w" - $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_WRONLY:w1048576c || error "cannot create '${file}'" + $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_WRONLY:w1048576c || + error "cannot create '${file}'" oal_expect_entry_count 4 - $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_RDONLY:r1048576c || error "cannot read '${file}'" + $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_RDONLY:r1048576c || + error "cannot read '${file}'" oal_expect_entry_count 4 do_facet ost1 lctl set_param "${param}=0" - $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_WRONLY:w1048576c || error "cannot create '${file}'" + $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_WRONLY:w1048576c || + error "cannot create '${file}'" oal_expect_entry_count 4 - $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_RDONLY:r1048576c || error "cannot read '${file}'" + $MULTIOP "${file}" oO_CREAT:O_DIRECT:O_RDONLY:r1048576c || + error "cannot read '${file}'" oal_expect_entry_count 4 } run_test 165d "ofd_access_log mask works" @@ -15639,11 +15768,13 @@ run_test 165d "ofd_access_log mask works" test_169() { # do directio so as not to populate the page cache log "creating a 10 Mb file" - $MULTIOP $DIR/$tfile oO_CREAT:O_DIRECT:O_RDWR:w$((10*1048576))c || error "multiop failed while creating a file" + $MULTIOP $DIR/$tfile oO_CREAT:O_DIRECT:O_RDWR:w$((10*1048576))c || + error "multiop failed while creating a file" log "starting reads" dd if=$DIR/$tfile of=/dev/null bs=4096 & log "truncating the file" - $MULTIOP $DIR/$tfile oO_TRUNC:c || error "multiop failed while truncating the file" + $MULTIOP $DIR/$tfile oO_TRUNC:c || + error "multiop failed while truncating the file" log "killing dd" kill %+ || true # reads might have finished echo "wait until dd is finished" @@ -18318,6 +18449,9 @@ test_230q() { local stripe_index local nr_files + # test with fewer files on ZFS + [ "$mds1_FSTYPE" == "zfs" ] && threshold=40 + stack_trap "do_nodes $mdts $LCTL set_param \ mdt.*.dir_split_count=$saved_threshold" stack_trap "do_nodes $mdts $LCTL set_param \ @@ -23449,6 +23583,14 @@ test_425() { } run_test 425 "lock count should not exceed lru size" +test_426() { + splice-test -r $DIR/$tfile + splice-test -rd $DIR/$tfile + splice-test $DIR/$tfile + splice-test -d $DIR/$tfile +} +run_test 426 "splice test on Lustre" + prep_801() { [[ $MDS1_VERSION -lt $(version_code 2.9.55) ]] || [[ $OST1_VERSION -lt $(version_code 2.9.55) ]] && @@ -23757,7 +23899,7 @@ test_802b() { } run_test 802b "be able to set MDTs to readonly" -test_803() { +test_803a() { [[ $MDSCOUNT -lt 2 ]] && skip_env "needs >= 2 MDTs" [ $MDS1_VERSION -lt $(version_code 2.10.54) ] && skip "MDS needs to be newer than 2.10.54" @@ -23805,7 +23947,39 @@ test_803() { [ $after_used -le $((before_used + 1)) ] || error "after ($after_used) > before ($before_used) + 1" } -run_test 803 "verify agent object for remote object" +run_test 803a "verify agent object for remote object" + +test_803b() { + [[ $MDSCOUNT -lt 2 ]] && skip_env "needs >= 2 MDTs" + [ $MDS1_VERSION -lt $(version_code 2.13.56) ] && + skip "MDS needs to be newer than 2.13.56" + [ $PARALLEL == "yes" ] && skip "skip parallel run" + + for i in $(seq 0 $((MDSCOUNT - 1))); do + $LFS mkdir -i $i $DIR/$tdir.$i || error "mkdir $tdir.$i" + done + + local before=0 + local after=0 + + local tmp + + stat $DIR/$tdir.* >/dev/null || error "stat $tdir.*" + for i in $(seq 0 $((MDSCOUNT - 1))); do + tmp=$(do_facet mds$i $LCTL get_param mdt.*-MDT000$i.md_stats | + awk '/getattr/ { print $2 }') + before=$((before + tmp)) + done + stat $DIR/$tdir.* >/dev/null || error "stat $tdir.*" + for i in $(seq 0 $((MDSCOUNT - 1))); do + tmp=$(do_facet mds$i $LCTL get_param mdt.*-MDT000$i.md_stats | + awk '/getattr/ { print $2 }') + after=$((after + tmp)) + done + + [ $before -eq $after ] || error "getattr count $before != $after" +} +run_test 803b "remote object can getattr from cache" test_804() { [[ $MDSCOUNT -lt 2 ]] && skip_env "needs >= 2 MDTs" @@ -24204,8 +24378,6 @@ run_test 810 "partial page writes on ZFS (LU-11663)" test_812a() { [ $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 # ensure ost1 is connected @@ -24227,8 +24399,6 @@ 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 @@ -24436,9 +24606,6 @@ test_815() run_test 815 "zero byte tiny write doesn't hang (LU-12382)" test_816() { - [ "$SHARED_KEY" = true ] && - skip "OSC connections never go IDLE with Shared-Keys enabled" - $LFS setstripe -c 1 -i 0 $DIR/$tfile # ensure ost1 is connected stat $DIR/$tfile >/dev/null || error "can't stat"