# # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright (c) 2017 Open-E, Inc. All Rights Reserved. # . $STF_SUITE/tests/functional/cli_root/zpool_reopen/zpool_reopen.cfg # # Clear labels on the given disks # function clear_labels #disks { for disk in $@; do if ( is_loop_device $disk ) || ( is_mpath_device $disk ); then zpool labelclear -f /dev/$disk else zpool labelclear -f /dev/${disk}1 fi done } # # Set the REMOVED_DISK and REMOVED_DISK_ID constants for device # used for re-plugging. When the disk is loop device use the # scsi_debug emulated drive. Otherwise use the real drive. # function set_removed_disk { if is_loop_device $DISK1; then export REMOVED_DISK=$(get_debug_device) export REMOVED_DISK_ID=$(get_persistent_disk_name $REMOVED_DISK) elif ( is_real_device $DISK1 ) || ( is_mpath_device $DISK1 ); then export REMOVED_DISK="$DISK1" export REMOVED_DISK_ID=${devs_id[0]} else log_fail "No drives that supports removal" fi } # # Generate random file of the given size in MiB # function generate_random_file #path size_mb { typeset path=$1 typeset -i size_mb=$2 file_write -o create -f $path -b 1048576 -s0 -c $size_mb -d R } # # Wait until specific event or timeout occur. # # The passed function is executed with pool name as argument # with an interval of 1 second until it succeeds or until the # timeout occurs. # It returns 1 on timeout or 0 otherwise. # function wait_for_action #pool timeout function { typeset pool=$1 typeset -i timeout=$2 typeset func=$3 while [ $timeout -gt 0 ]; do (( --timeout )) if ( $func $pool ); then return 0 fi sleep 1 done return 1 } # # Helpers for wait_for_action function: # wait_for_resilver_start - wait until resilver is started # wait_for_resilver_end - wait until resilver is finished # wait_for_scrub_end - wait until scrub is finished # function wait_for_resilver_start #pool timeout { wait_for_action $1 $2 is_pool_resilvering return $? } function wait_for_resilver_end #pool timeout { wait_for_action $1 $2 is_pool_resilvered return $? } function wait_for_scrub_end #pool timeout { wait_for_action $1 $2 is_pool_scrubbed return $? } # # Check if scan action has been restarted on the given pool # function is_scan_restarted #pool { typeset pool=$1 zpool history -i $pool | grep -q "scan aborted, restarting" return $? } function is_deferred_scan_started #pool { typeset pool=$1 zpool history -i $pool | grep -q "starting deferred resilver" return $? }