From owner-svn-src-projects@freebsd.org Tue Jan 30 00:18:37 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2C44DEC38F9 for ; Tue, 30 Jan 2018 00:18:37 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id D1C986E81D; Tue, 30 Jan 2018 00:18:36 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C87907895; Tue, 30 Jan 2018 00:18:36 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w0U0IaFK079689; Tue, 30 Jan 2018 00:18:36 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w0U0IaBf079684; Tue, 30 Jan 2018 00:18:36 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201801300018.w0U0IaBf079684@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Tue, 30 Jan 2018 00:18:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r328577 - projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash X-SVN-Commit-Revision: 328577 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jan 2018 00:18:37 -0000 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()