]> granicus.if.org Git - zfs/commitdiff
Fix zpool_scrub_* test cases
authorBrian Behlendorf <behlendorf1@llnl.gov>
Sat, 26 Mar 2016 21:17:26 +0000 (14:17 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 30 Mar 2016 16:30:34 +0000 (09:30 -0700)
The zpool_scrub_002, zpool_scrub_003, zpool_scrub_004 test cases fail
reliably when running against small pools or fast storage.  This
occurs because the scrub/resilver operation completes before subsequent
commands can be run.

A one second delay has been added to 10% of zio's in order to ensure
the scrub/resilver operation will run for at least several seconds.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #4450

module/zfs/zio_inject.c
scripts/zfs-tests.sh
tests/runfiles/linux.run
tests/zfs-tests/tests/functional/cli_root/zpool_scrub/zpool_scrub_002_pos.ksh
tests/zfs-tests/tests/functional/cli_root/zpool_scrub/zpool_scrub_003_pos.ksh
tests/zfs-tests/tests/functional/cli_root/zpool_scrub/zpool_scrub_004_pos.ksh

index 69836dff3cb90f4afaddcea9ef22b4fe43c1b852..a6eca871501cb244d3ef2c3a4b659391273302d1 100644 (file)
@@ -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;
index 0c8a56c275807ab2089a91e3cab6b7ac0a844a85..dada2191713b80e1974a5f5981322e676358b9d4 100755 (executable)
@@ -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:
index 0138971895e31fbcbf8609d8977d63a6760d570a..9857dba1ae4265dbc958f3cfdeaeb422cef985e7 100644 (file)
@@ -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']
index 000b4f05a381bf21f147239c6b8ed2761ea2b625..cf16444465ac2627b5b74fd3c5d3cb7b545c168a 100755 (executable)
@@ -26,6 +26,7 @@
 #
 
 . $STF_SUITE/include/libtest.shlib
+. $STF_SUITE/tests/functional/cli_root/zpool_scrub/zpool_scrub.cfg
 
 #
 # DESCRIPTION:
 #      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."
index 4f5019df1d3e558c76b1db08b75947ac62c74f6a..54e27d50db3890717b5d9e42c39a6961e11adf03 100755 (executable)
@@ -26,6 +26,7 @@
 #
 
 . $STF_SUITE/include/libtest.shlib
+. $STF_SUITE/tests/functional/cli_root/zpool_scrub/zpool_scrub.cfg
 
 #
 # DESCRIPTION:
 #      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"
 
@@ -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
@@ -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."
index f45764672af2135e5f75602f1c112a31ad827c53..c689d7995a34e19ed81778a63aaf66e55068ff21 100755 (executable)
 #      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
@@ -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"