Date: Wed, 16 Dec 2015 21:32:21 +0000 (UTC) From: Alan Somers <asomers@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r292374 - in projects/zfsd/head/tests/sys/cddl/zfs: include tests/hotspare tests/zfsd Message-ID: <201512162132.tBGLWL4f084015@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: asomers Date: Wed Dec 16 21:32:21 2015 New Revision: 292374 URL: https://svnweb.freebsd.org/changeset/base/292374 Log: Fix ZFS test suite bugs introduced by change 292346 These bugs were all ksh93 syntax bugs. Oddly, ksh93 will exit 0 when it encounters a syntax error, so these bugs weren't noticed at the time. Kyua thought that the tests were passing. Also, Improve a few tests while I'm at it. tests/sys/cddl/zfs/tests/zfsd/zfsd_hotspare_007_pos.ksh tests/sys/cddl/zfs/tests/zfsd/zfsd_degrade_001_pos.ksh tests/sys/cddl/zfs/tests/zfsd/zfsd_degrade_002_pos.ksh tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_003_pos.ksh tests/sys/cddl/zfs/tests/zfsd/zfsd_hotspare_004_pos.ksh Fix ksh93 syntax errors and typos. Also, fix some comments. tests/sys/cddl/zfs/tests/zfsd/zfsd.kshlib tests/sys/cddl/zfs/tests/zfsd/zfsd_hotspare_004_pos.ksh tests/sys/cddl/zfs/tests/zfsd/zfsd_hotspare_007_pos.ksh tests/sys/cddl/zfs/tests/zfsd/zfsd_import_001_pos.ksh tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_001_pos.ksh tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_003_pos.ksh Turn wait_for_disk_to_reappear's global variables into arguments tests/sys/cddl/zfs/tests/zfsd/zfsd_import_001_pos.ksh Improve a debugging statement and a comment tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_003_pos.ksh * wait_for_pool_removal only works for tests that disable a single disk. Replace its use by wait_for_pool_dev_state_change * Fix a ksh93 scoping issue. reconnect_disk declares EXPANDER and PHY as local variables, shadowing globals of the same name, but then uses them as if they were still global. * Get rid of the DEVNAME_MUST_DIFFER check. It never worked because the variable was referenced by two different names. And it's not necessary because we always want to perform the check. * Fix some variable definitions that don't match their references: s/_disks/_disk/ * In reconnect_disk, call wait_for_pool_dev_state_change with the correct devname. * If the test should start with the DISKS array not in ascending order, detect this and disable the disks in the correct order to produce the desired behavior. tests/sys/cddl/zfs/tests/hotspare/hotspare.kshlib When failing a test in wait_for_resilver, show the final zpool status to assist debugging efforts. tests/sys/cddl/zfs/include/libsas.kshlib Style. tests/sys/cddl/zfs/tests/zfsd/zfsd.kshlib Remark zfsd_hotspare_007_pos and zfsd_degrade_002_pos as failing. They were previously unmarked after change 292346 made them appear to pass, but, but that was erroneous. They were still failing, but were exiting 0 due to syntax errors so Kyua thought that they were passing. tests/sys/cddl/zfs/tests/zfsd/zfsd_test.sh Increase the amount of io in corrupt_pool_vdev to ensure that there are enough checksum errors for the device to become degraded. The I/O was unintentionally decreased by change 292346. Sponsored by: Spectra Logic Corp Modified: projects/zfsd/head/tests/sys/cddl/zfs/include/libsas.kshlib projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare/hotspare.kshlib projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd.kshlib projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_degrade_001_pos.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_degrade_002_pos.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_hotspare_004_pos.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_hotspare_007_pos.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_import_001_pos.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_001_pos.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_003_pos.ksh Modified: projects/zfsd/head/tests/sys/cddl/zfs/include/libsas.kshlib ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/include/libsas.kshlib Wed Dec 16 21:30:45 2015 (r292373) +++ projects/zfsd/head/tests/sys/cddl/zfs/include/libsas.kshlib Wed Dec 16 21:32:21 2015 (r292374) @@ -131,7 +131,7 @@ function find_disk_by_phy IFS=", \n" set -A PERIPHLIST $j unset IFS - [ "${PERIPHLIST[0]}" != "$2" ] && continue + [ "${PERIPHLIST[0]}" != "$PHY" ] && continue typeset NUMPERIPHS=${#PERIPHLIST[*]} Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare/hotspare.kshlib ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare/hotspare.kshlib Wed Dec 16 21:30:45 2015 (r292373) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare/hotspare.kshlib Wed Dec 16 21:32:21 2015 (r292374) @@ -117,6 +117,7 @@ while [[ $i -lt $timeout ]]; do fi (( i += 1 )) if [[ $i == $timeout ]]; then + $ZPOOL status $TESTPOOL log_fail "Pool didn't resilver in ${timeout} seconds" fi $SLEEP 1 Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd.kshlib ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd.kshlib Wed Dec 16 21:30:45 2015 (r292373) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd.kshlib Wed Dec 16 21:32:21 2015 (r292374) @@ -30,14 +30,15 @@ function wait_for_disk_to_reappear { typeset -i timeout=$1 - typeset EXPECTED_DISK=$2 + typeset EXPANDER=$2 + typeset PHY=$3 for ((; $timeout > 0; timeout=$timeout-1)); do find_disk_by_phy $EXPANDER $PHY [ -n "$FOUNDDISK" -a -e "/dev/$FOUNDDISK" ] && return $SLEEP 1 done - log_fail "ERROR: Disk ${EXPECTED_DISK} never reappeared" + log_fail "ERROR: Disk at ${EXPANDER}:${PHY} never reappeared" } function wait_for_pool_dev_state_change @@ -79,7 +80,7 @@ function corrupt_pool_vdev typeset file=$3 # do some IO on the pool - log_must $DD if=/dev/zero of=$file bs=1024k count=16 + log_must $DD if=/dev/zero of=$file bs=1024k count=128 # scribble on the underlying file to corrupt the vdev log_must $DD if=/dev/urandom of=$vdev bs=1024k count=64 conv=notrunc @@ -135,7 +136,7 @@ function do_autoreplace log_note "Reenabling phy on expander $EXPANDER phy $PHY" enable_sas_disk $EXPANDER $PHY rescan_disks $EXPANDER - wait_for_disk_to_reappear 30 $REMOVAL_DISK + wait_for_disk_to_reappear 30 $EXPANDER $PHY # Erase the missing dev's ZFS label log_must $ZPOOL labelclear -f $( find_disks $FOUNDDISK ) @@ -158,7 +159,7 @@ function do_autoreplace log_note "Reenabling phy on expander $EXPANDER phy $PHY" enable_sas_disk $EXPANDER $PHY rescan_disks $EXPANDER - wait_for_disk_to_reappear 30 $REMOVAL_DISK + wait_for_disk_to_reappear 30 $EXPANDER $PHY } function autoreplace_cleanup Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_degrade_001_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_degrade_001_pos.ksh Wed Dec 16 21:30:45 2015 (r292373) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_degrade_001_pos.ksh Wed Dec 16 21:32:21 2015 (r292374) @@ -28,6 +28,7 @@ # $FreeBSD$ . $STF_SUITE/include/libtest.kshlib +. $STF_SUITE/tests/zfsd/zfsd.kshlib ################################################################################ # @@ -81,7 +82,7 @@ for type in "raidz" "mirror"; do log_note "Testing raid type $type" create_pool $TESTPOOL $type ${VDEVS} - corrupt_pool $TESTPOOL $VDEV1 $TESTFILE + corrupt_pool_vdev $TESTPOOL $VDEV1 $TESTFILE destroy_pool $TESTPOOL done Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_degrade_002_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_degrade_002_pos.ksh Wed Dec 16 21:30:45 2015 (r292373) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_degrade_002_pos.ksh Wed Dec 16 21:32:21 2015 (r292374) @@ -28,12 +28,13 @@ # $FreeBSD$ . $STF_SUITE/include/libtest.kshlib +. $STF_SUITE/tests/zfsd/zfsd.kshlib ################################################################################ # # __stc_assertion_start # -# ID: zfsd_degrade_001_pos +# ID: zfsd_degrade_002_pos # # DESCRIPTION: # If an active hotspare experiences checksum errors, it will become degraded. @@ -74,7 +75,7 @@ function cleanup $RM -f $VDEVS } -log_assert "ZFS will degrade a vdev that produces checksum errors" +log_assert "ZFS will degrade a spare vdev that produces checksum errors" log_onexit cleanup @@ -93,7 +94,7 @@ for type in "mirror" "raidz"; do # (though it's usually faster). wait_for_pool_dev_state_change 60 $SPARE_VDEV INUSE - corrupt_pool $TESTPOOL $SPARE_VDEV $TESTFILE + corrupt_pool_vdev $TESTPOOL $SPARE_VDEV $TESTFILE destroy_pool $TESTPOOL done Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_hotspare_004_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_hotspare_004_pos.ksh Wed Dec 16 21:30:45 2015 (r292373) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_hotspare_004_pos.ksh Wed Dec 16 21:32:21 2015 (r292374) @@ -89,14 +89,14 @@ function verify_assertion # spare_dev # Reenable the missing disk log_note "Reenabling phy on expander $EXPANDER phy $PHY" enable_sas_disk $EXPANDER $PHY - wait_for_disk_to_reappear 20 + wait_for_disk_to_reappear 20 $EXPANDER $PHY # Check that the disk has rejoined the pool & resilvered wait_for_pool_dev_state_change 20 $REMOVAL_DISK ONLINE wait_until_resilvered # Finally, check that the spare deactivated - wait_for_pool_state_change $spare_dev AVAIL + wait_for_pool_dev_state_change 20 $spare_dev AVAIL } Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_hotspare_007_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_hotspare_007_pos.ksh Wed Dec 16 21:30:45 2015 (r292373) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_hotspare_007_pos.ksh Wed Dec 16 21:32:21 2015 (r292374) @@ -87,12 +87,12 @@ function verify_assertion # spare_dev restart_zfsd # Check that the spare was activated - wait_for_pool_dev_state_change $spare_dev INUSE + wait_for_pool_dev_state_change 20 $spare_dev INUSE # Reenable the missing disk log_note "Reenabling phy on expander $EXPANDER phy $PHY" enable_sas_disk $EXPANDER $PHY - wait_for_disk_to_reappear 20 + wait_for_disk_to_reappear 20 $EXPANDER $PHY } typeset REMOVAL_DISK=$DISK0 Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_import_001_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_import_001_pos.ksh Wed Dec 16 21:30:45 2015 (r292373) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_import_001_pos.ksh Wed Dec 16 21:32:21 2015 (r292374) @@ -38,7 +38,7 @@ # # DESCRIPTION: # If a removed drive gets reinserted while the pool is exported, it will -# replace its spare when reinserted. +# replace its spare when reimported. # # This also applies to drives that get reinserted while the machine is # powered off. @@ -92,7 +92,7 @@ function verify_assertion # spare_dev enable_sas_disk $EXPANDER $PHY # Check that the disk has returned - wait_for_disk_to_reappear 20 + wait_for_disk_to_reappear 20 $EXPANDER $PHY # Import the pool log_must $ZPOOL import $TESTPOOL @@ -104,7 +104,7 @@ function verify_assertion # spare_dev while ! is_pool_resilvered $TESTPOOL; do $SLEEP 2 done - log_must $ZPOOL status + log_must $ZPOOL status $TESTPOOL #Finally, check that the spare deactivated wait_for_pool_dev_state_change 20 $spare_dev AVAIL Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_001_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_001_pos.ksh Wed Dec 16 21:30:45 2015 (r292373) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_001_pos.ksh Wed Dec 16 21:32:21 2015 (r292374) @@ -79,7 +79,7 @@ for type in "raidz" "mirror"; do # Re-enable the disk, we don't want to leave it turned off log_note "Re-enabling phy $PHY on expander $EXPANDER" enable_sas_disk $EXPANDER $PHY - wait_for_disk_to_reappear 20 + wait_for_disk_to_reappear 20 $EXPANDER $PHY # Disk should auto-join the zpool & be resilvered. wait_for_pool_dev_state_change 20 $REMOVAL_DISK ONLINE Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_003_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_003_pos.ksh Wed Dec 16 21:30:45 2015 (r292373) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_003_pos.ksh Wed Dec 16 21:32:21 2015 (r292374) @@ -35,6 +35,7 @@ . $STF_SUITE/include/libtest.kshlib . $STF_SUITE/include/libsas.kshlib +. $STF_SUITE/tests/hotspare/hotspare.kshlib . $STF_SUITE/tests/zfsd/zfsd.kshlib verify_runnable "global" @@ -68,7 +69,7 @@ function remove_disk [ -n "$FOUNDDISK" ] && log_fail "Disk \"$DISK\" was not removed" # Check to make sure ZFS sees the disk as removed - wait_for_pool_removal 20 + wait_for_pool_dev_state_change 20 $DISK REMOVED } # arg1: disk's old devname @@ -80,7 +81,6 @@ function reconnect_disk typeset DISK=$1 typeset EXPANDER=$2 typeset PHY=$3 - typeset DEVNAME_DIFFERS=$4 # Re-enable the disk, we don't want to leave it turned off log_note "Re-enabling phy $PHY on expander $EXPANDER" @@ -88,20 +88,18 @@ function reconnect_disk log_note "Checking to see whether disk has reappeared" # Make sure the disk is back in the topology - wait_for_disk_to_reappear 20 + wait_for_disk_to_reappear 20 $EXPANDER $PHY - if [ -n "$DEVNAME_MUST_DIFFER" ]; then - prev_disks=$(find_disks $FOUNDDISK) - cur_disks=$(find_disks $DISK) - - # If you get this, the test must be fixed to guarantee that - # it will reappear with a different name. - [ "${prev_disk}" = "${cur_disk}" ] && log_unsupported \ - "Disk $DISK reappeared with the same devname." - fi + prev_disk=$(find_disks $DISK) + cur_disk=$(find_disks $FOUNDDISK) + + # If you get this, the test must be fixed to guarantee that + # it will reappear with a different name. + [ "${prev_disk}" = "${cur_disk}" ] && log_unsupported \ + "Disk $DISK reappeared with the same devname." #Disk should have auto-joined the zpool. Verify it's status is online. - wait_for_pool_dev_state_change 20 $DISK ONLINE + wait_for_pool_dev_state_change 20 $FOUNDDISK ONLINE } log_assert "ZFSD will correctly replace disks that disappear and reappear \ @@ -122,6 +120,12 @@ child_pids="" set -A DISKS_ARRAY $DISKS typeset DISK0=${DISKS_ARRAY[0]} typeset DISK1=${DISKS_ARRAY[1]} +if [ ${DISK0##/dev/da} -gt ${DISK1##/dev/da} ]; then + # Swap disks so we'll disable the lowest numbered first + typeset TMP="$DISK1" + DISK1="$DISK0" + DISK0="$TMP" +fi for type in "raidz2" "mirror"; do # Create a pool on the supplied disks
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201512162132.tBGLWL4f084015>