]> granicus.if.org Git - zfs/commitdiff
Fix dbufstats_001_pos
authorGiuseppe Di Natale <dinatale2@users.noreply.github.com>
Wed, 7 Mar 2018 17:53:04 +0000 (09:53 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 7 Mar 2018 17:53:04 +0000 (09:53 -0800)
Implement a new helper within_tolerance to test if a value
is within range of a target.

Because the dbufstats and dbufs kstat file are being read
at slightly different times, it is possible for stats to be
slightly off. Use within_tolerance to determine if the value
is "close enough" to the target.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Giuseppe Di Natale <dinatale2@llnl.gov>
Closes #7239
Closes #7266

tests/zfs-tests/include/math.shlib
tests/zfs-tests/tests/functional/arc/dbufstats_001_pos.ksh

index 66658cdda9d35f3c8d0bcc0401a5beb1df21cfdb..0c3508ec2f8cb75793f3acb983d9992f5bf5b92b 100644 (file)
@@ -42,6 +42,29 @@ function within_percent
        return 1
 }
 
+#
+# Return 0 if value is within +/-tolerance of target.
+# Return 1 if value exceeds our tolerance.
+# For use like this:
+#
+# Do $action if value is within the tolerance from target passed in:
+#      within_tolerance VAL TAR TOL && $action
+# Do $action if value surpasses the tolerance from target passed in:
+#      within_tolerance VAL TAR TOL || $action
+#
+function within_tolerance #value #target #tolerance
+{
+       typeset val=$1
+       typeset target=$2
+       typeset tol=$3
+
+       typeset diff=$((abs(val - target)))
+       log_note "Checking if $val is within +/-$tol of $target (diff: $diff)"
+       ((diff <= tol)) && return 0
+
+       return 1
+}
+
 #
 # Return 0 if the human readable string of the form <value>[suffix] can
 # be converted to bytes.  Allow suffixes are shown in the table below.
index 97d370b1fd09ef37dd24b29c9eb0fcadc9b9e18d..7813d263df529c6c8cd23b54d47673e05964fe4b 100755 (executable)
@@ -55,10 +55,11 @@ function testdbufstat # stat_name dbufstat_filter
 
         [[ -n "$2" ]] && filter="-F $2"
 
-        verify_eq \
-           $(grep -w "$name" "$DBUFSTATS_FILE" | awk '{ print $3 }') \
-           $(dbufstat.py -bxn -i "$DBUFS_FILE" "$filter" | wc -l) \
-           "$name"
+       from_dbufstat=$(grep -w "$name" "$DBUFSTATS_FILE" | awk '{ print $3 }')
+       from_dbufs=$(dbufstat.py -bxn -i "$DBUFS_FILE" "$filter" | wc -l)
+
+       within_tolerance $from_dbufstat $from_dbufs 5 \
+           || log_fail "Stat $name exceeded tolerance"
 }
 
 verify_runnable "both"