zpool should detect invalid fs property on create

This change improve the handling of invalid filesystem properties when
specified at pool creation: this is useful when 'zpool create -n'
(dry run) is executed to detect invalid fs-level options (-O) before
the actual command is run.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: loli10K <ezomori.nozomu@gmail.com>
Closes #7620 
Closes #7878
This commit is contained in:
LOLi
2018-09-13 22:37:42 +02:00
committed by Brian Behlendorf
parent 92b432139d
commit 5140a58f3b
2 changed files with 44 additions and 17 deletions
@@ -38,7 +38,8 @@
# actually creating the pool.
#
# STRATEGY:
# 1. Create storage pool with -n option
# 1. Create storage pool with -n option; this should only work when valid
# properties are specified on the command line
# 2. Verify the pool has not been actually created
#
@@ -67,20 +68,39 @@ if is_mpath_device $DISK; then
partition_disk $SIZE $disk 1
fi
#
# Make sure disk is clean before we use it
#
create_pool $TESTPOOL ${disk}${SLICE_PREFIX}${SLICE0} > $tmpfile
destroy_pool $TESTPOOL
typeset vspec="${disk}${SLICE_PREFIX}${SLICE0}"
typeset goodprops=('' '-o comment=text' '-O checksum=on' '-O ns:prop=value')
typeset badprops=('-o ashift=9999' '-O doesnotexist=on' '-O volsize=10M')
zpool create -n $TESTPOOL ${disk}${SLICE_PREFIX}${SLICE0} > $tmpfile
# Verify zpool create -n with valid pool-level and fs-level options
for prop in "${goodprops[@]}"
do
#
# Make sure disk is clean before we use it
#
create_pool $TESTPOOL $vspec > $tmpfile
destroy_pool $TESTPOOL
poolexists $TESTPOOL && \
log_fail "'zpool create -n <pool> <vspec> ...' fail."
log_must eval "zpool create -n $prop $TESTPOOL $vspec > $tmpfile"
str="would create '$TESTPOOL' with the following layout:"
cat $tmpfile | grep "$str" >/dev/null 2>&1
(( $? != 0 )) && \
log_fail "'zpool create -n <pool> <vspec>...' is executed as unexpected."
poolexists $TESTPOOL && \
log_fail "'zpool create -n <pool> <vspec> ...' fail."
str="would create '$TESTPOOL' with the following layout:"
grep "$str" $tmpfile >/dev/null 2>&1 || \
log_fail "'zpool create -n <pool> <vspec>...' is executed as unexpected."
done
# Verify zpool create -n with invalid options
for prop in "${badprops[@]}"
do
#
# Make sure disk is clean before we use it
#
create_pool $TESTPOOL $vspec > $tmpfile
destroy_pool $TESTPOOL
log_mustnot zpool create -n $prop $TESTPOOL $vspec
done
log_pass "'zpool create -n <pool> <vspec>...' success."