Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 16 Dec 2015 00:22:14 +0000 (UTC)
From:      Alan Somers <asomers@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r292305 - projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zfs_set
Message-ID:  <201512160022.tBG0MEUM053087@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: asomers
Date: Wed Dec 16 00:22:14 2015
New Revision: 292305
URL: https://svnweb.freebsd.org/changeset/base/292305

Log:
  Fix the ro_props_001_pos test, which has spuriously failing for a while.
  
  tests/sys/cddl/zfs/tests/cli_root/zfs_set/ro_props_001_pos.ksh:
          - This test runs through many different ZFS property settings,
            checking that read-only properties can't be changed from the
            'zfs set' command.  However, the test reported that the 'used'
            property changed.
          - The root cause is because, when a ZFS command is issued that
            changes the pool configuration (e.g. create filesystem or snapshot),
            the action gets recorded in the pool history.  However, the
            history logging is asynchronous, and its syncing can change the
            'used' value for the pool dataset.
          - When the initial setup is complete, grab the pool history before
            continuing.  This will force the outstanding history to be synced
            to disk before returning.
  
  tests/sys/cddl/zfs/tests/cli_root/zfs_set/zfs_set_common.kshlib:
          - Clean up set_n_check_prop() while here so it provides better
            feedback on error and is easier to understand.
  
  Submitted by:	Will
  Sponsored by:	Spectra Logic Corporation

Modified:
  projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zfs_set/ro_props_001_pos.ksh
  projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zfs_set/zfs_set_common.kshlib

Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zfs_set/ro_props_001_pos.ksh
==============================================================================
--- projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zfs_set/ro_props_001_pos.ksh	Wed Dec 16 00:21:21 2015	(r292304)
+++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zfs_set/ro_props_001_pos.ksh	Wed Dec 16 00:22:14 2015	(r292305)
@@ -89,6 +89,12 @@ log_onexit cleanup
 create_snapshot $TESTPOOL/$TESTFS $TESTSNAP
 create_snapshot $TESTPOOL/$TESTVOL $TESTSNAP
 
+# Make sure any history logs have been synced.  They're asynchronously
+# pushed to the syncing context, and could influence the value of some
+# properties on $TESTPOOL, like 'used'.  Fetching it here forces the sync,
+# per spa_history.c:spa_history_get().
+log_must $ZPOOL history $TESTPOOL
+
 typeset -i i=0
 typeset -i j=0
 typeset cur_value=""
@@ -126,4 +132,4 @@ while (( i < ${#dataset[@]} )); do
 	(( i += 1 ))
 done
 
-log_pass "Setting uneditable properties should failed. It passed."
+log_pass "Setting uneditable properties fail, as required."

Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zfs_set/zfs_set_common.kshlib
==============================================================================
--- projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zfs_set/zfs_set_common.kshlib	Wed Dec 16 00:21:21 2015	(r292304)
+++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zfs_set/zfs_set_common.kshlib	Wed Dec 16 00:22:14 2015	(r292305)
@@ -52,50 +52,33 @@ function set_n_check_prop
 	typeset dataset=$3
 	typeset expect_result=${4:-true}
 
-	typeset old_value=""
-	typeset cur_value=""
-
-	[[ -n $prop ]] && old_value=$(get_prop $prop $dataset)
-
-	if [[ $expect_result == true ]]; then
-		[[ -z $prop || -z $dataset ]] && \
-			log_fail "property or dataset isn't defined."
-
+	typeset old_value=$(get_prop $prop $dataset)
+	if [ "$expect_result" = "true" ]; then
 		log_must $ZFS set $prop=$expect_value $dataset
-		if [[ $expect_value == "gzip-6" ]]; then
-			expect_value="gzip"
-		fi
-
-		[[ -n $prop ]] && cur_value=$(get_prop $prop $dataset)
-
-		case $prop in 
-			reservation|reserv|quota )
-				if [[ $expect_value == "none" ]]; then
-					[[ $cur_value != "0" ]] && \
-						log_fail "The '$dataset' '$prop' value \
-						'$cur_value' is not expected."
-				elif [[ $cur_value != $expect_value ]]; then
-					log_fail "The '$dataset' '$prop' value '$cur_value' \
-					does not equal the expected value '$expect_value'."
-				fi
-				;;
-			* )
-				if [[ $cur_value != $expect_value ]]; then
-					log_fail "The '$dataset' '$prop' value '$cur_value' \
-					does not equal the expected value '$expect_value'."
-				fi
-				;;
-		esac
-					
 	else
 		log_mustnot $ZFS set $prop=$expect_value $dataset
+	fi
+	typeset cur_value=$(get_prop $prop $dataset)
 
-		[[ -n $prop ]] && cur_value=$(get_prop $prop $dataset)
-
-		if [[ "$expect_value" != "" && "$cur_value" != "$old_value" ]]; 
-		then
-			log_fail "The '$dataset' '$prop' value '$cur_value' \
-				should equal with '$old_value'."
+	err="ERROR: Dataset '$dataset': '$prop' value '$cur_value'"
+	if [ "$expect_result" = "true" ]; then
+		case "$prop" in
+		reservation|reserv|quota)
+			if [ "$expect_value" = "none" -a "$cur_value" != "0" ]; then
+				err="$err should not be set!"
+				log_fail "$err"
+				return
+			fi
+			;;
+		esac
+		if [ "$cur_value" != "$expect_value" ]; then
+			err="$err should have changed to '$expect_value'!"
+			log_fail "$err"
+		fi
+	else
+		if [ "$expect_value" != "" -a "$cur_value" != "$old_value" ]; then
+			err="$err should be unchanged at '$old_value'!"
+			log_fail "$err"
 		fi
 	fi
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201512160022.tBG0MEUM053087>