1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
#
# This file and its contents are supplied under the terms of the
# Common Development and Distribution License ("CDDL"), version 1.0.
# You may only use this file in accordance with the terms of version
# 1.0 of the CDDL.
#
# A full copy of the text of the CDDL should have accompanied this
# source. A copy of the CDDL is also available via the Internet at
# http://www.illumos.org/license/CDDL.
#
#
# Copyright (c) 2012, 2016, Delphix. All rights reserved.
#
. $STF_SUITE/include/libtest.shlib
typeset -a compress_prop_vals=('off' 'lzjb' 'lz4' 'gzip' 'zle' 'zstd')
typeset -a checksum_prop_vals=('on' 'off' 'fletcher2' 'fletcher4' 'sha256'
'noparity' 'sha512' 'skein')
if ! is_freebsd; then
checksum_prop_vals+=('edonr')
fi
typeset -a recsize_prop_vals=('512' '1024' '2048' '4096' '8192' '16384'
'32768' '65536' '131072' '262144' '524288' '1048576')
typeset -a canmount_prop_vals=('on' 'off' 'noauto')
typeset -a copies_prop_vals=('1' '2' '3')
typeset -a logbias_prop_vals=('latency' 'throughput')
typeset -a primarycache_prop_vals=('all' 'none' 'metadata')
typeset -a redundant_metadata_prop_vals=('all' 'most')
typeset -a secondarycache_prop_vals=('all' 'none' 'metadata')
typeset -a snapdir_prop_vals=('hidden' 'visible')
typeset -a sync_prop_vals=('standard' 'always' 'disabled')
typeset -a fs_props=('compress' 'checksum' 'recsize'
'canmount' 'copies' 'logbias' 'primarycache' 'redundant_metadata'
'secondarycache' 'snapdir' 'sync')
typeset -a vol_props=('compress' 'checksum' 'copies' 'logbias' 'primarycache'
'secondarycache' 'redundant_metadata' 'sync')
#
# Given the 'prop' passed in, return 'num_vals' elements of the corresponding
# values array to the user, excluding any elements below 'first.' This allows
# us to exclude 'off' and 'on' which can be either unwanted, or a duplicate of
# another property respectively.
#
function get_rand_prop_vals
{
typeset prop=$1
typeset -i num_vals=$2
typeset -i first=$3
[[ -z $prop || -z $num_vals || -z $first ]] && \
log_fail "get_rand_prop_vals: bad arguments"
typeset retstr=""
typeset prop_vals_var=${prop}_prop_vals
typeset -a prop_vals=($(eval echo \${${prop_vals_var}[@]}))
[[ -z $prop_vals ]] && \
log_fail "get_rand_prop_vals: bad prop $prop"
typeset -i last=$((${#prop_vals[@]} - 1))
typeset -i i
for i in $(range_shuffle $first $last | head -n $num_vals); do
retstr="${prop_vals[$i]} $retstr"
done
echo $retstr
}
function get_rand_checksum
{
get_rand_prop_vals checksum $1 2
}
function get_rand_checksum_any
{
get_rand_prop_vals checksum $1 0
}
function get_rand_recsize
{
get_rand_prop_vals recsize $1 0
}
function get_rand_large_recsize
{
get_rand_prop_vals recsize $1 9
}
#
# Functions to toggle on/off properties
#
typeset -a binary_props=('atime' 'devices' 'exec' 'readonly' 'setuid' 'xattr')
if is_freebsd; then
binary_props+=('jailed')
else
binary_props+=('zoned')
fi
if is_linux; then
# Only older kernels support non-blocking mandatory locks
if [[ $(linux_version) -lt $(linux_version "4.4") ]]; then
binary_props+=('nbmand')
fi
else
binary_props+=('nbmand')
fi
function toggle_prop
{
typeset ds=$1
typeset prop=$2
datasetexists $ds || log_fail "$ds does not exist"
typeset val=$(get_prop $prop $ds)
typeset newval='off'
[[ $val = $newval ]] && newval='on'
log_must zfs set $prop=$newval $ds
}
function toggle_binary_props
{
typeset ds=$1
typeset prop
for prop in "${binary_props[@]}"; do
toggle_prop $ds $prop
done
}
function randomize_ds_props
{
typeset ds=$1
typeset prop proplist val
datasetexists $ds || log_fail "$ds does not exist"
if ds_is_volume $ds; then
toggle_prop $ds readonly
proplist="${vol_props[@]}"
elif ds_is_filesystem $ds; then
toggle_binary_props $ds
proplist="${fs_props[@]}"
else
log_fail "$ds is neither a volume nor a file system"
fi
for prop in $proplist; do
typeset val=$(get_rand_prop_vals $prop 1 0)
log_must zfs set $prop=$val $ds
done
}
|