diff options
author | David Quigley <[email protected]> | 2017-10-23 12:42:37 -0600 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2017-10-23 11:42:37 -0700 |
commit | d9daa7abcf04f75ba013ec954c4f2d4854ba1cbc (patch) | |
tree | 794726af3d7e4b9f28e1a930f39725bb8a83a7a2 /tests/zfs-tests/include | |
parent | f8cd871a01a5e38e35cb4d44768dce09265265f4 (diff) |
ZTS: Add auto-spare tests
The ZED is expected to automatically kick in a hot spare device
when there's one available in the pool and a sufficient number of
read errors have been encountered. Use zinject to simulate the
failure condition and verify the hot spare is used.
auto_spare_001_pos.ksh: read IO errors, the vdev is FAULTED
auto_spare_002_pos.ksh: read CHECKSUM errors, the vdev is DEGRADE
Reviewed by: Richard Elling <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: David Quigley <[email protected]>
Closes #6280
Diffstat (limited to 'tests/zfs-tests/include')
-rw-r--r-- | tests/zfs-tests/include/libtest.shlib | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/zfs-tests/include/libtest.shlib b/tests/zfs-tests/include/libtest.shlib index eef678455..0e7f20f0e 100644 --- a/tests/zfs-tests/include/libtest.shlib +++ b/tests/zfs-tests/include/libtest.shlib @@ -2030,6 +2030,31 @@ function check_hotspare_state # pool disk state{inuse,avail} } # +# Wait until a hotspare transitions to a given state or times out. +# +# Return 0 when pool/disk matches expected state, 1 on timeout. +# +function wait_hotspare_state # pool disk state timeout +{ + typeset pool=$1 + typeset disk=${2#$/DEV_DSKDIR/} + typeset state=$3 + typeset timeout=${4:-60} + typeset -i i=0 + + while [[ $i -lt $timeout ]]; do + if check_hotspare_state $pool $disk $state; then + return 0 + fi + + i=$((i+1)) + sleep 1 + done + + return 1 +} + +# # Verify a given slog disk is inuse or avail # # Return 0 is pool/disk matches expected state, 1 otherwise @@ -2068,6 +2093,31 @@ function check_vdev_state # pool disk state{online,offline,unavail} } # +# Wait until a vdev transitions to a given state or times out. +# +# Return 0 when pool/disk matches expected state, 1 on timeout. +# +function wait_vdev_state # pool disk state timeout +{ + typeset pool=$1 + typeset disk=${2#$/DEV_DSKDIR/} + typeset state=$3 + typeset timeout=${4:-60} + typeset -i i=0 + + while [[ $i -lt $timeout ]]; do + if check_vdev_state $pool $disk $state; then + return 0 + fi + + i=$((i+1)) + sleep 1 + done + + return 1 +} + +# # Check the output of 'zpool status -v <pool>', # and to see if the content of <token> contain the <keyword> specified. # |