ALWAYS_EXCEPT="$SANITY_EXCEPT "
# bug number for skipped test: LU-9693 LU-6493 LU-9693
ALWAYS_EXCEPT+=" 42a 42b 42c "
-# bug number: LU-8411 LU-9096 LU-9054
-ALWAYS_EXCEPT+=" 407 253 312 "
+# bug number: LU-8411 LU-9054
+ALWAYS_EXCEPT+=" 407 312 "
if $SHARED_KEY; then
# bug number: LU-9795 LU-9795 LU-9795 LU-9795
}
run_test 27m "create file while OST0 was full"
-sleep_maxage() {
- local delay=$(do_facet $SINGLEMDS lctl get_param -n lov.*.qos_maxage |
- awk '{ print $1 * 2; exit; }')
- sleep $delay
-}
-
# OSCs keep a NOSPC flag that will be reset after ~5s (qos_maxage)
# if the OST isn't full anymore.
reset_enospc() {
# on the mdt's osc
local mdtosc_proc1=$(get_mdtosc_proc_path $mfacet $OST)
local last_id=$(do_facet $mfacet lctl get_param -n \
- osc.$mdtosc_proc1.prealloc_last_id)
+ osp.$mdtosc_proc1.prealloc_last_id)
local next_id=$(do_facet $mfacet lctl get_param -n \
- osc.$mdtosc_proc1.prealloc_next_id)
+ osp.$mdtosc_proc1.prealloc_next_id)
local mdtosc_proc2=$(get_mdtosc_proc_path $mfacet)
- do_facet $mfacet lctl get_param osc.$mdtosc_proc2.prealloc*
+ do_facet $mfacet lctl get_param osp.$mdtosc_proc2.prealloc*
test_mkdir -p $DIR/$tdir/${OST}
$LFS setstripe -i $OSTIDX -c 1 $DIR/$tdir/${OST}
do_facet $ofacet lctl set_param fail_val=$FAILIDX fail_loc=0x215
echo "Creating to objid $last_id on ost $OST..."
createmany -o $DIR/$tdir/${OST}/f $next_id $((last_id - next_id + 2))
- do_facet $mfacet lctl get_param osc.$mdtosc_proc2.prealloc*
+ do_facet $mfacet lctl get_param osp.$mdtosc_proc2.prealloc*
do_facet $ofacet lctl set_param fail_loc=$FAILLOC
sleep_maxage
}
local mdtosc=$(get_mdtosc_proc_path $SINGLEMDS $FSNAME-OST0000)
local last_id=$(do_facet $SINGLEMDS lctl get_param -n \
- osc.$mdtosc.prealloc_last_id)
+ osp.$mdtosc.prealloc_last_id)
local next_id=$(do_facet $SINGLEMDS lctl get_param -n \
- osc.$mdtosc.prealloc_next_id)
+ osp.$mdtosc.prealloc_next_id)
local fcount=$((last_id - next_id))
[[ $fcount -eq 0 ]] && skip "not enough space on OST0"
[[ $fcount -gt $OSTCOUNT ]] && fcount=$OSTCOUNT
[ $MDS1_VERSION -lt $(version_code 2.9.55) ] ||
[ $CLIENT_VERSION -lt $(version_code 2.9.55) ] &&
skip27D+=" -s 30,31"
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code $SEL_VER) ] &&
+ skip27D+="-s 32"
[[ ! $($LCTL get_param mdc.*.import) =~ connect_flags.*overstriping ||
$OSTCOUNT -ge $(($LOV_MAX_STRIPE_COUNT / 2)) ]] &&
skip27D+=" -s 32,33"
}
run_test 27K "basic ops on dir with foreign LMV"
+test_27L() {
+ remote_mds_nodsh && skip "remote MDS with nodsh"
+
+ 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}" ||
+ error "pool_list does not contain ${FSNAME}.${POOL}:" \
+ "$(lfs pool_list $MOUNT | grep -F "${POOL}")"
+}
+run_test 27L "lfs pool_list gives correct pool name"
+
# createtest also checks that device nodes are created and
# then visible correctly (#2091)
test_28() { # bug 2091
local mdtosc=$(get_mdtosc_proc_path $SINGLEMDS)
local value
for value in $(do_facet $SINGLEMDS \
- $LCTL get_param osc.$mdtosc.prealloc_last_id) ; do
+ $LCTL get_param osp.$mdtosc.prealloc_last_id) ; do
param=$(echo ${value[0]} | cut -d "=" -f1)
ostname=$(echo $param | cut -d "." -f2 | cut -d - -f 1-2)
run_test 60g "transaction abort won't cause MDT hung"
test_60h() {
- [ $MDS1_VERSION -le $(version_code 2.12.52) ] ||
+ [ $MDS1_VERSION -le $(version_code 2.12.52) ] &&
skip "Need MDS version at least 2.12.52"
- [ $MDSCOUNT -le 2 ] || skip "Need >= 2 MDTs"
+ [ $MDSCOUNT -lt 2 ] && skip "Need at least 2 MDTs"
local f
}
run_test 101g "Big bulk(4/16 MiB) readahead"
+test_101h() {
+ $LFS setstripe -i 0 -c 1 $DIR/$tfile
+
+ dd if=/dev/zero of=$DIR/$tfile bs=1M count=70 ||
+ error "dd 70M file failed"
+ echo Cancel LRU locks on lustre client to flush the client cache
+ cancel_lru_locks osc
+
+ echo "Reset readahead stats"
+ $LCTL set_param -n llite.*.read_ahead_stats 0
+
+ echo "Read 10M of data but cross 64M bundary"
+ dd if=$DIR/$tfile of=/dev/null bs=10M skip=6 count=1
+ local miss=$($LCTL get_param -n llite.*.read_ahead_stats |
+ get_named_value 'misses' | cut -d" " -f1 | calc_total)
+ [ $miss -eq 1 ] || error "expected miss 1 but got $miss"
+ rm -f $p $DIR/$tfile
+}
+run_test 101h "Readahead should cover current read window"
+
setup_test102() {
test_mkdir $DIR/$tdir
chown $RUNAS_ID $DIR/$tdir
remote_mds_nodsh && skip "remote MDS with nodsh"
echo -n "Free space priority "
- do_facet $SINGLEMDS lctl get_param -n lo*.*-mdtlov.qos_prio_free |
+ do_facet $SINGLEMDS lctl get_param -n lo[vd].*-mdtlov.qos_prio_free |
head -n1
declare -a AVAIL
free_min_max
#define OBD_FAIL_MDS_OSC_CREATE_FAIL 0x147
local old_rr=$(do_facet $SINGLEMDS lctl get_param -n \
- lo*.$FSNAME-MDT0000-mdtlov.qos_threshold_rr | head -1)
+ lo[vd].$FSNAME-MDT0000-mdtlov.qos_threshold_rr | head -1)
[ -z "$old_rr" ] && skip "no QOS"
do_facet $SINGLEMDS lctl set_param \
- lo*.$FSNAME-MDT0000-mdtlov.qos_threshold_rr=0
+ lo[vd].$FSNAME-MDT0000-mdtlov.qos_threshold_rr=0
mkdir -p $DIR/$tdir
do_facet $SINGLEMDS lctl set_param fail_loc=0x147
createmany -o $DIR/$tdir/f- 20 || error "can't create"
do_facet $SINGLEMDS lctl set_param fail_loc=0
rm -rf $DIR/$tdir
do_facet $SINGLEMDS lctl set_param \
- lo*.$FSNAME-MDT0000-mdtlov.qos_threshold_rr=$old_rr
+ lo[vd].$FSNAME-MDT0000-mdtlov.qos_threshold_rr=$old_rr
}
run_test 116b "QoS shouldn't LBUG if not enough OSTs found on the 2nd pass"
# on the mdt's osc
local mdtosc_proc1=$(get_mdtosc_proc_path $SINGLEMDS $OST)
local last_id=$(do_facet $SINGLEMDS lctl get_param -n \
- osc.$mdtosc_proc1.prealloc_last_id)
+ osp.$mdtosc_proc1.prealloc_last_id)
local next_id=$(do_facet $SINGLEMDS lctl get_param -n \
- osc.$mdtosc_proc1.prealloc_next_id)
+ osp.$mdtosc_proc1.prealloc_next_id)
$LFS df -i
createmany -o $DIR/$tdir/f $MDSOBJS || return 3
local last_id2=$(do_facet mds${MDSIDX} lctl get_param -n \
- osc.$mdtosc_proc1.prealloc_last_id)
+ osp.$mdtosc_proc1.prealloc_last_id)
local next_id2=$(do_facet mds${MDSIDX} lctl get_param -n \
- osc.$mdtosc_proc1.prealloc_next_id)
+ osp.$mdtosc_proc1.prealloc_next_id)
echo "after creation, last_id=$last_id2, next_id=$next_id2"
$LFS df -i
}
run_test 252 "check lr_reader tool"
-test_253_fill_ost() {
- local size_mb #how many MB should we write to pass watermark
- local lwm=$3 #low watermark
- local free_10mb #10% of free space
-
- free_kb=$($LFS df $MOUNT | grep $1 | awk '{ print $4 }')
- size_mb=$((free_kb / 1024 - lwm))
- free_10mb=$((free_kb / 10240))
- #If 10% of free space cross low watermark use it
- if (( free_10mb > size_mb )); then
- size_mb=$free_10mb
- else
- #At least we need to store 1.1 of difference between
- #free space and low watermark
- size_mb=$((size_mb + size_mb / 10))
- fi
- if (( lwm <= $((free_kb / 1024)) )) || [ ! -f $DIR/$tdir/1 ]; then
- dd if=/dev/zero of=$DIR/$tdir/1 bs=1M count=$size_mb \
- oflag=append conv=notrunc
- fi
-
- sleep_maxage
-
- free_kb=$($LFS df $MOUNT | grep $1 | awk '{ print $4 }')
- echo "OST still has $((free_kb / 1024)) mbytes free"
-}
-
test_253() {
[ $PARALLEL == "yes" ] && skip "skip parallel run"
remote_mds_nodsh && skip "remote MDS with nodsh"
local ostidx=0
local rc=0
+ local ost_name=$(ostname_from_index $ostidx)
- local ost_name=$($LFS osts |
- sed -n 's/^'$ostidx': \(.*\)_UUID .*/\1/p')
# on the mdt's osc
local mdtosc_proc1=$(get_mdtosc_proc_path $SINGLEMDS $ost_name)
do_facet $SINGLEMDS $LCTL get_param -n \
wait_delete_completed
mkdir $DIR/$tdir
- local last_wm_h=$(do_facet $SINGLEMDS $LCTL get_param -n \
- osp.$mdtosc_proc1.reserved_mb_high)
- local last_wm_l=$(do_facet $SINGLEMDS $LCTL get_param -n \
- osp.$mdtosc_proc1.reserved_mb_low)
- echo "prev high watermark $last_wm_h, prev low watermark $last_wm_l"
-
if ! combined_mgs_mds ; then
mount_mgs_client
fi
- create_pool $FSNAME.$TESTNAME || error "Pool creation failed"
- do_facet mgs $LCTL pool_add $FSNAME.$TESTNAME $ost_name ||
- error "Adding $ost_name to pool failed"
-
- # Wait for client to see a OST at pool
- wait_update $HOSTNAME "$LCTL get_param -n
- lov.$FSNAME-*.pools.$TESTNAME | sort -u |
- grep $ost_name" "$ost_name""_UUID" $((TIMEOUT/2)) ||
- error "Client can not see the pool"
+ pool_add $TESTNAME || error "Pool creation failed"
+ pool_add_targets $TESTNAME 0 || error "Pool add targets failed"
+
$LFS setstripe $DIR/$tdir -i $ostidx -c 1 -p $FSNAME.$TESTNAME ||
error "Setstripe failed"
- dd if=/dev/zero of=$DIR/$tdir/0 bs=1M count=10
- local blocks=$($LFS df $MOUNT | grep $ost_name | awk '{ print $4 }')
- echo "OST still has $((blocks/1024)) mbytes free"
-
- local new_lwm=$((blocks/1024-10))
- do_facet $SINGLEMDS $LCTL set_param \
- osp.$mdtosc_proc1.reserved_mb_high=$((new_lwm+5))
- do_facet $SINGLEMDS $LCTL set_param \
- osp.$mdtosc_proc1.reserved_mb_low=$new_lwm
+ dd if=/dev/zero of=$DIR/$tdir/$tfile.0 bs=1M count=10
- test_253_fill_ost $ost_name $mdtosc_proc1 $new_lwm
-
- #First enospc could execute orphan deletion so repeat.
- test_253_fill_ost $ost_name $mdtosc_proc1 $new_lwm
+ local wms=$(ost_watermarks_set_enospc $tfile $ostidx |
+ grep "watermarks")
+ stack_trap "ost_watermarks_clear_enospc $tfile $ostidx $wms" EXIT
local oa_status=$(do_facet $SINGLEMDS $LCTL get_param -n \
osp.$mdtosc_proc1.prealloc_status)
echo "prealloc_status $oa_status"
- dd if=/dev/zero of=$DIR/$tdir/2 bs=1M count=1 &&
+ dd if=/dev/zero of=$DIR/$tdir/$tfile.1 bs=1M count=1 &&
error "File creation should fail"
+
#object allocation was stopped, but we still able to append files
- dd if=/dev/zero of=$DIR/$tdir/1 bs=1M seek=6 count=5 oflag=append ||
- error "Append failed"
- rm -f $DIR/$tdir/1 $DIR/$tdir/0 $DIR/$tdir/r*
+ dd if=/dev/zero of=$DIR/$tdir/$tfile.0 bs=1M seek=6 count=5 \
+ oflag=append || error "Append failed"
+
+ rm -f $DIR/$tdir/$tfile.0
+
+ # For this test, we want to delete the files we created to go out of
+ # space but leave the watermark, so we remain nearly out of space
+ ost_watermarks_enospc_delete_files $tfile $ostidx
wait_delete_completed
sleep_maxage
for i in $(seq 10 12); do
- dd if=/dev/zero of=$DIR/$tdir/$i bs=1M count=1 2>/dev/null ||
- error "File creation failed after rm";
+ dd if=/dev/zero of=$DIR/$tdir/$tfile.$i bs=1M count=1 \
+ 2>/dev/null || error "File creation failed after rm"
done
oa_status=$(do_facet $SINGLEMDS $LCTL get_param -n \
if (( oa_status != 0 )); then
error "Object allocation still disable after rm"
fi
- do_facet $SINGLEMDS $LCTL set_param \
- osp.$mdtosc_proc1.reserved_mb_high=$last_wm_h
- do_facet $SINGLEMDS $LCTL set_param \
- osp.$mdtosc_proc1.reserved_mb_low=$last_wm_l
-
-
- do_facet mgs $LCTL pool_remove $FSNAME.$TESTNAME $ost_name ||
- error "Remove $ost_name from pool failed"
- do_facet mgs $LCTL pool_destroy $FSNAME.$TESTNAME ||
- error "Pool destroy fialed"
if ! combined_mgs_mds ; then
umount_mgs_client
qos_prio_free=${qos_prio_free%%%}
qos_threshold_rr=$($LCTL get_param -n lmv.*.qos_threshold_rr | head -n1)
qos_threshold_rr=${qos_threshold_rr%%%}
+ qos_maxage=$($LCTL get_param -n lmv.*.qos_maxage)
stack_trap "$LCTL set_param lmv.*.qos_prio_free=$qos_prio_free" EXIT
stack_trap "$LCTL set_param lmv.*.qos_threshold_rr=$qos_threshold_rr" \
EXIT
+ stack_trap "$LCTL set_param lmv.*.qos_maxage=$qos_maxage" EXIT
echo "mkdir with roundrobin"
rm -rf $DIR/$tdir/*
$LCTL set_param lmv.*.qos_threshold_rr=$qos_threshold_rr
+ # Shorten statfs result age, so that it can be updated in time
+ $LCTL set_param lmv.*.qos_maxage=1
+ sleep_maxage
local ffree
local max
saved_MGS_MOUNT_OPTS=$MGS_MOUNT_OPTS
saved_MDS_MOUNT_OPTS=$MDS_MOUNT_OPTS
saved_OST_MOUNT_OPTS=$OST_MOUNT_OPTS
+saved_MOUNT_OPTS=$MOUNT_OPTS
cleanup_802a() {
trap 0
MGS_MOUNT_OPTS=$saved_MGS_MOUNT_OPTS
MDS_MOUNT_OPTS=$saved_MDS_MOUNT_OPTS
OST_MOUNT_OPTS=$saved_OST_MOUNT_OPTS
+ MOUNT_OPTS=$saved_MOUNT_OPTS
setupall
}
error "(4) Mount client without 'ro' should fail"
echo "Mount client with ro should succeed"
- mount_client $MOUNT ro ||
+ MOUNT_OPTS=$(csa_add "$MOUNT_OPTS" -o ro)
+ mount_client $MOUNT ||
error "(5) Mount client with 'ro' should succeed"
echo "Modify should be refused"
}
run_test 814 "sparse cp works as expected (LU-12361)"
+test_815()
+{
+ writeme -b 100 $DIR/$tfile || error "write 100 bytes failed"
+ writeme -b 0 $DIR/$tfile || error "write 0 byte failed"
+}
+run_test 815 "zero byte tiny write doesn't hang (LU-12382)"
+
+test_816() {
+ $LFS setstripe -c 1 -i 0 $DIR/$tfile
+ # 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
+ lru_resize_disable osc
+ local before
+ local now
+ before=$($LCTL get_param -n \
+ ldlm.namespaces.$FSNAME-OST0000-osc-[^M]*.lru_size)
+
+ wait_osc_import_state client ost1 IDLE
+ dd if=/dev/null of=$DIR/$tfile bs=1k count=1 conv=sync
+ now=$($LCTL get_param -n \
+ ldlm.namespaces.$FSNAME-OST0000-osc-[^M]*.lru_size)
+ [ $before == $now ] || error "lru_size changed $before != $now"
+}
+run_test 816 "do not reset lru_resize on idle reconnect"
+
#
# tests that do cleanup/setup should be run at the end
#