}
run_test 64f "check grant consumption (with grant allocation)"
+test_64g() {
+ #[ $MDS1_VERSION -lt $(version_code 2.14.54) ] &&
+ # skip "Need MDS version at least 2.14.54"
+
+ local mdts=$(comma_list $(mdts_nodes))
+
+ local old=$($LCTL get_param mdc.$FSNAME-*.grant_shrink_interval |
+ tr '\n' ' ')
+ stack_trap "$LCTL set_param $old"
+
+ # generate dirty pages and increase dirty granted on MDT
+ stack_trap "rm -f $DIR/$tfile-*"
+ for (( i = 0; i < 10; i++)); do
+ $LFS setstripe -E 1M -L mdt $DIR/$tfile-$i ||
+ error "can't set stripe"
+ dd if=/dev/zero of=$DIR/$tfile-$i bs=128k count=1 ||
+ error "can't dd"
+ $LFS getstripe $DIR/$tfile-$i | grep -q pattern.*mdt || {
+ $LFS getstripe $DIR/$tfile-$i
+ error "not DoM file"
+ }
+ done
+
+ # flush dirty pages
+ sync
+
+ # wait until grant shrink reset grant dirty on MDTs
+ for ((i = 0; i < 120; i++)); do
+ grant_dirty=$(do_nodes $mdts $LCTL get_param -n mdt.*.tot_dirty |
+ awk '{sum=sum+$1} END {print sum}')
+ vm_dirty=$(awk '/Dirty:/{print $2}' /proc/meminfo)
+ echo "$grant_dirty grants, $vm_dirty pages"
+ (( grant_dirty + vm_dirty == 0 )) && break
+ (( i == 3 )) && sync &&
+ $LCTL set_param mdc.$FSNAME-*.grant_shrink_interval=5
+ sleep 1
+ done
+
+ grant_dirty=$(do_nodes $mdts $LCTL get_param -n mdt.*.tot_dirty |
+ awk '{sum=sum+$1} END {print sum}')
+ (( grant_dirty == 0 )) || error "$grant_dirty on MDT"
+}
+run_test 64g "grant shrink on MDT"
+
+test_64h() {
+ local instance=$($LFS getname -i $DIR)
+ local osc_tgt="$FSNAME-OST0000-osc-$instance"
+ local num_exps=$(do_facet ost1 \
+ $LCTL get_param -n obdfilter.*OST0000*.num_exports)
+ local max_brw_size=$(import_param $osc_tgt max_brw_size)
+ local avail=$($LCTL get_param -n osc.*OST0000-osc-$instance.kbytesavail)
+ local p="$TMP/$TESTSUITE-$TESTNAME.parameters"
+
+ # 10MiB is for file to be written, max_brw_size * 16 *
+ # num_exps is space reserve so that tgt_grant_shrink() decided
+ # to not shrink
+ local expect=$((max_brw_size * 16 * num_exps + 10 * 1048576))
+ (( avail * 1024 < expect )) &&
+ skip "need $expect bytes on ost1, have $(( avail * 1024 )) only"
+
+ save_lustre_params client "osc.*OST0000*.grant_shrink" > $p
+ save_lustre_params client "osc.*OST0000*.grant_shrink_interval" >> $p
+ stack_trap "restore_lustre_params < $p; rm -f $save" EXIT
+ $LCTL set_param osc.*OST0000*.grant_shrink=1
+ $LCTL set_param osc.*OST0000*.grant_shrink_interval=10
+
+ $LFS setstripe -c 1 -i 0 $DIR/$tfile
+ dd if=/dev/zero of=$DIR/$tfile bs=1M count=10 oflag=sync
+
+ # drop cache so that coming read would do rpc
+ cancel_lru_locks osc
+
+ # shrink interval is set to 10, pause for 7 seconds so that
+ # grant thread did not wake up yet but coming read entered
+ # shrink mode for rpc (osc_should_shrink_grant())
+ sleep 7
+
+ declare -a cur_grant_bytes
+ declare -a tot_granted
+ cur_grant_bytes[0]=$($LCTL get_param -n osc.*OST0000*.cur_grant_bytes)
+ tot_granted[0]=$(do_facet ost1 \
+ $LCTL get_param -n obdfilter.*OST0000*.tot_granted)
+
+ dd if=$DIR/$tfile bs=4K count=1 of=/dev/null
+
+ cur_grant_bytes[1]=$($LCTL get_param -n osc.*OST0000*.cur_grant_bytes)
+ tot_granted[1]=$(do_facet ost1 \
+ $LCTL get_param -n obdfilter.*OST0000*.tot_granted)
+
+ # grant change should be equal on both sides
+ (( cur_grant_bytes[0] - cur_grant_bytes[1] ==
+ tot_granted[0] - tot_granted[1])) ||
+ error "grant change mismatch, " \
+ "server: ${tot_granted[0]} to ${tot_granted[1]}, " \
+ "client: ${cur_grant_bytes[0]} to ${cur_grant_bytes[1]}"
+}
+run_test 64h "grant shrink on read"
+
# bug 1414 - set/get directories' stripe info
test_65a() {
[ $PARALLEL == "yes" ] && skip "skip parallel run"
test_224a() { # LU-1039, MRP-303
[ $PARALLEL == "yes" ] && skip "skip parallel run"
-
#define OBD_FAIL_PTLRPC_CLIENT_BULK_CB 0x508
$LCTL set_param fail_loc=0x508
- dd if=/dev/zero of=$DIR/$tfile bs=4096 count=1 conv=fsync
+ dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 conv=fsync
$LCTL set_param fail_loc=0
df $DIR
}
run_test 224a "Don't panic on bulk IO failure"
-test_224b() { # LU-1039, MRP-303
+test_224bd_sub() { # LU-1039, MRP-303
[ $PARALLEL == "yes" ] && skip "skip parallel run"
+ local timeout=$1
- dd if=/dev/zero of=$DIR/$tfile bs=4096 count=1
+ shift
+ dd if=/dev/urandom of=$TMP/$tfile bs=1M count=1
+
+ $LFS setstripe -c 1 -i 0 $DIR/$tfile
+
+ dd if=$TMP/$tfile of=$DIR/$tfile bs=1M count=1
cancel_lru_locks osc
+ set_checksums 0
+ stack_trap "set_checksums $ORIG_CSUM" EXIT
+ local at_max_saved=0
+
+ # adaptive timeouts may prevent seeing the issue
+ if at_is_enabled; then
+ at_max_saved=$(at_max_get mds)
+ at_max_set 0 mds client
+ stack_trap "at_max_set $at_max_saved mds client" EXIT
+ fi
+
#define OBD_FAIL_PTLRPC_CLIENT_BULK_CB2 0x515
- $LCTL set_param fail_loc=0x515
- dd of=/dev/null if=$DIR/$tfile bs=4096 count=1
- $LCTL set_param fail_loc=0
+ do_facet ost1 $LCTL set_param fail_val=$timeout fail_loc=0x80000515
+ dd of=$TMP/$tfile.new if=$DIR/$tfile bs=1M count=1 || "$@"
+
+ do_facet ost1 $LCTL set_param fail_loc=0
+ cmp $TMP/$tfile $TMP/$tfile.new || error "file contents wrong"
df $DIR
}
+
+test_224b() {
+ test_224bd_sub 3 error "dd failed"
+}
run_test 224b "Don't panic on bulk IO failure"
test_224c() { # LU-6441
}
run_test 224c "Don't hang if one of md lost during large bulk RPC"
+test_224d() { # LU-11169
+ test_224bd_sub $((TIMEOUT + 2)) error "dd failed"
+}
+run_test 224d "Don't corrupt data on bulk IO timeout"
+
MDSSURVEY=${MDSSURVEY:-$(which mds-survey 2>/dev/null || true)}
test_225a () {
[ $PARALLEL == "yes" ] && skip "skip parallel run"
error "migrate remote dir error"
echo "Finish migration, then checking.."
- for file in $(find $migrate_dir); do
+ for file in $(find $migrate_dir -maxdepth 1); do
mdt_index=$($LFS getstripe -m $file)
if [ $mdt_index -lt $new_index ] ||
[ $mdt_index -gt $((new_index + new_count - 1)) ]; then
}
run_test 230t "migrate directory with project ID set"
+test_230u()
+{
+ (( MDSCOUNT > 3 )) || skip_env "needs >= 4 MDTs"
+ (( MDS1_VERSION >= $(version_code 2.14.53) )) ||
+ skip "Need MDS version at least 2.14.53"
+
+ local count
+
+ mkdir_on_mdt0 $DIR/$tdir || error "mkdir $tdir failed"
+ mkdir $DIR/$tdir/sub{0..99} || error "mkdir sub failed"
+ $LFS migrate -m -1 $DIR/$tdir/sub{0..99} || error "migrate sub failed"
+ for i in $(seq 0 $((MDSCOUNT - 1))); do
+ count=$($LFS getstripe -m $DIR/$tdir/sub* | grep -c ^$i)
+ echo "$count dirs migrated to MDT$i"
+ done
+ count=$($LFS getstripe -m $DIR/$tdir/sub* | sort -u | wc -l)
+ (( count >= MDSCOUNT - 1 )) || error "dirs migrated to $count MDTs"
+}
+run_test 230u "migrate directory by QOS"
+
+test_230v()
+{
+ (( MDSCOUNT > 3 )) || skip_env "needs >= 4 MDTs"
+ (( MDS1_VERSION >= $(version_code 2.14.53) )) ||
+ skip "Need MDS version at least 2.14.53"
+
+ local count
+
+ mkdir $DIR/$tdir || error "mkdir $tdir failed"
+ mkdir $DIR/$tdir/sub{0..99} || error "mkdir sub failed"
+ $LFS migrate -m 0,2,1 $DIR/$tdir || error "migrate $tdir failed"
+ for i in $(seq 0 $((MDSCOUNT - 1))); do
+ count=$($LFS getstripe -m $DIR/$tdir/sub* | grep -c ^$i)
+ echo "$count subdirs migrated to MDT$i"
+ (( i == 3 )) && (( count > 0 )) &&
+ error "subdir shouldn't be migrated to MDT3"
+ done
+ count=$($LFS getstripe -m $DIR/$tdir/sub* | sort -u | wc -l)
+ (( count == 3 )) || error "dirs migrated to $count MDTs"
+}
+run_test 230v "subdir migrated to the MDT where its parent is located"
+
test_231a()
{
# For simplicity this test assumes that max_pages_per_rpc
test_254() {
[ $PARALLEL == "yes" ] && skip "skip parallel run"
remote_mds_nodsh && skip "remote MDS with nodsh"
- do_facet $SINGLEMDS $LCTL get_param -n mdd.$MDT0.changelog_size ||
+
+ local mdt=$(facet_svc $SINGLEMDS)
+
+ do_facet $SINGLEMDS $LCTL get_param -n mdd.$mdt.changelog_size ||
skip "MDS does not support changelog_size"
local cl_user
- local MDT0=$(facet_svc $SINGLEMDS)
changelog_register || error "changelog_register failed"
changelog_clear 0 || error "changelog_clear failed"
local size1=$(do_facet $SINGLEMDS \
- $LCTL get_param -n mdd.$MDT0.changelog_size)
+ $LCTL get_param -n mdd.$mdt.changelog_size)
echo "Changelog size $size1"
rm -rf $DIR/$tdir
rm $DIR/$tdir/pics/desktop.jpg
local size2=$(do_facet $SINGLEMDS \
- $LCTL get_param -n mdd.$MDT0.changelog_size)
+ $LCTL get_param -n mdd.$mdt.changelog_size)
echo "Changelog size after work $size2"
(( $size2 > $size1 )) ||
}
run_test 270h "DoM: DoM stripe removal when disabled on server"
+test_270i() {
+ (( $MDS1_VERSION >= $(version_code 2.14.54) )) ||
+ skip "Need MDS version at least 2.14.54"
+
+ mkdir $DIR/$tdir
+ $LFS setstripe -L mdt -S 128k -c -1 $DIR/$tdir &&
+ error "setstripe should fail" || true
+}
+run_test 270i "DoM: setting invalid DoM striping should fail"
+
test_271a() {
[ $MDS1_VERSION -lt $(version_code 2.10.55) ] &&
skip "Need MDS version at least 2.10.55"
generate_uneven_mdts() {
local threshold=$1
+ local lmv_qos_maxage
+ local lod_qos_maxage
local ffree
local bavail
local max
local tmp
local i
+ lmv_qos_maxage=$($LCTL get_param -n lmv.*.qos_maxage)
+ $LCTL set_param lmv.*.qos_maxage=1
+ stack_trap "$LCTL set_param \
+ lmv.*.qos_maxage=$lmv_qos_maxage > /dev/null" RETURN
+ lod_qos_maxage=$(do_facet mds1 $LCTL get_param -n \
+ lod.$FSNAME-MDT0000-mdtlov.qos_maxage | awk '{ print $1 }')
+ do_nodes $(comma_list $(mdts_nodes)) $LCTL set_param \
+ lod.*.mdt_qos_maxage=1
+ stack_trap "do_nodes $(comma_list $(mdts_nodes)) $LCTL set_param \
+ lod.*.mdt_qos_maxage=$lod_qos_maxage > /dev/null" RETURN
+
echo
echo "Check for uneven MDTs: "
fi
done
+ (( ${ffree[min_index]} > 0 )) ||
+ skip "no free files in MDT$min_index"
+ (( ${ffree[min_index]} < 10000000 )) ||
+ skip "too many free files in MDT$min_index"
+
# Check if we need to generate uneven MDTs
local diff=$(((max - min) * 100 / min))
local testdir=$DIR/$tdir-fillmdt
+ local start
mkdir -p $testdir
while (( diff < threshold )); do
# generate uneven MDTs, create till $threshold% diff
echo -n "weight diff=$diff% must be > $threshold% ..."
- echo "Fill MDT$min_index with 100 files: loop $i"
+ echo "Fill MDT$min_index with 1000 files: loop $i"
testdir=$DIR/$tdir-fillmdt/$i
[ -d $testdir ] || $LFS mkdir -i $min_index $testdir ||
error "mkdir $testdir failed"
$LFS setstripe -E 1M -L mdt $testdir ||
error "setstripe $testdir failed"
- for F in f.{0..99}; do
- dd if=/dev/zero of=$testdir/$F bs=1M count=1 > \
+ start=$SECONDS
+ for F in f.{0..999}; do
+ dd if=/dev/zero of=$testdir/$F bs=64K count=1 > \
/dev/null 2>&1 || error "dd $F failed"
done
+ # wait for QOS to update
+ (( SECONDS < start + 1 )) && sleep $((start + 1 - SECONDS))
+
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) * \
local stripe_index=$($LFS getstripe -m $testdir)
local test_mkdir_rr=true
- echo "dirstripe: '$($LFS getdirstripe $testdir)'"
getfattr -d -m dmv -e hex $testdir | grep dmv
if (( $? == 0 && $MDS1_VERSION >= $(version_code 2.14.51) )); then
echo "defstripe: '$($LFS getdirstripe -D $testdir)'"
(( ${ffree[min_index]} > 0 )) ||
skip "no free files in MDT$min_index"
- (( ${ffree[min_index]} < 100000000 )) ||
+ (( ${ffree[min_index]} < 10000000 )) ||
skip "too many free files in MDT$min_index"
echo "MDT filesfree available: ${ffree[@]}"
error "$mkdir_cmd subdir$i failed"
done
+ max=0
for (( i = 0; i < $MDSCOUNT; i++ )); do
count=$($LFS getdirstripe -i $testdir/* | grep -c "^$i$")
+ (( count > max )) && max=$count
echo "$count directories created on MDT$i"
-
- if [ $stripe_count -gt 1 ]; then
- count=$($LFS getdirstripe $testdir/* |
- grep -c -P "^\s+$i\t")
- echo "$count stripes created on MDT$i"
- fi
done
- max=$($LFS getdirstripe -i $testdir/* | grep -c "^$max_index$")
min=$($LFS getdirstripe -i $testdir/* | grep -c "^$min_index$")
# D-value should > 10% of averge
- (( max - min >= num / 10 )) ||
+ (( max - min > num / 10 )) ||
error "subdirs shouldn't be evenly distributed: $max - $min < $((num / 10))"
- # 5% for stripes
+ # ditto for stripes
if (( stripe_count > 1 )); then
- max=$($LFS getdirstripe $testdir/* |
- grep -c -P "^\s+$max_index\t")
+ max=0
+ for (( i = 0; i < $MDSCOUNT; i++ )); do
+ count=$($LFS getdirstripe $testdir/* |
+ grep -c -P "^\s+$i\t")
+ (( count > max )) && max=$count
+ echo "$count stripes created on MDT$i"
+ done
+
min=$($LFS getdirstripe $testdir/* |
grep -c -P "^\s+$min_index\t")
- (( max - min >= num * stripe_count / 20 )) ||
- error "stripes shouldn't be evenly distributed: $max - $min < $((num / 20)) * $stripe_count"
+ (( max - min > num * stripe_count / 10 )) ||
+ error "stripes shouldn't be evenly distributed: $max - $min < $((num / 10)) * $stripe_count"
fi
}
local pid
for subdir in $(\ls -1 -d $DIR/d413*-fillmdt/*); do
- unlinkmany $subdir/f. 100 &
+ unlinkmany $subdir/f. 1000 &
pids="$pids $!"
done
[ "$1" == "blocks" ] && inodes= || inodes="-i"
for count in {1..100}; do
- do_rpc_nodes "$CLIENTS" cancel_lru_locks
+ do_nodes "$CLIENTS" \
+ $LCTL set_param ldlm.namespaces.*.lru_size=clear
sync; sleep 0.2
# read the lines of interest
# "<NID>:/<fsname>" for df, "filesystem_summary:" for lfs df
# compare the two outputs
passed=true
- for i in {1..5}; do
+ # skip "available" on MDT until LU-13997 is fixed.
+ #for i in {1..5}; do
+ for i in 1 2 4 5; do
[ "${df_out[i]}" != "${lfs_df_out[i]}" ] && passed=false
done
$passed && break
}
run_test 822 "test precreate failure"
+test_823() {
+ local p="$TMP/$TESTSUITE-$TESTNAME.parameters"
+ local OST_MAX_PRECREATE=20000
+
+ save_lustre_params mds1 \
+ "osp.$FSNAME-OST*-osc-MDT0000.max_create_count" > $p
+ do_facet $SINGLEMDS "$LCTL set_param -n \
+ osp.$FSNAME-OST*MDT0000.max_create_count=0"
+ do_facet $SINGLEMDS "$LCTL set_param -n \
+ osp.$FSNAME-OST0000*MDT0000.max_create_count=$OST_MAX_PRECREATE"
+
+ stack_trap "restore_lustre_params < $p; rm $p"
+
+ do_facet $SINGLEMDS "$LCTL set_param -n \
+ osp.$FSNAME-OST*-osc-MDT*.create_count=100200"
+
+ local count=$(do_facet $SINGLEMDS "$LCTL get_param -n \
+ osp.$FSNAME-OST0000*MDT0000.create_count")
+ local max=$(do_facet $SINGLEMDS "$LCTL get_param -n \
+ osp.$FSNAME-OST0000*MDT0000.max_create_count")
+ local expect_count=$(((($max/2)/256) * 256))
+
+ log "setting create_count to 100200:"
+ log " -result- count: $count with max: $max, expecting: $expect_count"
+
+ [[ $count -eq expect_count ]] ||
+ error "Create count not set to max precreate."
+}
+run_test 823 "Setting create_count > OST_MAX_PRECREATE is lowered to maximum"
+
#
# tests that do cleanup/setup should be run at the end
#