Allow for '-o feature@<feature>=disabled' on the command line

Sometimes it is desirable to specifically disable one or several
features directly on the 'zpool create' command line.

$ zpool create -o feature@<feature>=disabled ...

Original-patch-by: Turbo Fredriksson <turbo@bayour.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: loli10K <ezomori.nozomu@gmail.com>
Closes #3460 
Closes #5142 
Closes #5324
This commit is contained in:
LOLi
2016-10-26 01:17:47 +02:00
committed by Brian Behlendorf
parent 16fa68f07d
commit e4010f2719
7 changed files with 136 additions and 22 deletions
+2 -1
View File
@@ -250,7 +250,8 @@ tests = [
'zpool_create_021_pos', 'zpool_create_022_pos', 'zpool_create_023_neg',
'zpool_create_024_pos',
'zpool_create_features_001_pos', 'zpool_create_features_002_pos',
'zpool_create_features_003_pos', 'zpool_create_features_004_neg']
'zpool_create_features_003_pos', 'zpool_create_features_004_neg',
'zpool_create_features_005_pos']
# DISABLED:
# zpool_destroy_001_pos - failure should be investigated
@@ -30,4 +30,5 @@ dist_pkgdata_SCRIPTS = \
zpool_create_features_001_pos.ksh \
zpool_create_features_002_pos.ksh \
zpool_create_features_003_pos.ksh \
zpool_create_features_004_neg.ksh
zpool_create_features_004_neg.ksh \
zpool_create_features_005_pos.ksh
@@ -39,7 +39,7 @@
verify_runnable "global"
properties="\
feature@async_destroy=disabled \
feature@async_destroy=disable \
feature@async_destroy=active \
feature@xxx_fake_xxx=enabled \
unsupported@some_feature=inactive \
@@ -0,0 +1,93 @@
#!/bin/ksh -p
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright (c) 2012 by Delphix. All rights reserved.
#
. $STF_SUITE/include/libtest.shlib
. $STF_SUITE/tests/functional/cli_root/zpool_create/zpool_create.shlib
################################################################################
#
# Specifically disabling a feature, all other features should be enabled.
#
# 1. Loop through all existing features:
# a. Create a new pool with '-o feature@XXX=disabled'.
# b. Verify that every other feature is 'enabled' or 'active'.
#
################################################################################
verify_runnable "global"
function cleanup
{
datasetexists $TESTPOOL && log_must $ZPOOL destroy $TESTPOOL
}
function check_features
{
typeset feature="${1}"
${ZPOOL} get all ${TESTPOOL} | $GREP feature@ | while read line; do
set -- $(echo "${line}")
if [[ "feature@${feature}" == "${2}" ]]; then
# Failure passed feature must be disabled.
if [[ "${3}" != "disabled" ]]; then
return 1;
fi
else
# Failure other features must be enabled or active.
if [[ "${3}" != "enabled" && "${3}" != "active" ]]; then
return 2;
fi
fi
done
# All features enabled or active except the expected one.
return 0
}
log_onexit cleanup
# Several representative features are tested to keep the test time short.
# The features 'extensible_dataset' and 'enabled_txg' are intentionally
# excluded because other features depend on them.
set -A features \
"hole_birth" \
"large_blocks" \
"large_dnode" \
"userobj_accounting"
typeset -i i=0
while (( $i < ${#features[*]} )); do
log_assert "'zpool create' creates pools with ${features[i]} disabled"
log_must $ZPOOL create -f -o "feature@${features[i]}=disabled" \
$TESTPOOL $DISKS
log_must check_features "${features[i]}"
log_must $ZPOOL destroy -f $TESTPOOL
(( i = i+1 ))
done
log_pass "'zpool create -o feature@feature=disabled' disables features"