Skip to content

Commit 3c98b55

Browse files
committed
BRT: Fix tests to work on non-empty pools
It should not normally happen, but if it does, better to not fail everything for no good reason, or it may be hard to debug. Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Alexander Motin <[email protected]> Sponsored by: iXsystems, Inc. Closes openzfs#16007
1 parent 75f4140 commit 3c98b55

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

tests/zfs-tests/tests/functional/bclone/bclone_common.kshlib

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -97,20 +97,19 @@ function verify_pool_prop_eq
9797

9898
function verify_pool_props
9999
{
100-
typeset -r dsize=$1
101-
typeset -r ratio=$2
100+
typeset -r oused=$1
101+
typeset -r osaved=$2
102+
typeset dsize=$3
103+
typeset ratio=$4
102104

103105
if [[ $dsize -eq 0 ]]; then
104-
verify_pool_prop_eq bcloneused 0
105-
verify_pool_prop_eq bclonesaved 0
106-
verify_pool_prop_eq bcloneratio 1.00
107-
else
108-
if [[ $ratio -eq 1 ]]; then
109-
verify_pool_prop_eq bcloneused 0
110-
else
111-
verify_pool_prop_eq bcloneused $dsize
112-
fi
113-
verify_pool_prop_eq bclonesaved $((dsize*(ratio-1)))
106+
ratio=1
107+
elif [[ $ratio -eq 1 ]]; then
108+
dsize=0
109+
fi
110+
verify_pool_prop_eq bcloneused $(($oused+$dsize))
111+
verify_pool_prop_eq bclonesaved $(($osaved+dsize*(ratio-1)))
112+
if [[ $oused -eq 0 ]]; then
114113
verify_pool_prop_eq bcloneratio "${ratio}.00"
115114
fi
116115
}
@@ -124,16 +123,22 @@ function bclone_test
124123
typeset -r srcdir=$4
125124
typeset -r dstdir=$5
126125
typeset dsize
126+
typeset oused
127+
typeset osaved
127128

128129
typeset -r original="${srcdir}/original"
129130
typeset -r clone="${dstdir}/clone"
130131

131132
log_note "Testing file copy with datatype $datatype, file size $filesize, embedded $embedded"
132133

134+
# Save current block cloning stats for later use.
135+
sync_pool $TESTPOOL
136+
oused=$(get_pool_prop bcloneused $TESTPOOL)
137+
osaved=$(get_pool_prop bclonesaved $TESTPOOL)
138+
133139
# Create a test file with known content.
134140
case $datatype in
135141
random|text)
136-
sync_pool $TESTPOOL
137142
if [[ $datatype = "random" ]]; then
138143
dd if=/dev/urandom of=$original bs=$filesize count=1 2>/dev/null
139144
else
@@ -146,13 +151,13 @@ function bclone_test
146151
sync_pool $TESTPOOL
147152
# It is hard to predict block sizes that will be used,
148153
# so just do one clone and take it from bcloneused.
149-
filesize=$(zpool get -Hp -o value bcloneused $TESTPOOL)
154+
dsize=$(get_pool_prop bcloneused $TESTPOOL)
155+
dsize=$(($dsize-$oused))
150156
if [[ $embedded = "false" ]]; then
151-
log_must test $filesize -gt 0
157+
log_must test $dsize -gt 0
152158
fi
153159
rm -f "${clone}-tmp"
154160
sync_pool $TESTPOOL
155-
dsize=$filesize
156161
;;
157162
hole)
158163
log_must truncate_test -s $filesize -f $original
@@ -217,7 +222,7 @@ function bclone_test
217222
test_file_integrity $original_checksum "${clone}4" $filesize
218223
test_file_integrity $original_checksum "${clone}5" $filesize
219224

220-
verify_pool_props $dsize 7
225+
verify_pool_props $oused $osaved $dsize 7
221226

222227
# Clear cache and test after fresh import.
223228
log_must zpool export $TESTPOOL
@@ -240,7 +245,7 @@ function bclone_test
240245

241246
sync_pool $TESTPOOL
242247

243-
verify_pool_props $dsize 11
248+
verify_pool_props $oused $osaved $dsize 11
244249

245250
log_must zpool export $TESTPOOL
246251
log_must zpool import $TESTPOOL
@@ -268,19 +273,19 @@ function bclone_test
268273
test_file_integrity $original_checksum "${clone}8" $filesize
269274
test_file_integrity $original_checksum "${clone}9" $filesize
270275

271-
verify_pool_props $dsize 6
276+
verify_pool_props $oused $osaved $dsize 6
272277

273278
rm -f "${clone}0" "${clone}2" "${clone}4" "${clone}8" "${clone}9"
274279

275280
sync_pool $TESTPOOL
276281

277282
test_file_integrity $original_checksum "${clone}6" $filesize
278283

279-
verify_pool_props $dsize 1
284+
verify_pool_props $oused $osaved $dsize 1
280285

281286
rm -f "${clone}6"
282287

283288
sync_pool $TESTPOOL
284289

285-
verify_pool_props $dsize 1
290+
verify_pool_props $oused $osaved $dsize 1
286291
}

0 commit comments

Comments
 (0)