X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Fsanity.sh;h=b8ca0801fb8abf30c9f166d45473fc8c2ec4322b;hp=36ae7220c4b77905667490674e3c0be3efcd9769;hb=97a10cf9797bbed02fb131f6a205b6a0ceeb0525;hpb=d31a4dad4e698c537dff3d018fd67f196b2b293f diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 36ae722..b8ca080 100644 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -53,16 +53,16 @@ fi if [[ $(uname -m) = aarch64 ]]; then # bug number: LU-11596 ALWAYS_EXCEPT+=" $GRANT_CHECK_LIST" - # bug number: LU-11671 LU-11667 LU-11729 LU-4398 - ALWAYS_EXCEPT+=" 45 317 810 817" + # bug number: LU-11671 LU-11667 LU-4398 + ALWAYS_EXCEPT+=" 45 317 817" fi # 5 12 (min)" [ "$SLOW" = "no" ] && EXCEPT_SLOW="27m 64b 68 71 115 300o" if [ "$mds1_FSTYPE" = "zfs" ]; then - # bug number for skipped test: LU-1957 - ALWAYS_EXCEPT="$ALWAYS_EXCEPT 180" + # bug number for skipped test: + ALWAYS_EXCEPT="$ALWAYS_EXCEPT " # 13 (min)" [ "$SLOW" = "no" ] && EXCEPT_SLOW="$EXCEPT_SLOW 51b" fi @@ -2458,10 +2458,6 @@ test_27D() { local ost_list=$(seq $first_ost $ost_step $last_ost) local ost_range="$first_ost $last_ost $ost_step" - if ! combined_mgs_mds ; then - mount_mgs_client - fi - test_mkdir $DIR/$tdir pool_add $POOL || error "pool_add failed" pool_add_targets $POOL $ost_range || error "pool_add_targets failed" @@ -2481,10 +2477,6 @@ test_27D() { error "llapi_layout_test failed" destroy_test_pools || error "destroy test pools failed" - - if ! combined_mgs_mds ; then - umount_mgs_client - fi } run_test 27D "validate llapi_layout API" @@ -2815,11 +2807,6 @@ test_27L() { local POOL=${POOL:-$TESTNAME} - if ! combined_mgs_mds ; then - mount_mgs_client - trap umount_mgs_client EXIT - fi - pool_add $POOL || error "pool_add failed" lfs pool_list $MOUNT | grep -Fx "${FSNAME}.${POOL}" || @@ -2828,6 +2815,152 @@ test_27L() { } run_test 27L "lfs pool_list gives correct pool name" +test_27M() { + [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.12.57) ]] && + skip "Need MDS version >= than 2.12.57" + remote_mds_nodsh && skip "remote MDS with nodsh" + [[ $OSTCOUNT -lt 2 ]] && skip_env "need > 1 OST" + + test_mkdir $DIR/$tdir + + # Set default striping on directory + $LFS setstripe -C 4 $DIR/$tdir + + echo 1 > $DIR/$tdir/${tfile}.1 + local count=$($LFS getstripe -c $DIR/$tdir/${tfile}.1) + local setcount=4 + [ $count -eq $setcount ] || + error "(1) stripe count $count, should be $setcount" + + # Capture existing append_stripe_count setting for restore + local orig_count=$(do_facet mds1 $LCTL get_param -n mdd.$FSNAME-MDT0000.append_stripe_count) + local mdts=$(comma_list $(mdts_nodes)) + stack_trap "do_nodes $mdts $LCTL set_param mdd.*.append_stripe_count=$orig_count" EXIT + + local appendcount=$orig_count + echo 1 >> $DIR/$tdir/${tfile}.2_append + count=$($LFS getstripe -c $DIR/$tdir/${tfile}.2_append) + [ $count -eq $appendcount ] || + error "(2)stripe count $count, should be $appendcount for append" + + # Disable O_APPEND striping, verify it works + do_nodes $mdts $LCTL set_param mdd.*.append_stripe_count=0 + + # Should now get the default striping, which is 4 + setcount=4 + echo 1 >> $DIR/$tdir/${tfile}.3_append + count=$($LFS getstripe -c $DIR/$tdir/${tfile}.3_append) + [ $count -eq $setcount ] || + error "(3) stripe count $count, should be $setcount" + + # Try changing the stripe count for append files + do_nodes $mdts $LCTL set_param mdd.*.append_stripe_count=2 + + # Append striping is now 2 (directory default is still 4) + appendcount=2 + echo 1 >> $DIR/$tdir/${tfile}.4_append + count=$($LFS getstripe -c $DIR/$tdir/${tfile}.4_append) + [ $count -eq $appendcount ] || + error "(4) stripe count $count, should be $appendcount for append" + + # Test append stripe count of -1 + do_nodes $mdts $LCTL set_param mdd.*.append_stripe_count=-1 + appendcount=$OSTCOUNT + echo 1 >> $DIR/$tdir/${tfile}.5 + count=$($LFS getstripe -c $DIR/$tdir/${tfile}.5) + [ $count -eq $appendcount ] || + error "(5) stripe count $count, should be $appendcount for append" + + # Set append striping back to default of 1 + do_nodes $mdts $LCTL set_param mdd.*.append_stripe_count=1 + + # Try a new default striping, PFL + DOM + $LFS setstripe -L mdt -E 1M -E -1 -c 2 $DIR/$tdir + + # Create normal DOM file, DOM returns stripe count == 0 + setcount=0 + touch $DIR/$tdir/${tfile}.6 + count=$($LFS getstripe -c $DIR/$tdir/${tfile}.6) + [ $count -eq $setcount ] || + error "(6) stripe count $count, should be $setcount" + + # Show + appendcount=1 + echo 1 >> $DIR/$tdir/${tfile}.7_append + count=$($LFS getstripe -c $DIR/$tdir/${tfile}.7_append) + [ $count -eq $appendcount ] || + error "(7) stripe count $count, should be $appendcount for append" + + # Clean up DOM layout + $LFS setstripe -d $DIR/$tdir + + # Now test that append striping works when layout is from root + $LFS setstripe -c 2 $MOUNT + # Make a special directory for this + mkdir $DIR/${tdir}/${tdir}.2 + stack_trap "$LFS setstripe -d $MOUNT" EXIT + + # Verify for normal file + setcount=2 + echo 1 > $DIR/${tdir}/${tdir}.2/${tfile}.8 + count=$($LFS getstripe -c $DIR/$tdir/${tdir}.2/${tfile}.8) + [ $count -eq $setcount ] || + error "(8) stripe count $count, should be $setcount" + + appendcount=1 + echo 1 >> $DIR/${tdir}/${tdir}.2/${tfile}.9_append + count=$($LFS getstripe -c $DIR/${tdir}/${tdir}.2/${tfile}.9_append) + [ $count -eq $appendcount ] || + error "(9) stripe count $count, should be $appendcount for append" + + # Now test O_APPEND striping with pools + do_nodes $mdts $LCTL set_param mdd.*.append_pool="$TESTNAME" + stack_trap "do_nodes $mdts $LCTL set_param mdd.*.append_pool='none'" EXIT + + # Create the pool + pool_add $TESTNAME || error "pool creation failed" + pool_add_targets $TESTNAME 0 1 || error "Pool add targets failed" + + echo 1 >> $DIR/$tdir/${tfile}.10_append + + pool=$($LFS getstripe -p $DIR/$tdir/${tfile}.10_append) + [ "$pool" = "$TESTNAME" ] || error "(10) incorrect pool: $pool" + + # Check that count is still correct + appendcount=1 + echo 1 >> $DIR/$tdir/${tfile}.11_append + count=$($LFS getstripe -c $DIR/$tdir/${tfile}.11_append) + [ $count -eq $appendcount ] || + error "(11) stripe count $count, should be $appendcount for append" + + # Disable O_APPEND stripe count, verify pool works separately + do_nodes $mdts $LCTL set_param mdd.*.append_stripe_count=0 + + echo 1 >> $DIR/$tdir/${tfile}.12_append + + pool=$($LFS getstripe -p $DIR/$tdir/${tfile}.12_append) + [ "$pool" = "$TESTNAME" ] || error "(12) incorrect pool: $pool" + + # Remove pool setting, verify it's not applied + do_nodes $mdts $LCTL set_param mdd.*.append_pool='none' + + echo 1 >> $DIR/$tdir/${tfile}.13_append + + pool=$($LFS getstripe -p $DIR/$tdir/${tfile}.13_append) + [ "$pool" = "" ] || error "(13) pool found: $pool" +} +run_test 27M "test O_APPEND striping" + +test_27N() { + combined_mgs_mds && skip "needs separate MGS/MDT" + + pool_add $TESTNAME || error "pool_add failed" + do_facet mgs "$LCTL pool_list $FSNAME" | + grep -Fx "${FSNAME}.${TESTNAME}" || + error "lctl pool_list on MGS failed" +} +run_test 27N "lctl pool_list on separate MGS gives correct pool name" + # createtest also checks that device nodes are created and # then visible correctly (#2091) test_28() { # bug 2091 @@ -4133,7 +4266,7 @@ test_39j() { error "mtime is lost on close: $mtime2, " \ "should be $mtime1" - cancel_lru_locks $OSC + cancel_lru_locks if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi done lctl set_param fail_loc=0 @@ -4162,7 +4295,7 @@ test_39k() { [ "$mtime2" = $TEST_39_MTIME ] || \ error "mtime is lost on close: $mtime2, should be $TEST_39_MTIME" - cancel_lru_locks osc + cancel_lru_locks if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi done } @@ -5649,39 +5782,73 @@ test_56r() { setup_56 $dir $NUMFILES $NUMDIRS local expected=12 - local cmd="$LFS find -size 0 -type f $dir" + local cmd="$LFS find -size 0 -type f -lazy $dir" local nums=$($cmd | wc -l) [ $nums -eq $expected ] || error "'$cmd' wrong: found $nums, expected $expected" + cmd="$LFS find -size 0 -type f $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + expected=0 + cmd="$LFS find ! -size 0 -type f -lazy $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" cmd="$LFS find ! -size 0 -type f $dir" nums=$($cmd | wc -l) [ $nums -eq $expected ] || error "'$cmd' wrong: found $nums, expected $expected" + echo "test" > $dir/$tfile echo "test2" > $dir/$tfile.2 && sync expected=1 + cmd="$LFS find -size 5 -type f -lazy $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" cmd="$LFS find -size 5 -type f $dir" nums=$($cmd | wc -l) [ $nums -eq $expected ] || error "'$cmd' wrong: found $nums, expected $expected" + expected=1 + cmd="$LFS find -size +5 -type f -lazy $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" cmd="$LFS find -size +5 -type f $dir" nums=$($cmd | wc -l) [ $nums -eq $expected ] || error "'$cmd' wrong: found $nums, expected $expected" + expected=2 + cmd="$LFS find -size +0 -type f -lazy $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" cmd="$LFS find -size +0 -type f $dir" nums=$($cmd | wc -l) [ $nums -eq $expected ] || error "'$cmd' wrong: found $nums, expected $expected" + expected=2 + cmd="$LFS find ! -size -5 -type f -lazy $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" cmd="$LFS find ! -size -5 -type f $dir" nums=$($cmd | wc -l) [ $nums -eq $expected ] || error "'$cmd' wrong: found $nums, expected $expected" + expected=12 + cmd="$LFS find -size -5 -type f -lazy $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" cmd="$LFS find -size -5 -type f $dir" nums=$($cmd | wc -l) [ $nums -eq $expected ] || @@ -5689,6 +5856,155 @@ test_56r() { } run_test 56r "check lfs find -size works" +test_56ra() { + local dir=$DIR/$tdir + + [[ $OSC == "mdc" ]] && skip "DoM files" && return + + setup_56 $dir $NUMFILES $NUMDIRS "-c 1" + + cancel_lru_locks $OSC + + local rpcs_before=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + local expected=12 + local cmd="$LFS find -size 0 -type f -lazy $dir" + local nums=$($cmd | wc -l) + + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + + local rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + [ $rpcs_before -eq $rpcs_after ] || + error "'$cmd' should not send glimpse RPCs to OST" + cmd="$LFS find -size 0 -type f $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + echo "Before: $rpcs_before After: $rpcs_after $NUMFILES" + $LCTL get_param osc.*.stats + [ $rpcs_after -eq $((rpcs_before + 12)) ] || + error "'$cmd' should send 12 glimpse RPCs to OST" + + cancel_lru_locks $OSC + rpcs_before=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + expected=0 + cmd="$LFS find ! -size 0 -type f -lazy $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + $LCTL get_param mdc.*.stats + [ $rpcs_before -eq $rpcs_after ] || + error "'$cmd' should not send glimpse RPCs to OST" + cmd="$LFS find ! -size 0 -type f $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + echo "Before: $rpcs_before After: $rpcs_after $NUMFILES" + [ $rpcs_after -eq $((rpcs_before + 12)) ] || + error "'$cmd' should send 12 glimpse RPCs to OST" + + echo "test" > $dir/$tfile + echo "test2" > $dir/$tfile.2 && sync + cancel_lru_locks $OSC + rpcs_before=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + expected=1 + cmd="$LFS find -size 5 -type f -lazy $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + [ $rpcs_before -eq $rpcs_after ] || + error "'$cmd' should not send glimpse RPCs to OST" + cmd="$LFS find -size 5 -type f $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + echo "Before: $rpcs_before After: $rpcs_after $NUMFILES" + [ $rpcs_after -eq $((rpcs_before + 14)) ] || + error "'$cmd' should send 14 glimpse RPCs to OST" + + cancel_lru_locks $OSC + rpcs_before=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + expected=1 + cmd="$LFS find -size +5 -type f -lazy $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + [ $rpcs_before -eq $rpcs_after ] || + error "'$cmd' should not send glimpse RPCs to OST" + cmd="$LFS find -size +5 -type f $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + echo "Before: $rpcs_before After: $rpcs_after $NUMFILES" + [ $rpcs_after -eq $((rpcs_before + 14)) ] || + error "'$cmd' should send 14 glimpse RPCs to OST" + + cancel_lru_locks $OSC + rpcs_before=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + expected=2 + cmd="$LFS find -size +0 -type f -lazy $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + [ $rpcs_before -eq $rpcs_after ] || + error "'$cmd' should not send glimpse RPCs to OST" + cmd="$LFS find -size +0 -type f $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + echo "Before: $rpcs_before After: $rpcs_after $NUMFILES" + [ $rpcs_after -eq $((rpcs_before + 14)) ] || + error "'$cmd' should send 14 glimpse RPCs to OST" + + cancel_lru_locks $OSC + rpcs_before=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + expected=2 + cmd="$LFS find ! -size -5 -type f -lazy $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + [ $rpcs_before -eq $rpcs_after ] || + error "'$cmd' should not send glimpse RPCs to OST" + cmd="$LFS find ! -size -5 -type f $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + echo "Before: $rpcs_before After: $rpcs_after $NUMFILES" + [ $rpcs_after -eq $((rpcs_before + 14)) ] || + error "'$cmd' should send 14 glimpse RPCs to OST" + + cancel_lru_locks $OSC + rpcs_before=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + expected=12 + cmd="$LFS find -size -5 -type f -lazy $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + [ $rpcs_before -eq $rpcs_after ] || + error "'$cmd' should not send glimpse RPCs to OST" + cmd="$LFS find -size -5 -type f $dir" + nums=$($cmd | wc -l) + [ $nums -eq $expected ] || + error "'$cmd' wrong: found $nums, expected $expected" + rpcs_after=$(calc_stats $OSC.*$OSC*.stats ldlm_glimpse_enqueue) + echo "Before: $rpcs_before After: $rpcs_after $NUMFILES" + [ $rpcs_after -eq $((rpcs_before + 14)) ] || + error "'$cmd' should send 14 glimpse RPCs to OST" +} +run_test 56ra "check lfs find -size -lazy works for data on OSTs" + test_56s() { # LU-611 #LU-9369 [[ $OSTCOUNT -lt 2 ]] && skip_env "need at least 2 OSTs" @@ -6807,9 +7123,9 @@ test_60a() { local pass=true #get fid and record list - fid_list=($(awk '/9_sub.*record/ { print $NF }' /$TMP/$tfile | + fid_list=($(awk '/9_sub.*record/ { print $NF }' $TMP/$tfile | tail -n 4)) - rec_list=($(awk '/9_sub.*record/ { print $((NF-3)) }' /$TMP/$tfile | + rec_list=($(awk '/9_sub.*record/ { print $((NF-3)) }' $TMP/$tfile | tail -n 4)) #remount mgs as ldiskfs or zfs type stop mgs || error "stop mgs failed" @@ -6928,13 +7244,16 @@ run_test 60e "no space while new llog is being created" test_60g() { local pid + local i test_mkdir -c $MDSCOUNT $DIR/$tdir - $LFS setdirstripe -D -i -1 -c $MDSCOUNT $DIR/$tdir ( local index=0 while true; do + $LFS setdirstripe -i $(($index % $MDSCOUNT)) \ + -c $MDSCOUNT $DIR/$tdir/subdir$index \ + 2>/dev/null mkdir $DIR/$tdir/subdir$index 2>/dev/null rmdir $DIR/$tdir/subdir$index 2>/dev/null index=$((index + 1)) @@ -6943,16 +7262,34 @@ test_60g() { pid=$! - for i in $(seq 100); do + for i in {0..100}; do # define OBD_FAIL_OSD_TXN_START 0x19a - do_facet mds1 lctl set_param fail_loc=0x8000019a + local index=$((i % MDSCOUNT + 1)) + + do_facet mds$index $LCTL set_param fail_loc=0x8000019a \ + > /dev/null usleep 100 done kill -9 $pid + for i in $(seq $MDSCOUNT); do + do_facet mds$i $LCTL set_param fail_loc=0 > /dev/null + done + mkdir $DIR/$tdir/new || error "mkdir failed" rmdir $DIR/$tdir/new || error "rmdir failed" + + do_facet mds1 $LCTL lfsck_start -M $(facet_svc mds1) -A -C \ + -t namespace + for i in $(seq $MDSCOUNT); do + wait_update_facet mds$i "$LCTL get_param -n \ + mdd.$(facet_svc mds$i).lfsck_namespace | + awk '/^status/ { print \\\$2 }'" "completed" + done + + ls -R $DIR/$tdir || error "ls failed" + rm -rf $DIR/$tdir || error "rmdir failed" } run_test 60g "transaction abort won't cause MDT hung" @@ -7504,6 +7841,29 @@ test_65n() { local dir5_layout=$(get_layout_param $dir5) [[ "$dir4_layout" = "$dir5_layout" ]] || error "$dir5 should inherit the default layout from $dir4" + + # though subdir under ROOT doesn't inherit default layout, but + # its sub dir/file should be created with default layout. + [[ $MDSCOUNT -ge 2 ]] || skip_env "needs >= 2 MDTs" + [[ $MDS1_VERSION -ge $(version_code 2.12.59) ]] || + skip "Need MDS version at least 2.12.59" + + local default_lmv_count=$($LFS getdirstripe -D -c $MOUNT) + local default_lmv_index=$($LFS getdirstripe -D -i $MOUNT) + local default_lmv_hash=$($LFS getdirstripe -D -H $MOUNT) + + if [ $default_lmv_hash == "none" ]; then + stack_trap "$LFS setdirstripe -D -d $MOUNT" EXIT + else + stack_trap "$LFS setdirstripe -D -i $default_lmv_index \ + -c $default_lmv_count -H $default_lmv_hash $MOUNT" EXIT + fi + + $LFS setdirstripe -D -c 2 $MOUNT || + error "setdirstripe -D -c 2 failed" + mkdir $MOUNT/$tdir-6 || error "mkdir $tdir-6 failed" + local lmv_count=$($LFS getdirstripe -c $MOUNT/$tdir-6) + [ $lmv_count -eq 2 ] || error "$tdir-6 stripe count $lmv_count" } run_test 65n "don't inherit default layout from root for new subdirectories" @@ -7747,9 +8107,22 @@ CKSUM_TYPES=${CKSUM_TYPES:-$(lctl get_param -n osc.*osc-[^mM]*.checksum_type | set_checksum_type() { lctl set_param -n osc.*osc-[^mM]*.checksum_type $1 - log "set checksum type to $1" - return 0 + rc=$? + log "set checksum type to $1, rc = $rc" + return $rc +} + +get_osc_checksum_type() +{ + # arugment 1: OST name, like OST0000 + ost=$1 + checksum_type=$(lctl get_param -n osc.*${ost}-osc-[^mM]*.checksum_type | + sed 's/.*\[\(.*\)\].*/\1/g') + rc=$? + [ $rc -ne 0 ] && error "failed to get checksum type of $ost, rc = $rc, output = $checksum_type" + echo $checksum_type } + F77_TMP=$TMP/f77-temp F77SZ=8 setup_f77() { @@ -7978,7 +8351,7 @@ test_77k() { # LU-10906 wait_update $HOSTNAME "$get_checksum" $i #remount echo "remount client, checksum should be $i" - remount_client $MOUNT || "failed to remount client" + remount_client $MOUNT || error "failed to remount client" checksum=$(eval $get_checksum) [ $checksum -eq $i ] || error "checksum($checksum) != $i" done @@ -7989,18 +8362,50 @@ test_77k() { # LU-10906 for opt in "checksum" "nochecksum"; do #remount with mount option echo "remount client with option $opt, checksum should be $i" - umount_client $MOUNT || "failed to umount client" + umount_client $MOUNT || error "failed to umount client" mount_client $MOUNT "$MOUNT_OPTS,$opt" || - "failed to mount client with option '$opt'" + error "failed to mount client with option '$opt'" checksum=$(eval $get_checksum) [ $checksum -eq $i ] || error "checksum($checksum) != $i" i=$((i - 1)) done - remount_client $MOUNT || "failed to remount client" + remount_client $MOUNT || error "failed to remount client" } run_test 77k "enable/disable checksum correctly" +test_77l() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" + $GSS && skip_env "could not run with gss" + + set_checksums 1 + stack_trap "set_checksums $ORIG_CSUM" EXIT + stack_trap "set_checksum_type $ORIG_CSUM_TYPE" EXIT + + set_checksum_type invalid && error "unexpected success of invalid checksum type" + + $LFS setstripe -c 1 -i 0 $DIR/$tfile + for algo in $CKSUM_TYPES; do + set_checksum_type $algo || error "fail to set checksum type $algo" + osc_algo=$(get_osc_checksum_type OST0000) + [ "$osc_algo" != "$algo" ] && error "checksum type is $osc_algo after setting it to $algo" + + # no locks, no reqs to let the connection idle + cancel_lru_locks osc + lru_resize_disable osc + wait_osc_import_state client ost1 IDLE + + # ensure ost1 is connected + stat $DIR/$tfile >/dev/null || error "can't stat" + wait_osc_import_state client ost1 FULL + + osc_algo=$(get_osc_checksum_type OST0000) + [ "$osc_algo" != "$algo" ] && error "checksum type changed from $algo to $osc_algo after reconnection" + done + return 0 +} +run_test 77l "preferred checksum type is remembered after reconnected" + [ "$ORIG_CSUM" ] && set_checksums $ORIG_CSUM || true rm -f $F77_TMP unset F77_TMP @@ -8399,12 +8804,14 @@ test_101c() { cancel_lru_locks osc $LCTL set_param osc.*.rpc_stats 0 $READS -f $DIR/$tfile -s$FILE_LENGTH -b$rsize -n$nreads -t 180 + $LCTL get_param osc.*.rpc_stats for osc_rpc_stats in $($LCTL get_param -N osc.*.rpc_stats); do local stats=$($LCTL get_param -n $osc_rpc_stats) local lines=$(echo "$stats" | awk 'END {print NR;}') local size if [ $lines -le 20 ]; then + echo "continue debug" continue fi for size in 1 2 4 8; do @@ -13703,6 +14110,77 @@ test_160i() { } run_test 160i "changelog user register/unregister race" +test_160j() { + remote_mds_nodsh && skip "remote MDS with nodsh" + [[ $MDS1_VERSION -lt $(version_code 2.12.56) ]] && + skip "Need MDS version at least 2.12.56" + + mount_client $MOUNT2 || error "mount_client on $MOUNT2 failed" + + changelog_register || error "first changelog_register failed" + + # generate some changelog + test_mkdir -c $MDSCOUNT $DIR/$tdir || error "mkdir $tdir failed" + createmany -m $DIR/$tdir/${tfile}bis $((MDSCOUNT * 2)) || + error "create $DIR/$tdir/${tfile}bis failed" + + # open the changelog device + exec 3>/dev/changelog-$FSNAME-MDT0000 + exec 4/dev/null || error "read changelog failed" + + # clear changelog + local cl_user="${CL_USERS[$SINGLEMDS]%% *}" + changelog_users $SINGLEMDS | grep -q $cl_user || + error "User $cl_user not found in changelog_users" + + printf 'clear:'$cl_user':0' >&3 + + # close + exec 3>&- + exec 4<&- + + # cleanup + changelog_deregister || error "changelog_deregister failed" + + umount $MOUNT2 + mount_client $MOUNT || error "mount_client on $MOUNT failed" +} +run_test 160j "client can be umounted while its chanangelog is being used" + +test_160k() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" + remote_mds_nodsh && skip "remote MDS with nodsh" + + mkdir -p $DIR/$tdir/1/1 + + changelog_register || error "changelog_register failed" + local cl_user="${CL_USERS[$SINGLEMDS]%% *}" + + changelog_users $SINGLEMDS | grep -q $cl_user || + error "User '$cl_user' not found in changelog_users" +#define OBD_FAIL_MDS_CHANGELOG_REORDER 0x15d + do_facet mds1 $LCTL set_param fail_loc=0x8000015d fail_val=3 + rmdir $DIR/$tdir/1/1 & sleep 1 + mkdir $DIR/$tdir/2 + touch $DIR/$tdir/2/2 + rm -rf $DIR/$tdir/2 + + wait + sleep 4 + + changelog_dump | grep rmdir || error "rmdir not recorded" + + rm -rf $DIR/$tdir + changelog_deregister +} +run_test 160k "Verify that changelog records are not lost" + test_161a() { [ $PARALLEL == "yes" ] && skip "skip parallel run" @@ -14655,10 +15133,6 @@ test_200() { local subdir=$test_path/subdir local rc=0 - if ! combined_mgs_mds ; then - mount_mgs_client - fi - while : ; do # former test_200a test_200b pool_add $POOL || { rc=$? ; break; } @@ -14692,9 +15166,6 @@ test_200() { destroy_test_pools - if ! combined_mgs_mds ; then - umount_mgs_client - fi return $rc } run_test 200 "OST pools" @@ -15376,10 +15847,6 @@ test_220() { #LU-325 $LFS df -i - if ! combined_mgs_mds ; then - mount_mgs_client - fi - do_facet ost$((OSTIDX + 1)) lctl set_param fail_val=-1 #define OBD_FAIL_OST_ENOINO 0x229 do_facet ost$((OSTIDX + 1)) lctl set_param fail_loc=0x229 @@ -15416,10 +15883,6 @@ test_220() { #LU-325 error "$LCTL pool_destroy $FSNAME.$TESTNAME failed" echo "unlink $MDSOBJS files @$next_id..." unlinkmany $DIR/$tdir/f $MDSOBJS || error "unlinkmany failed" - - if ! combined_mgs_mds ; then - umount_mgs_client - fi } run_test 220 "preallocated MDS objects still used if ENOSPC from OST" @@ -16773,7 +17236,7 @@ test_243() } run_test 243 "various group lock tests" -test_244() +test_244a() { test_mkdir $DIR/$tdir dd if=/dev/zero of=$DIR/$tdir/$tfile bs=1M count=35 @@ -16781,7 +17244,26 @@ test_244() error "sendfile+grouplock failed" rm -rf $DIR/$tdir } -run_test 244 "sendfile with group lock tests" +run_test 244a "sendfile with group lock tests" + +test_244b() +{ + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + + local threads=50 + local size=$((1024*1024)) + + test_mkdir $DIR/$tdir + for i in $(seq 1 $threads); do + local file=$DIR/$tdir/file_$((i / 10)) + $MULTIOP $file OG1234w$size_$((i % 3))w$size_$((i % 4))g1234c & + local pids[$i]=$! + done + for i in $(seq 1 $threads); do + wait ${pids[$i]} + done +} +run_test 244b "multi-threaded write with group lock" test_245() { local flagname="multi_mod_rpcs" @@ -17081,9 +17563,6 @@ test_253() { wait_delete_completed mkdir $DIR/$tdir - if ! combined_mgs_mds ; then - mount_mgs_client - fi pool_add $TESTNAME || error "Pool creation failed" pool_add_targets $TESTNAME 0 || error "Pool add targets failed" @@ -17129,10 +17608,6 @@ test_253() { if (( oa_status != 0 )); then error "Object allocation still disable after rm" fi - - if ! combined_mgs_mds ; then - umount_mgs_client - fi } run_test 253 "Check object allocation limit" @@ -17438,7 +17913,7 @@ run_test 255b "check 'lfs ladvise -a dontneed'" test_255c() { [ $OST1_VERSION -lt $(version_code 2.10.50) ] && - skip "lustre < 2.10.53 does not support lockahead" + skip "lustre < 2.10.50 does not support lockahead" local count local new_count @@ -18190,8 +18665,8 @@ test_271f() { local mdtidx=$($LFS getstripe --mdt-index $DIR/$tdir) cancel_lru_locks mdc - dd if=/dev/urandom of=$tmp bs=200000 count=1 - dd if=$tmp of=$dom bs=200000 count=1 + dd if=/dev/urandom of=$tmp bs=265000 count=1 + dd if=$tmp of=$dom bs=265000 count=1 cancel_lru_locks mdc cat /etc/hosts >> $tmp lctl set_param -n mdc.*.stats=clear @@ -18218,6 +18693,7 @@ test_271f() { local ra=$(get_mdc_stats $mdtidx req_active) local rw=$(get_mdc_stats $mdtidx req_waittime) + [ -z $num ] && num=0 [ $num -eq 1 ] || error "expect 1 READ RPC, $num occured" [ $ra == $rw ] || error "$((ra - rw)) resend occured" echo "... DONE" @@ -18297,12 +18773,12 @@ test_272b() { $LFS migrate -c2 $dom || error "failed to migrate to the new composite layout" - [ $($LFS getstripe -L $dom) == 'mdt' ] && + [ $($LFS getstripe -L $dom) != 'mdt' ] || error "MDT stripe was not removed" cancel_lru_locks mdc local new_md5=$(md5sum $dom) - [ "$old_md5" != "$new_md5" ] && + [ "$old_md5" == "$new_md5" ] || error "$old_md5 != $new_md5" # Skip free space checks with ZFS @@ -18342,7 +18818,7 @@ test_272c() { cancel_lru_locks mdc local new_md5=$(md5sum $dom) - [ "$old_md5" != "$new_md5" ] && + [ "$old_md5" == "$new_md5" ] || error "$old_md5 != $new_md5" # Skip free space checks with ZFS @@ -18356,6 +18832,108 @@ test_272c() { } run_test 272c "DoM migration: DOM file to the OST-striped file (composite)" +test_272d() { + [ $MDS1_VERSION -lt $(version_code 2.12.55) ] && + skip "Need MDS version at least 2.12.55" + + local dom=$DIR/$tdir/$tfile + mkdir -p $DIR/$tdir + $LFS setstripe -E 1M -L mdt -E -1 -c1 $dom + + local mdtidx=$($LFS getstripe -m $dom) + local mdtname=MDT$(printf %04x $mdtidx) + local facet=mds$((mdtidx + 1)) + + dd if=/dev/urandom of=$dom bs=2M count=1 oflag=direct || + error "failed to write data into $dom" + local old_md5=$(md5sum $dom) + cancel_lru_locks mdc + local mdtfree1=$(do_facet $facet \ + lctl get_param -n osd*.*$mdtname.kbytesfree) + + $LFS mirror extend -N -E 2M -c1 -E -1 -c2 $dom || + error "failed mirroring to the new composite layout" + $LFS mirror resync $dom || + error "failed mirror resync" + $LFS mirror split --mirror-id 1 -d $dom || + error "failed mirror split" + + [ $($LFS getstripe -L $dom) != 'mdt' ] || + error "MDT stripe was not removed" + + cancel_lru_locks mdc + local new_md5=$(md5sum $dom) + [ "$old_md5" == "$new_md5" ] || + error "$old_md5 != $new_md5" + + # Skip free space checks with ZFS + if [ "$(facet_fstype $facet)" != "zfs" ]; then + local mdtfree2=$(do_facet $facet \ + lctl get_param -n osd*.*$mdtname.kbytesfree) + [ $mdtfree2 -gt $mdtfree1 ] || + error "MDS space is not freed after DOM mirror deletion" + fi + return 0 +} +run_test 272d "DoM mirroring: OST-striped mirror to DOM file" + +test_272e() { + [ $MDS1_VERSION -lt $(version_code 2.12.55) ] && + skip "Need MDS version at least 2.12.55" + + local dom=$DIR/$tdir/$tfile + mkdir -p $DIR/$tdir + $LFS setstripe -c 2 $dom + + dd if=/dev/urandom of=$dom bs=512K count=1 oflag=direct || + error "failed to write data into $dom" + local old_md5=$(md5sum $dom) + cancel_lru_locks mdc + + $LFS mirror extend -N -E 1M -L mdt -E eof -c2 $dom || + error "failed mirroring to the DOM layout" + $LFS mirror resync $dom || + error "failed mirror resync" + $LFS mirror split --mirror-id 1 -d $dom || + error "failed mirror split" + + [ $($LFS getstripe -L $dom) != 'mdt' ] || + error "MDT stripe was not removed" + + cancel_lru_locks mdc + local new_md5=$(md5sum $dom) + [ "$old_md5" == "$new_md5" ] || + error "$old_md5 != $new_md5" + + return 0 +} +run_test 272e "DoM mirroring: DOM mirror to the OST-striped file" + +test_272f() { + [ $MDS1_VERSION -lt $(version_code 2.12.55) ] && + skip "Need MDS version at least 2.12.55" + + local dom=$DIR/$tdir/$tfile + mkdir -p $DIR/$tdir + $LFS setstripe -c 2 $dom + + dd if=/dev/urandom of=$dom bs=512K count=1 oflag=direct || + error "failed to write data into $dom" + local old_md5=$(md5sum $dom) + cancel_lru_locks mdc + + $LFS migrate -E 1M -L mdt -E eof -c2 -v $dom || + error "failed migrating to the DOM file" + + cancel_lru_locks mdc + local new_md5=$(md5sum $dom) + [ "$old_md5" != "$new_md5" ] && + error "$old_md5 != $new_md5" + + return 0 +} +run_test 272f "DoM migration: OST-striped file to DOM file" + test_273a() { [ $MDS1_VERSION -lt $(version_code 2.11.50) ] && skip "Need MDS version at least 2.11.50" @@ -18448,6 +19026,34 @@ test_277() { } run_test 277 "Direct IO shall drop page cache" +test_278() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + [[ "$(facet_host mds1)" != "$(facet_host mds2)" ]] && + skip "needs the same host for mdt1 mdt2" && return + + local pid1 + local pid2 + +#define OBD_FAIL_OBD_STOP_MDS_RACE 0x60b + do_facet mds2 $LCTL set_param fail_loc=0x8000060c + stop mds2 & + pid2=$! + + stop mds1 + + echo "Starting MDTs" + start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS + wait $pid2 +#For the error assertion will happen. lu_env_get_key(..., &mdt_thread_key) +#will return NULL + do_facet mds2 $LCTL set_param fail_loc=0 + + start mds2 $(mdsdevname 2) $MDS_MOUNT_OPTS + wait_recovery_complete mds2 +} +run_test 278 "Race starting MDS between MDTs stop/start" + cleanup_test_300() { trap 0 umask $SAVE_UMASK @@ -19924,9 +20530,6 @@ test_406() { local def_stripe_size=$($LFS getstripe -S $MOUNT) local test_pool=$TESTNAME - if ! combined_mgs_mds ; then - mount_mgs_client - fi pool_add $test_pool || error "pool_add failed" pool_add_targets $test_pool 0 $(($OSTCOUNT - 1)) 1 || error "pool_add_targets failed" @@ -19979,10 +20582,6 @@ test_406() { local f=$DIR/$tdir/$tfile pool_remove_all_targets $test_pool $f pool_remove $test_pool $f - - if ! combined_mgs_mds ; then - umount_mgs_client - fi } run_test 406 "DNE support fs default striping" @@ -20216,57 +20815,56 @@ test_413b() { sleep_maxage local ffree + local bavail local max local min local max_index local min_index + local tmp - ffree=($(lctl get_param -n mdc.*[mM][dD][cC]-[^M]*.filesfree | uniq)) - echo "MDT filesfree available: ${ffree[@]}" - max=${ffree[0]} - min=${ffree[0]} + ffree=($(lctl get_param -n mdc.*[mM][dD][cC]-[^M]*.filesfree)) + bavail=($(lctl get_param -n mdc.*[mM][dD][cC]-[^M]*.kbytesavail)) + bsize=$(lctl get_param -n mdc.*MDT0000*.blocksize) + + max=$(((${ffree[0]} >> 8) * (${bavail[0]} * bsize >> 16))) + min=$(((${ffree[0]} >> 8) * (${bavail[0]} * bsize >> 16))) max_index=0 min_index=0 - for ((i = 0; i < ${#ffree[@]}; i++)); do - if [[ ${ffree[i]} -gt $max ]]; then - max=${ffree[i]} + for ((i = 1; i < ${#ffree[@]}; i++)); do + tmp=$(((${ffree[i]} >> 8) * (${bavail[i]} * bsize >> 16))) + if [ $tmp -gt $max ]; then + max=$tmp max_index=$i fi - if [[ ${ffree[i]} -lt $min ]]; then - min=${ffree[i]} + if [ $tmp -lt $min ]; then + min=$tmp min_index=$i fi done - echo "Min free files: MDT$min_index: $min" - echo "Max free files: MDT$max_index: $max" - [ $min -eq 0 ] && skip "no free files in MDT$min_index" - [ $min -gt 10000000 ] && skip "too much free files in MDT$min_index" + [ ${ffree[min_index]} -eq 0 ] && + skip "no free files in MDT$min_index" + [ ${ffree[min_index]} -gt 100000000 ] && + skip "too much free files in MDT$min_index" # Check if we need to generate uneven MDTs - test_mkdir -i $min_index -c 1 -p $DIR/$tdir-MDT$min_index - local threshold=10 - local diff=$((max - min)) - local diff2=$((diff * 100 / min)) - - echo -n "Check for uneven MDTs: " - echo -n "diff=$diff files ($diff2%) must be > $threshold% ..." + local threshold=50 + local diff=$(((max - min ) * 100 / min)) + local value="$(generate_string 1024)" + local i - if [ $diff2 -gt $threshold ]; then - echo "ok" - echo "Don't need to fill MDT$min_index" - else - # generate uneven MDTs, create till 25% diff - echo "no" - diff2=$((threshold - diff2)) - diff=$((min * diff2 / 100)) + while [ $diff -lt $threshold ]; do + # generate uneven MDTs, create till $threshold% diff + echo -n "weight diff=$diff% must be > $threshold% ..." + count=$((${ffree[min_index]} / 10)) # 50 sec per 10000 files in vm - [ $diff -gt 40000 ] && [ "$SLOW" = "no" ] && - skip "$diff files to create" - echo "Fill $diff2% diff in MDT$min_index with $diff files" - local i - local value="$(generate_string 1024)" - for i in $(seq $diff); do + [ $count -gt 40000 ] && [ "$SLOW" = "no" ] && + skip "$count files to create" + echo "Fill MDT$min_index with $count files" + [ -d $DIR/$tdir-MDT$min_index ] || + $LFS mkdir -i $min_index $DIR/$tdir-MDT$min_index || + error "mkdir $tdir-MDT$min_index failed" + for i in $(seq $count); do $OPENFILE -f O_CREAT:O_LOV_DELAY_CREATE \ $DIR/$tdir-MDT$min_index/f$i > /dev/null || error "create f$i failed" @@ -20274,31 +20872,43 @@ test_413b() { $DIR/$tdir-MDT$min_index/f$i || error "setfattr f$i failed" done - fi - min=$((100 *MDSCOUNT)) - max=0 + ffree=($(lctl get_param -n mdc.*[mM][dD][cC]-*.filesfree)) + bavail=($(lctl get_param -n mdc.*[mM][dD][cC]-*.kbytesavail)) + max=$(((${ffree[max_index]} >> 8) * \ + (${bavail[max_index]} * bsize >> 16))) + min=$(((${ffree[min_index]} >> 8) * \ + (${bavail[min_index]} * bsize >> 16))) + diff=$(((max - min) * 100 / min)) + done + + echo "MDT filesfree available: ${ffree[@]}" + echo "MDT blocks available: ${bavail[@]}" + echo "weight diff=$diff%" echo "mkdir with balanced space usage" $LCTL set_param lmv.*.qos_prio_free=100 for i in $(seq $((100 * MDSCOUNT))); do mkdir $DIR/$tdir/subdir$i || error "mkdir subdir$i failed" done + for i in $(seq $MDSCOUNT); do count=$($LFS getdirstripe -i $DIR/$tdir/* | grep ^$((i - 1))$ | wc -w) echo "$count directories created on MDT$((i - 1))" - [ $min -gt $count ] && min=$count - [ $max -lt $count ] && max=$count done - [ $((max - min)) -gt $MDSCOUNT ] || + + max=$($LFS getdirstripe -i $DIR/$tdir/* | grep ^$max_index$ | wc -l) + min=$($LFS getdirstripe -i $DIR/$tdir/* | grep ^$min_index$ | wc -l) + + [ $((max - min)) -lt 10 ] && error "subdirs shouldn't be evenly distributed" which getfattr > /dev/null 2>&1 || skip_env "no getfattr command" $LFS setdirstripe -D -d $DIR/$tdir || error "setdirstripe -d failed" - getfattr -n trusted.dmv $DIR/$tdir && error "default dir layout exists" - true + getfattr -n trusted.dmv $DIR/$tdir && + error "default dir layout exists" || true } run_test 413b "mkdir with balanced space usage" @@ -20709,9 +21319,9 @@ test_421f() { cnt=$(ls -1 $DIR/$tdir | wc -l) [ $cnt == 1 ] || error "unexpected #files after (5): $cnt" - umount_client $MOUNT || "failed to umount client" + umount_client $MOUNT || error "failed to umount client" mount_client $MOUNT "$MOUNT_OPTS,user_fid2path" || - "failed to mount client'" + error "failed to mount client'" $RUNAS $LFS rmfid $DIR $FID || error "rmfid failed" # rmfid should succeed @@ -20725,9 +21335,9 @@ test_421f() { FID=$(lfs path2fid $DIR/$tdir/f) $RUNAS $LFS rmfid $DIR $FID && error "rmfid didn't fail" - umount_client $MOUNT || "failed to umount client" + umount_client $MOUNT || error "failed to umount client" mount_client $MOUNT "$MOUNT_OPTS" || - "failed to mount client'" + error "failed to mount client'" } run_test 421f "rmfid checks permissions" @@ -20764,6 +21374,46 @@ test_421g() { } run_test 421g "rmfid to return errors properly" +test_422() { + test_mkdir -i 0 -c 1 -p $DIR/$tdir/d1 + test_mkdir -i 0 -c 1 -p $DIR/$tdir/d2 + test_mkdir -i 0 -c 1 -p $DIR/$tdir/d3 + dd if=/dev/zero of=$DIR/$tdir/d1/file1 bs=1k count=1 + dd if=/dev/zero of=$DIR/$tdir/d2/file1 bs=1k count=1 + + local amc=$(at_max_get client) + local amo=$(at_max_get mds1) + local timeout=`lctl get_param -n timeout` + + at_max_set 0 client + at_max_set 0 mds1 + +#define OBD_FAIL_PTLRPC_PAUSE_REQ 0x50a + do_facet mds1 $LCTL set_param fail_loc=0x8000050a \ + fail_val=$(((2*timeout + 10)*1000)) + touch $DIR/$tdir/d3/file & + sleep 2 +#define OBD_FAIL_TGT_REPLY_DATA_RACE 0x722 + do_facet mds1 $LCTL set_param fail_loc=0x80000722 \ + fail_val=$((2*timeout + 5)) + mv $DIR/$tdir/d1/file1 $DIR/$tdir/d1/file2 & + local pid=$! + sleep 1 + kill -9 $pid + sleep $((2 * timeout)) + echo kill $pid + kill -9 $pid + lctl mark touch + touch $DIR/$tdir/d2/file3 + touch $DIR/$tdir/d2/file4 + touch $DIR/$tdir/d2/file5 + + wait + at_max_set $amc client + at_max_set $amo mds1 +} +run_test 422 "kill a process with RPC in progress" + prep_801() { [[ $(lustre_version_code mds1) -lt $(version_code 2.9.55) ]] || [[ $OST1_VERSION -lt $(version_code 2.9.55) ]] && @@ -20806,7 +21456,8 @@ test_801a() { echo "Start barrier_freeze at: $(date)" #define OBD_FAIL_BARRIER_DELAY 0x2202 do_facet mgs $LCTL set_param fail_val=5 fail_loc=0x2202 - do_facet mgs $LCTL barrier_freeze $FSNAME 10 & + # Do not reduce barrier time - See LU-11873 + do_facet mgs $LCTL barrier_freeze $FSNAME 20 & sleep 2 local b_status=$(barrier_stat) @@ -20828,7 +21479,8 @@ test_801a() { [ "$b_status" = "'expired'" ] || error "(3) unexpected barrier status $b_status" - do_facet mgs $LCTL barrier_freeze $FSNAME 10 || + # Do not reduce barrier time - See LU-11873 + do_facet mgs $LCTL barrier_freeze $FSNAME 20 || error "(4) fail to freeze barrier" b_status=$(barrier_stat) @@ -20953,7 +21605,8 @@ test_801c() { do_facet mgs $LCTL barrier_rescan $FSNAME || error "(3) Fail to rescan barrier bitmap" - do_facet mgs $LCTL barrier_freeze $FSNAME 10 + # Do not reduce barrier time - See LU-11873 + do_facet mgs $LCTL barrier_freeze $FSNAME 20 b_status=$(barrier_stat) [ "$b_status" = "'frozen'" ] || @@ -20992,7 +21645,7 @@ cleanup_802a() { } test_802a() { - + [[ $mds1_FSTYPE = zfs ]] || skip "ZFS specific test" [[ $(lustre_version_code mds1) -lt $(version_code 2.9.55) ]] || [[ $OST1_VERSION -lt $(version_code 2.9.55) ]] && skip "Need server version at least 2.9.55" @@ -21318,7 +21971,7 @@ test_806() { done check_lsom_size $DIR/$tfile $size - # multi-client wirtes + # multi-client writes num=$(get_node_count ${CLIENTS//,/ }) size=$(($num * $bs)) offset=0 @@ -21483,20 +22136,29 @@ test_809() { run_test 809 "Verify no SOM xattr store for DoM-only files" test_810() { - local ORIG - local CSUM - - # t10 seem to dislike partial pages - lctl set_param osc.*.checksum_type=adler - lctl set_param fail_loc=0x411 - dd if=/dev/urandom of=$DIR/$tfile bs=10240 count=2 - ORIG=$(md5sum $DIR/$tfile) - lctl set_param ldlm.namespaces.*osc*.lru_size=clear - CSUM=$(md5sum $DIR/$tfile) - set_checksum_type adler - if [ "$ORIG" != "$CSUM" ]; then - error "$ORIG != $CSUM" - fi + [ $PARALLEL == "yes" ] && skip "skip parallel run" + $GSS && skip_env "could not run with gss" + + set_checksums 1 + stack_trap "set_checksums $ORIG_CSUM" EXIT + stack_trap "set_checksum_type $ORIG_CSUM_TYPE" EXIT + + local csum + local before + local after + for csum in $CKSUM_TYPES; do + #define OBD_FAIL_OSC_NO_GRANT 0x411 + $LCTL set_param osc.*.checksum_type=$csum fail_loc=0x411 + for i in "10240 0" "10000 0" "4000 1" "500 1"; do + eval set -- $i + dd if=/dev/urandom of=$DIR/$tfile bs=$1 count=2 seek=$2 + before=$(md5sum $DIR/$tfile) + $LCTL set_param ldlm.namespaces.*osc*.lru_size=clear + after=$(md5sum $DIR/$tfile) + [ "$before" == "$after" ] || + error "$csum: $before != $after bs=$1 seek=$2" + done + done } run_test 810 "partial page writes on ZFS (LU-11663)" @@ -21775,6 +22437,39 @@ test_817() { } run_test 817 "nfsd won't cache write lock for exec file" +test_818() { + mkdir $DIR/$tdir + $LFS setstripe -c1 -i0 $DIR/$tfile + $LFS setstripe -c1 -i1 $DIR/$tfile + stop $SINGLEMDS + #define OBD_FAIL_OSP_CANT_PROCESS_LLOG 0x2105 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80002105 + start $SINGLEMDS $(mdsdevname ${SINGLEMDS//mds/}) $MDS_MOUNT_OPTS || + error "start $SINGLEMDS failed" + rm -rf $DIR/$tdir +} +run_test 818 "unlink with failed llog" + +test_819a() { + dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 + cancel_lru_locks osc + #define OBD_FAIL_OST_2BIG_NIOBUF 0x248 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000248 + dd if=$DIR/$tfile of=/dev/null bs=1M count=1 + rm -f $TDIR/$tfile +} +run_test 819a "too big niobuf in read" + +test_819b() { + #define OBD_FAIL_OST_2BIG_NIOBUF 0x248 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000248 + dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 + cancel_lru_locks osc + sleep 1 + rm -f $TDIR/$tfile +} +run_test 819b "too big niobuf in write" + # # tests that do cleanup/setup should be run at the end #