1*d583b39bSJohn Wren Kennedy# 2*d583b39bSJohn Wren Kennedy# This file and its contents are supplied under the terms of the 3*d583b39bSJohn Wren Kennedy# Common Development and Distribution License ("CDDL"), version 1.0. 4*d583b39bSJohn Wren Kennedy# You may only use this file in accordance with the terms of version 5*d583b39bSJohn Wren Kennedy# 1.0 of the CDDL. 6*d583b39bSJohn Wren Kennedy# 7*d583b39bSJohn Wren Kennedy# A full copy of the text of the CDDL should have accompanied this 8*d583b39bSJohn Wren Kennedy# source. A copy of the CDDL is also available via the Internet at 9*d583b39bSJohn Wren Kennedy# http://www.illumos.org/license/CDDL. 10*d583b39bSJohn Wren Kennedy# 11*d583b39bSJohn Wren Kennedy 12*d583b39bSJohn Wren Kennedy# 13*d583b39bSJohn Wren Kennedy# Copyright (c) 2012 by Delphix. All rights reserved. 14*d583b39bSJohn Wren Kennedy# 15*d583b39bSJohn Wren Kennedy 16*d583b39bSJohn Wren Kennedy. $STF_SUITE/include/math.shlib 17*d583b39bSJohn Wren Kennedy 18*d583b39bSJohn Wren Kennedyexport TESTVOL="testvol.nopwrite" 19*d583b39bSJohn Wren Kennedyexport VOLSIZE="256M" 20*d583b39bSJohn Wren Kennedyexport MEGS="64" 21*d583b39bSJohn Wren Kennedy 22*d583b39bSJohn Wren Kennedyfunction verify_nopwrite 23*d583b39bSJohn Wren Kennedy{ 24*d583b39bSJohn Wren Kennedy typeset origin=$1 25*d583b39bSJohn Wren Kennedy typeset snap=$2 26*d583b39bSJohn Wren Kennedy typeset clone=$3 27*d583b39bSJohn Wren Kennedy typeset low=1 28*d583b39bSJohn Wren Kennedy typeset high=99 29*d583b39bSJohn Wren Kennedy 30*d583b39bSJohn Wren Kennedy $SYNC 31*d583b39bSJohn Wren Kennedy for i in origin snap clone; do 32*d583b39bSJohn Wren Kennedy for j in used refer usedbychildren written; do 33*d583b39bSJohn Wren Kennedy typeset ${i}_$j=$(get_prop $j $(eval echo \$$i)) 34*d583b39bSJohn Wren Kennedy done 35*d583b39bSJohn Wren Kennedy done 36*d583b39bSJohn Wren Kennedy 37*d583b39bSJohn Wren Kennedy # 38*d583b39bSJohn Wren Kennedy # If we are dealing with a volume, deduct the refreserv from the used 39*d583b39bSJohn Wren Kennedy # value to prevent real failures from being masked by the unexpected 40*d583b39bSJohn Wren Kennedy # extra space. Also, volumes use more space for metadata, so adjust the 41*d583b39bSJohn Wren Kennedy # percentages to be more forgiving. 42*d583b39bSJohn Wren Kennedy # 43*d583b39bSJohn Wren Kennedy if [[ "$(get_prop type $origin)" = "volume" ]]; then 44*d583b39bSJohn Wren Kennedy typeset rr=$(get_prop refreserv $origin) 45*d583b39bSJohn Wren Kennedy ((origin_used -= rr )) 46*d583b39bSJohn Wren Kennedy low=2 47*d583b39bSJohn Wren Kennedy high=98 48*d583b39bSJohn Wren Kennedy fi 49*d583b39bSJohn Wren Kennedy 50*d583b39bSJohn Wren Kennedy # These values should differ greatly with nopwrite. 51*d583b39bSJohn Wren Kennedy within_percent $origin_used $clone_used $low && return 1 52*d583b39bSJohn Wren Kennedy within_percent $origin_refer $origin_usedbychildren $low && return 1 53*d583b39bSJohn Wren Kennedy within_percent $snap_written $clone_written $low && return 1 54*d583b39bSJohn Wren Kennedy 55*d583b39bSJohn Wren Kennedy # These values should be nearly the same with nopwrite. 56*d583b39bSJohn Wren Kennedy within_percent $origin_used $clone_refer $high || return 1 57*d583b39bSJohn Wren Kennedy within_percent $origin_used $snap_refer $high || return 1 58*d583b39bSJohn Wren Kennedy 59*d583b39bSJohn Wren Kennedy # 60*d583b39bSJohn Wren Kennedy # The comparisons below should pass regardless of nopwrite. They're 61*d583b39bSJohn Wren Kennedy # here for sanity. 62*d583b39bSJohn Wren Kennedy # 63*d583b39bSJohn Wren Kennedy typeset deadlist=$($ZDB -Pddd $clone | $AWK '/Deadlist:/ {print $2}') 64*d583b39bSJohn Wren Kennedy within_percent $deadlist $clone_written $high || return 1 65*d583b39bSJohn Wren Kennedy within_percent $snap_refer $snap_written $high || return 1 66*d583b39bSJohn Wren Kennedy 67*d583b39bSJohn Wren Kennedy return 0 68*d583b39bSJohn Wren Kennedy} 69