Date: Tue, 30 Jan 2018 00:18:36 +0000 (UTC) From: Alan Somers <asomers@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r328577 - projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash Message-ID: <201801300018.w0U0IaBf079684@repo.freebsd.org>
index | next in thread | raw e-mail
Author: asomers Date: Tue Jan 30 00:18:36 2018 New Revision: 328577 URL: https://svnweb.freebsd.org/changeset/base/328577 Log: Convert zvol_thrash_001_pos to use gnop(8) tests/sys/cddl/zfs/tests/zvol_thrash/cleanup.ksh tests/sys/cddl/zfs/tests/zvol_thrash/setup.ksh tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash.cfg tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash_001_pos.ksh tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash_test.sh Use gnop(8) to remove providers instead of SAS phy control. This has several advantages: * Requires no special hardware * Works in VMs * No 2-second delay for the provider to disappear * Predictable device names during thrash tests * Simplified logic, especially during cleanup Also, speed up the test by a factor of two. This is possible because there's no longer the 2 second delay for a provider to disappear. Sponsored by: Spectra Logic Corp Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/cleanup.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/setup.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash.cfg projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash_001_pos.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash_test.sh Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/cleanup.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/cleanup.ksh Tue Jan 30 00:11:35 2018 (r328576) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/cleanup.ksh Tue Jan 30 00:18:36 2018 (r328577) @@ -29,10 +29,11 @@ # $FreeBSD$ . ${STF_SUITE}/include/libtest.kshlib +. ${STF_SUITE}/include/libgnop.kshlib -verify_runnable "global" - # Rotate logs now, because this test can generate a great volume of log entries newsyslog -default_cleanup +default_cleanup_noexit +destroy_gnops ${DISKS} +log_pass Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/setup.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/setup.ksh Tue Jan 30 00:11:35 2018 (r328576) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/setup.ksh Tue Jan 30 00:18:36 2018 (r328577) @@ -29,18 +29,9 @@ # $FreeBSD$ . ${STF_SUITE}/include/libtest.kshlib -. ${STF_SUITE}/include/libsas.kshlib +. $STF_SUITE/include/libgnop.kshlib -verify_runnable "global" -echo "list of disks: $DISKS" - -# Make sure that all of the disks that we've been given are attached to a -# SAS expander, and that we can find the phy they're attached to. This -# function will cause the script to exit if it fails. -for disk in $DISKS -do - find_verify_sas_disk $disk -done +log_must create_gnops ${DISKS} # Rotate logs now, because this test can generate a great volume of log entries newsyslog Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash.cfg ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash.cfg Tue Jan 30 00:11:35 2018 (r328576) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash.cfg Tue Jan 30 00:18:36 2018 (r328577) @@ -29,5 +29,4 @@ # # $FreeBSD$ # -export SAS_DEFAULT_TIME=360 -export STF_TIMEOUT=900 +export RUNTIME=180 Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash_001_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash_001_pos.ksh Tue Jan 30 00:11:35 2018 (r328576) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash_001_pos.ksh Tue Jan 30 00:18:36 2018 (r328577) @@ -32,14 +32,9 @@ # . $STF_SUITE/include/libtest.kshlib -. $STF_SUITE/include/libsas.kshlib +. $STF_SUITE/include/libgnop.kshlib - -typeset -i NUM_FAILURES=0 -export NUM_FAILURES - -# Cleanup function. Kill each of the children, they will re-enable the PHY -# they're working on. +# Cleanup function. Kill each of the children. function docleanup { for CPID in $CHILDREN @@ -53,18 +48,15 @@ function docleanup done } -# If we get killed, try to re-enable the PHY we were toggling. -function diskcleanup +function childcleanup { - log_note "Got a signal, sending linkreset to $EXPANDER phy $PHY" - camcontrol smppc $EXPANDER -o linkreset -p $PHY exit 0 } # Wait for the timeout, and then kill the child processes. -function disktimeout +function childrentimeout { - log_note "disktimeout process waiting $1 seconds" + log_note "childrentimeout process waiting $1 seconds" sleep $1 docleanup } @@ -74,12 +66,15 @@ function mk_vols ADISKS=($DISKS) #Create an array for convenience N_DISKS=${#ADISKS[@]} N_MIRRORS=$(($N_DISKS / 2 )) - setup_mirrors $N_MIRRORS $DISKS + # Use a special ksh93 expansion to generate the list of gnop devices + GNOPS=${DISKS//~(E)([[:space:]]+|$)/.nop\1} + setup_mirrors $N_MIRRORS $GNOPS for pool in `all_pools`; do # Create 4 ZVols per pool. Write a geom label to each, just so # that we have another geom class between zvol and the vdev # taster. That thwarts detection of zvols based on a geom - # producer's class name, as was attempted by change 538882 + # producer's class name, as was attempted by Perforce change + # 538882 for ((j=0; $j<4; j=$j+1)); do $ZFS create -V 10G $pool/testvol.$j glabel label testlabel$j /dev/zvol/$pool/testvol.$j @@ -88,81 +83,30 @@ function mk_vols } export CHILDREN="" -export FAILFILES="" -export POOLS="" log_onexit docleanup -typeset i=0 -typeset -i num_disks_used=0 - -log_assert "Cause frequent device removal and arrival in the prescence of zvols. ZFS should not misbehave while tasting them for VDev GUIDs." +log_assert "Cause frequent device removal and arrival in the prescence of zvols. ZFS should not crash or hang while tasting them for VDev GUIDs." mk_vols for p in `all_pools` do - disk=`get_disklist $p | cut -d " " -f 1` #Take the first disk in the pool - # See if this disk is attached to a parent that supports SMP - # XXX this only works with the current scheme where SMP commands get - # sent to a device or its parent, if the device doesn't support SMP - camcontrol smprg $disk > /dev/null 2>&1 - if [ $? != 0 ]; then - continue - fi + #Take the first gnop in the pool + typeset gnop + typeset disk + gnop=`get_disklist $p | cut -d " " -f 1` + disk=${gnop%.nop} - # Find the expander and PHY that this disk is attached to, if any. - # We will exit from here if there is a failure. - find_verify_sas_disk $disk - - typeset -i x=0 - log_note "thrashing phy on $disk on $EXPANDER phy $PHY" - export FAILFILE=$TMPDIR/${EXPANDER}.${PHY}.failed - trap diskcleanup INT TERM && rm -f $FAILFILE && while `true`; do - ((x=x+1)) - camcontrol smppc $EXPANDER -v -o disable -p $PHY - if [ $? != 0 ]; then - log_note "Failed to disable $EXPANDER phy $PHY" - echo "Expander $EXPANDER phy $PHY failed" >> $FAILFILE - break - fi - $SLEEP 10 - camcontrol smppc $EXPANDER -v -o linkreset -p $PHY - if [ $? != 0 ]; then - log_note "Failed to reset $EXPANDER phy $PHY" - echo "Expander $EXPANDER phy $PHY failed" >> $FAILFILE - break - fi - $SLEEP 10 + log_note "thrashing $gnop" + trap childcleanup INT TERM && while `true`; do + log_must destroy_gnop $disk + $SLEEP 5 + log_must create_gnop $disk + $SLEEP 5 done & CHILDREN="$CHILDREN $!" - FAILFILES="$FAILFILES $FAILFILE" - ((num_disks_used++)) done -typeset -i sleep_time=$SAS_DEFAULT_TIME +log_note "Waiting $RUNTIME seconds for potential ZFS failure" +childrentimeout $RUNTIME -if [ $num_disks_used -gt 0 ]; then - log_note "Tests queued on $num_disks_used disks" - log_note "Waiting $sleep_time seconds for potential driver failure" - disktimeout $sleep_time & - wait - - for i in $FAILFILES; do - typeset FILEBASE=${i%%.failed} - FILEBASE=${FILEBASE##$TMPDIR/} - if [ -f $i ]; then - log_note "Test of $FILEBASE failed" - ((NUM_FAILURES=NUM_FAILURES+1)) - rm -f $i - else - log_note "Test of $FILEBASE passed" - fi - done - if [ $NUM_FAILURES -gt 0 ]; then - log_fail "Saw $NUM_FAILURES failures" - else - log_note "Number of failures: $NUM_FAILURES" - log_pass - fi -else - log_unsupported "No tests queued, no SMP-capable devices found" -fi +log_pass Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash_test.sh Tue Jan 30 00:11:35 2018 (r328576) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash_test.sh Tue Jan 30 00:18:36 2018 (r328577) @@ -28,7 +28,7 @@ atf_test_case zvol_thrash_001_pos cleanup zvol_thrash_001_pos_head() { atf_set "descr" "Cause frequent device removal and arrival in the prescence of zvols. ZFS should not misbehave while tasting them for VDev GUIDs." - atf_set "require.progs" zfs zpool camcontrol + atf_set "require.progs" zfs zpool gnop atf_set "timeout" 900 } zvol_thrash_001_pos_body()help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201801300018.w0U0IaBf079684>
