1#!/bin/ksh -p 2# 3# This file and its contents are supplied under the terms of the 4# Common Development and Distribution License ("CDDL"), version 1.0. 5# You may only use this file in accordance with the terms of version 6# 1.0 of the CDDL. 7# 8# A full copy of the text of the CDDL should have accompanied this 9# source. A copy of the CDDL is also available via the Internet at 10# http://www.illumos.org/license/CDDL. 11# 12 13# 14# Copyright (c) 2018 by Delphix. All rights reserved. 15# 16 17. $STF_SUITE/include/libtest.shlib 18. $STF_SUITE/tests/functional/cli_root/zpool_wait/zpool_wait.kshlib 19 20# 21# DESCRIPTION: 22# 'zpool wait' works when a scrub is paused or canceled. 23# 24# STRATEGY: 25# 1. Modify tunable so that scrubs won't complete while test is running. 26# 2. Start a scrub. 27# 3. Start a process that waits for the scrub. 28# 4. Wait a few seconds and then check that the wait process is actually 29# waiting. 30# 5. Pause the scrub. 31# 6. Check that the wait process returns reasonably promptly. 32# 7. Repeat 2-6, except stop the scrub instead of pausing it. 33# 34 35function cleanup 36{ 37 log_must set_tunable32 SCAN_SUSPEND_PROGRESS 0 38 kill_if_running $pid 39 is_pool_scrubbing $TESTPOOL && log_must zpool scrub -s $TESTPOOL 40} 41 42function do_test 43{ 44 typeset stop_cmd=$1 45 46 log_must zpool scrub $TESTPOOL 47 log_bkgrnd zpool wait -t scrub $TESTPOOL 48 pid=$! 49 50 log_must sleep 3 51 proc_must_exist $pid 52 53 log_must eval "$stop_cmd" 54 bkgrnd_proc_succeeded $pid 55} 56 57typeset pid 58 59log_onexit cleanup 60 61log_must set_tunable32 SCAN_SUSPEND_PROGRESS 1 62 63do_test "zpool scrub -p $TESTPOOL" 64do_test "zpool scrub -s $TESTPOOL" 65 66log_pass "'zpool wait -t scrub' works when scrub is canceled." 67