diff options
author | Darrick J. Wong <djwong@kernel.org> | 2023-04-25 17:14:40 -0700 |
---|---|---|
committer | Zorro Lang <zlang@kernel.org> | 2023-05-01 00:05:02 +0800 |
commit | 2e361b3da66d3537ec9b78d1b7bd12654a3a1ef8 (patch) | |
tree | 76be56a1eb565dc6361b778012d521aa97158dfd | |
parent | 3e85dd4fe4236d8ef8dc9f9b542a56dd00d16a17 (diff) |
misc: add duration for recovery loop testsv2023.05.01
Make it so that we can run recovery loop tests for an exact number of
seconds.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Andrey Albershteyn <aalbersh@redhat.com>
Signed-off-by: Zorro Lang <zlang@kernel.org>
-rw-r--r-- | common/rc | 34 | ||||
-rwxr-xr-x | tests/generic/019 | 1 | ||||
-rwxr-xr-x | tests/generic/388 | 2 | ||||
-rwxr-xr-x | tests/generic/475 | 2 | ||||
-rwxr-xr-x | tests/generic/482 | 1 | ||||
-rwxr-xr-x | tests/generic/648 | 8 |
6 files changed, 42 insertions, 6 deletions
@@ -5183,6 +5183,40 @@ _require_unix_perm_checking() esac } +# Decide if a soak test should continue looping. The sole parameter is the +# number of soak loops that the test wants to run by default. The actual +# loop iteration number is stored in SOAK_LOOPIDX until the loop completes. +# +# If the test runner set a SOAK_DURATION value, this predicate will keep +# looping until it has run for at least that long. +_soak_loop_running() { + local max_soak_loops="$1" + + test -z "$SOAK_LOOPIDX" && SOAK_LOOPIDX=1 + + if [ -n "$SOAK_DURATION" ]; then + if [ -z "$SOAK_DEADLINE" ]; then + SOAK_DEADLINE="$(( $(date +%s) + SOAK_DURATION))" + fi + + local now="$(date +%s)" + if [ "$now" -gt "$SOAK_DEADLINE" ]; then + unset SOAK_DEADLINE + unset SOAK_LOOPIDX + return 1 + fi + SOAK_LOOPIDX=$((SOAK_LOOPIDX + 1)) + return 0 + fi + + if [ "$SOAK_LOOPIDX" -gt "$max_soak_loops" ]; then + unset SOAK_LOOPIDX + return 1 + fi + SOAK_LOOPIDX=$((SOAK_LOOPIDX + 1)) + return 0 +} + init_rc ################################################################################ diff --git a/tests/generic/019 b/tests/generic/019 index b68dd90c..b81c1d17 100755 --- a/tests/generic/019 +++ b/tests/generic/019 @@ -30,6 +30,7 @@ _cleanup() } RUN_TIME=$((20+10*$TIME_FACTOR)) +test -n "$SOAK_DURATION" && RUN_TIME="$SOAK_DURATION" NUM_JOBS=$((4*LOAD_FACTOR)) BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV` FILE_SIZE=$((BLK_DEV_SIZE * 512)) diff --git a/tests/generic/388 b/tests/generic/388 index 9cd737e8..4a5be669 100755 --- a/tests/generic/388 +++ b/tests/generic/388 @@ -42,7 +42,7 @@ _scratch_mkfs >> $seqres.full 2>&1 _require_metadata_journaling $SCRATCH_DEV _scratch_mount -for i in $(seq 1 $((50 * TIME_FACTOR)) ); do +while _soak_loop_running $((50 * TIME_FACTOR)); do ($FSSTRESS_PROG $FSSTRESS_AVOID -d $SCRATCH_MNT -n 999999 -p 4 >> $seqres.full &) \ > /dev/null 2>&1 diff --git a/tests/generic/475 b/tests/generic/475 index c426402e..0cbf5131 100755 --- a/tests/generic/475 +++ b/tests/generic/475 @@ -41,7 +41,7 @@ _require_metadata_journaling $SCRATCH_DEV _dmerror_init _dmerror_mount -for i in $(seq 1 $((50 * TIME_FACTOR)) ); do +while _soak_loop_running $((50 * TIME_FACTOR)); do ($FSSTRESS_PROG $FSSTRESS_AVOID -d $SCRATCH_MNT -n 999999 -p $((LOAD_FACTOR * 4)) >> $seqres.full &) \ > /dev/null 2>&1 diff --git a/tests/generic/482 b/tests/generic/482 index 28c83a23..6d8396d9 100755 --- a/tests/generic/482 +++ b/tests/generic/482 @@ -64,6 +64,7 @@ if [ $nr_cpus -gt 8 ]; then fi fsstress_args=$(_scale_fsstress_args -w -d $SCRATCH_MNT -n 512 -p $nr_cpus \ $FSSTRESS_AVOID) + devsize=$((1024*1024*200 / 512)) # 200m phys/virt size csize=$((1024*64 / 512)) # 64k cluster size lowspace=$((1024*1024 / 512)) # 1m low space threshold diff --git a/tests/generic/648 b/tests/generic/648 index d7bf5697..3b3544ff 100755 --- a/tests/generic/648 +++ b/tests/generic/648 @@ -74,14 +74,14 @@ snap_loop_fs() { fsstress=($FSSTRESS_PROG $FSSTRESS_AVOID -d "$loopmnt" -n 999999 -p "$((LOAD_FACTOR * 4))") -for i in $(seq 1 $((25 * TIME_FACTOR)) ); do +while _soak_loop_running $((25 * TIME_FACTOR)); do touch $scratch_aliveflag snap_loop_fs >> $seqres.full 2>&1 & if ! _mount $loopimg $loopmnt -o loop; then rm -f $scratch_aliveflag _metadump_dev $loopimg $seqres.loop.$i.md - _fail "iteration $i loopimg mount failed" + _fail "iteration $SOAK_LOOPIDX loopimg mount failed" break fi @@ -126,12 +126,12 @@ for i in $(seq 1 $((25 * TIME_FACTOR)) ); do done if [ $is_unmounted -ne 0 ];then cat $tmp.unmount.err - _fail "iteration $i scratch unmount failed" + _fail "iteration $SOAK_LOOPIDX scratch unmount failed" fi _dmerror_load_working_table if ! _dmerror_mount; then _metadump_dev $DMERROR_DEV $seqres.scratch.$i.md - _fail "iteration $i scratch mount failed" + _fail "iteration $SOAK_LOOPIDX scratch mount failed" fi done |