]> git.proxmox.com Git - mirror_zfs.git/commitdiff
ZTS: Fix send_partial_dataset.ksh
authorBrian Behlendorf <behlendorf1@llnl.gov>
Sun, 13 Mar 2022 20:16:49 +0000 (13:16 -0700)
committerGitHub <noreply@github.com>
Sun, 13 Mar 2022 20:16:49 +0000 (13:16 -0700)
The send_partial_dataset test verifies that partial send streams
can be resumed.  This test may occasionally fail with a "token is
corrupt" error if the `mess_send_file` truncates a send stream
below the size of the DRR_BEGIN record.  Update this function to
set a minimum size to ensure there is at least an intact DDR_BEGIN
record which allows for the receiving dataset to be created.

Reviewed-by: George Melikov <mail@gmelikov.ru>
Reviewed-by: Rich Ercolani <rincebrain@gmail.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #13177

tests/zfs-tests/tests/functional/rsend/rsend.kshlib

index 2c8085f226b08d7e888b0b46ef174c0720f1c76a..8d704ee368760fd05dbb24f4abc149a69494f6f9 100644 (file)
@@ -583,24 +583,22 @@ function churn_files
 #
 function mess_send_file
 {
+       typeset -i minsize=2072
        file=$1
 
        filesize=$(stat_size $file)
+       if [ $filesize -lt $minsize ]; then
+               log_fail "Send file too small: $filesize < $minsize"
+       fi
 
-       offset=$(($RANDOM * $RANDOM % $filesize))
-
-       # The random offset might truncate the send stream to be
-       # smaller than the DRR_BEGIN record. If this happens, then
-       # the receiving system won't have enough info to create the
-       # partial dataset at all. We use zstream dump to check for
-       # this and retry in this case.
+       # Truncate the send stream at a random offset after the DRR_BEGIN
+       # record (beyond 2072 bytes), any smaller than this and the receiving
+       # system won't have enough info to create the partial dataset at all.
+       # We use zstream dump to verify there is an intact DRR_BEGIN record.
+       offset=$(((($RANDOM * $RANDOM) % ($filesize - $minsize)) + $minsize))
        nr_begins=$(head -c $offset $file | zstream dump | \
            grep DRR_BEGIN | awk '{ print $5 }')
-       while [ "$nr_begins" -eq 0 ]; do
-               offset=$(($RANDOM * $RANDOM % $filesize))
-               nr_begins=$(head -c $offset $file | zstream dump | \
-                   grep DRR_BEGIN | awk '{ print $5 }')
-       done
+       log_must test "$nr_begins" -eq 1
 
        if (($RANDOM % 7 <= 1)); then
                #