1# 2# This file and its contents are supplied under the terms of the 3# Common Development and Distribution License ("CDDL"), version 1.0. 4# You may only use this file in accordance with the terms of version 5# 1.0 of the CDDL. 6# 7# A full copy of the text of the CDDL should have accompanied this 8# source. A copy of the CDDL is also available via the Internet at 9# http://www.illumos.org/license/CDDL. 10# 11# 12# Copyright (c) 2017 Open-E, Inc. All Rights Reserved. 13# 14 15. $STF_SUITE/tests/functional/cli_root/zpool_reopen/zpool_reopen.cfg 16 17# 18# Clear labels on the given disks 19# 20function clear_labels #disks 21{ 22 for disk in $@; do 23 if is_loop_device $disk || is_mpath_device $disk; then 24 zpool labelclear -f /dev/$disk 25 else 26 zpool labelclear -f /dev/${disk}1 27 fi 28 done 29} 30 31# 32# Set the REMOVED_DISK and REMOVED_DISK_ID constants for device 33# used for re-plugging. When the disk is loop device use the 34# scsi_debug emulated drive. Otherwise use the real drive. 35# 36function set_removed_disk 37{ 38 if is_loop_device $DISK1; then 39 export REMOVED_DISK=$(get_debug_device) 40 export REMOVED_DISK_ID=$(get_persistent_disk_name $REMOVED_DISK) 41 elif ( is_real_device $DISK1 ) || ( is_mpath_device $DISK1 ); then 42 export REMOVED_DISK="$DISK1" 43 export REMOVED_DISK_ID=${devs_id[0]} 44 else 45 log_fail "No drives that supports removal" 46 fi 47} 48 49# 50# Generate random file of the given size in MiB 51# 52function generate_random_file #path size_mb 53{ 54 typeset path=$1 55 typeset -i size_mb=$2 56 file_write -o create -f $path -b 1048576 -s0 -c $size_mb -d R 57} 58 59# 60# Wait until specific event or timeout occur. 61# 62# The passed function is executed with pool name as argument 63# with an interval of 1 second until it succeeds or until the 64# timeout occurs. 65# It returns 1 on timeout or 0 otherwise. 66# 67function wait_for_action #pool timeout function 68{ 69 typeset pool=$1 70 typeset -i timeout=$2 71 typeset funct=$3 72 73 while [ $timeout -gt 0 ]; do 74 (( --timeout )) 75 if ( $funct $pool ); then 76 return 0 77 fi 78 sleep 1 79 done 80 81 return 1 82} 83 84# 85# Helpers for wait_for_action function: 86# wait_for_resilver_start - wait until resilver is started 87# wait_for_resilver_end - wait until resilver is finished 88# wait_for_scrub_end - wait until scrub is finished 89# 90function wait_for_resilver_start #pool timeout 91{ 92 wait_for_action $1 $2 is_pool_resilvering 93} 94 95function wait_for_resilver_end #pool timeout 96{ 97 wait_for_action $1 $2 is_pool_resilvered 98} 99 100function wait_for_scrub_end #pool timeout 101{ 102 wait_for_action $1 $2 is_pool_scrubbed 103} 104 105# 106# Check if scan action has been restarted on the given pool 107# 108 109function is_scan_restarted #pool 110{ 111 zpool history -i $1 | grep -q "scan aborted, restarting" 112} 113 114function is_deferred_scan_started #pool 115{ 116 zpool history -i $1 | grep -q "starting deferred resilver" 117} 118