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