Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix zpool_scrub_* test cases #4463

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions module/zfs/zio_inject.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,10 @@ zio_handle_io_delay(zio_t *zio)
if (handler->zi_record.zi_cmd != ZINJECT_DELAY_IO)
continue;

if (handler->zi_record.zi_freq != 0 &&
spa_get_random(100) >= handler->zi_record.zi_freq);
continue;

if (vd->vdev_guid == handler->zi_record.zi_guid) {
seconds = handler->zi_record.zi_timer;
break;
Expand Down
2 changes: 1 addition & 1 deletion scripts/zfs-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ OPTIONS:
-k Disable cleanup after test failure
-f Use files only, disables block device tests
-d DIR Use DIR for files and loopback devices
-s SIZE Use vdevs of SIZE (default: 4G)
-s SIZE Use vdevs of SIZE (default: 2G)
-r RUNFILE Run tests in RUNFILE (default: linux.run)

EXAMPLES:
Expand Down
6 changes: 2 additions & 4 deletions tests/runfiles/linux.run
Original file line number Diff line number Diff line change
Expand Up @@ -327,11 +327,9 @@ tests = ['zpool_remove_001_neg', 'zpool_remove_002_pos']
[tests/functional/cli_root/zpool_replace]
tests = ['zpool_replace_001_neg']

# DISABLED:
# zpool_scrub_004_pos - needs investigation
# zpool_scrub_005_pos - needs investigation
[tests/functional/cli_root/zpool_scrub]
tests = ['zpool_scrub_001_neg', 'zpool_scrub_002_pos', 'zpool_scrub_003_pos']
tests = ['zpool_scrub_001_neg', 'zpool_scrub_002_pos', 'zpool_scrub_003_pos',
'zpool_scrub_004_pos', 'zpool_scrub_005_pos']

[tests/functional/cli_root/zpool_set]
tests = ['zpool_set_001_pos', 'zpool_set_002_neg', 'zpool_set_003_neg']
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#

. $STF_SUITE/include/libtest.shlib
. $STF_SUITE/tests/functional/cli_root/zpool_scrub/zpool_scrub.cfg

#
# DESCRIPTION:
Expand All @@ -36,13 +37,20 @@
# 2. zpool scrub the pool
# 3. Verify zpool scrub -s succeed when the system is scrubbing.
#
# NOTES:
# A 1 second delay is added to 10% of zio's in order to ensure that
# the scrub does not complete before it has a chance to be cancelled.
# This can occur when testing with small pools or very fast hardware.
#

verify_runnable "global"

log_assert "Verify scrub -s works correctly."

log_must $ZINJECT -d $DISK1 -f10 -D1 $TESTPOOL
log_must $ZPOOL scrub $TESTPOOL
log_must $ZPOOL scrub -s $TESTPOOL
log_must is_pool_scrub_stopped $TESTPOOL

log_must $ZINJECT -c all
log_pass "Verify scrub -s works correctly."
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#

. $STF_SUITE/include/libtest.shlib
. $STF_SUITE/tests/functional/cli_root/zpool_scrub/zpool_scrub.cfg

#
# DESCRIPTION:
Expand All @@ -38,6 +39,11 @@
# 3. Check the completed percent and invoke another scrub
# 4. Check the percent again, verify a new scrub started.
#
# NOTES:
# A 1 second delay is added to 10% of zio's in order to ensure that
# the scrub does not complete before it has a chance to be restarted.
# This can occur when testing with small pools or very fast hardware.
#

verify_runnable "global"

Expand All @@ -55,6 +61,7 @@ function get_scrub_percent
log_assert "scrub command terminates the existing scrub process and starts" \
"a new scrub."

log_must $ZINJECT -d $DISK1 -f10 -D1 $TESTPOOL
log_must $ZPOOL scrub $TESTPOOL
typeset -i PERCENT=30 percent=0
while ((percent < PERCENT)) ; do
Expand All @@ -67,5 +74,6 @@ if ((percent > PERCENT)); then
log_fail "zpool scrub don't stop existing scrubbing process."
fi

log_must $ZINJECT -c all
log_pass "scrub command terminates the existing scrub process and starts" \
"a new scrub."
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,16 @@
# 2. Detach one of devices
# 3. Verify scrub failed until the resilver completed
#
# NOTES:
# A 1 second delay is added to 10% of zio's in order to ensure that
# the resilver does not complete before the scrub can be issue. This
# can occur when testing with small pools or very fast hardware.

verify_runnable "global"

log_assert "Resilver prevent scrub from starting until the resilver completes"

log_must $ZINJECT -d $DISK1 -f10 -D1 $TESTPOOL
log_must $ZPOOL detach $TESTPOOL $DISK2
log_must $ZPOOL attach $TESTPOOL $DISK1 $DISK2
log_must is_pool_resilvering $TESTPOOL
Expand All @@ -56,4 +61,5 @@ while ! is_pool_resilvered $TESTPOOL; do
$SLEEP 1
done

log_must $ZINJECT -c all
log_pass "Resilver prevent scrub from starting until the resilver completes"