Print this page
NEX-9752 backport illumos 6950 ARC should cache compressed data
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
6950 ARC should cache compressed data
Reviewed by: Prakash Surya <prakash.surya@delphix.com>
Reviewed by: Dan Kimmel <dan.kimmel@delphix.com>
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: Paul Dagnelie <pcd@delphix.com>
Reviewed by: Don Brady <don.brady@intel.com>
Reviewed by: Richard Elling <Richard.Elling@RichardElling.com>
Approved by: Richard Lowe <richlowe@richlowe.net>
6369 remove SVM tests from ZFS test suite
Reviewed by: John Kennedy <john.kennedy@delphix.com>
Reviewed by: Prakash Surya <prakash.surya@delphix.com>
Reviewed by: Albert Lee <trisk@omniti.com>
Approved by: Dan McDonald <danmcd@omniti.com>
6248 zpool_create_008_pos and zpool_create_009_neg can fail intermittently
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Approved by: Richard Lowe <richlowe@richlowe.net>
4185 add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R (fix studio build)
4185 add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Prakash Surya <prakash.surya@delphix.com>
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Approved by: Garrett D'Amore <garrett@damore.org>
5767 fix several problems with zfs test suite
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Christopher Siden <christopher.siden@delphix.com>
Approved by: Gordon Ross <gwr@nexenta.com>
NEX-3974 Remove timing issues so the robot can run consistently
Reviewed by: Steve Peng <steve.peng@nexenta.com>
Reviewed by: Josef Sipek <josef.sipek@nexenta.com>
Reviewed by: Alek Pinchuk <alek.pinchuk@nexenta.com>
NEX-3363 Test suites don't cleanup after themselves properly.
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
NEX-3740 The zfs tests use psrinfo instead of /usr/sbin/psrinfo
Reviewed by: Alek Pinchuk <alek.pinchuk@nexenta.com>
Reviewed by: Steve Peng <steve.peng@nexenta.com>
NEX-3258 Remove dependency upon SVM from zfs-tests
Reviewed by: Josef Sipek <josef.sipek@nexenta.com>
Reviewed by: Steve Peng <steve.peng@nexenta.com>
Reviewed by: Alek Pinchuk <alek.pinchuk@nexenta.com>
NEX-2744 zfs-tests suite fails rootpool_002_neg
NEX-2739 zfs-tests suite fails link_count_001
NEX-2741 zfs-tests suite fails mmap_write_001_pos
4206 history_003_pos relies on exact size of history log and entries
4207 history_008_pos depends on obsolete internal history log message
4208 Typo in zfs_main.c: "posxiuser"
4209 Populate zfstest with the remainder of the STF tests
Reviewed by: Sonu Pillai <sonu.pillai@delphix.com>
Reviewed by: Will Guyette <will.guyette@delphix.com>
Reviewed by: Eric Diven <eric.diven@delphix.com>
Reviewed by: Christopher Siden <christopher.siden@delphix.com>
Approved by: Richard Lowe <richlowe@richlowe.net>
*** 262,306 ****
log_fail "$fs_vol@$snap must exist."
log_must zfs bookmark $fs_vol@$snap $fs_vol#$bkmark
}
- #
- # Create a temporary clone result of an interrupted resumable 'zfs receive'
- # $1 Destination filesystem name. Must not exist, will be created as the result
- # of this function along with its %recv temporary clone
- # $2 Source filesystem name. Must not exist, will be created and destroyed
- #
- function create_recv_clone
- {
- typeset recvfs="$1"
- typeset sendfs="${2:-$TESTPOOL/create_recv_clone}"
- typeset snap="$sendfs@snap1"
- typeset incr="$sendfs@snap2"
- typeset mountpoint="$TESTDIR/create_recv_clone"
- typeset sendfile="$TESTDIR/create_recv_clone.zsnap"
-
- [[ -z $recvfs ]] && log_fail "Recv filesystem's name is undefined."
-
- datasetexists $recvfs && log_fail "Recv filesystem must not exist."
- datasetexists $sendfs && log_fail "Send filesystem must not exist."
-
- log_must zfs create -o mountpoint="$mountpoint" $sendfs
- log_must zfs snapshot $snap
- log_must eval "zfs send $snap | zfs recv -u $recvfs"
- log_must mkfile 1m "$mountpoint/data"
- log_must zfs snapshot $incr
- log_must eval "zfs send -i $snap $incr | dd bs=10k count=1 > $sendfile"
- log_mustnot eval "zfs recv -su $recvfs < $sendfile"
- log_must zfs destroy -r $sendfs
- log_must rm -f "$sendfile"
-
- if [[ $(get_prop 'inconsistent' "$recvfs/%recv") -ne 1 ]]; then
- log_fail "Error creating temporary $recvfs/%recv clone"
- fi
- }
-
function default_mirror_setup
{
default_mirror_setup_noexit $1 $2 $3
log_pass
--- 262,271 ----
*** 489,498 ****
--- 454,465 ----
done
fi
[[ -d $TESTDIR ]] && \
log_must rm -rf $TESTDIR
+ [[ -d $TESTDIR1 ]] && \
+ log_must rm -rf $TESTDIR1
}
#
# Common function used to cleanup storage pools, file systems
*** 1182,1196 ****
# Return 0 if destroy successfully or the pool exists; $? otherwise
# Note: In local zones, this function should return 0 silently.
#
# $1 - pool name
# Destroy pool with the given parameters.
! function destroy_pool #pool
{
typeset pool=${1%%/*}
typeset mtpt
if [[ -z $pool ]]; then
log_note "No pool name given."
return 1
--- 1149,1165 ----
# Return 0 if destroy successfully or the pool exists; $? otherwise
# Note: In local zones, this function should return 0 silently.
#
# $1 - pool name
+ # $2 - optional force flag
# Destroy pool with the given parameters.
! function do_destroy_pool #pool <-f>
{
typeset pool=${1%%/*}
+ typeset force=$2
typeset mtpt
if [[ -z $pool ]]; then
log_note "No pool name given."
return 1
*** 1202,1219 ****
# At times, syseventd activity can cause attempts to
# destroy a pool to fail with EBUSY. We retry a few
# times allowing failures before requiring the destroy
# to succeed.
! typeset -i wait_time=10 ret=1 count=0
must=""
while [[ $ret -ne 0 ]]; do
! $must zpool destroy -f $pool
ret=$?
[[ $ret -eq 0 ]] && break
log_note "zpool destroy failed with $ret"
! [[ count++ -ge 7 ]] && must=log_must
sleep $wait_time
done
[[ -d $mtpt ]] && \
log_must rm -rf $mtpt
--- 1171,1188 ----
# At times, syseventd activity can cause attempts to
# destroy a pool to fail with EBUSY. We retry a few
# times allowing failures before requiring the destroy
# to succeed.
! typeset -i wait_time=$DESTROY_SLEEP_TIME ret=1 count=0
must=""
while [[ $ret -ne 0 ]]; do
! $must zpool destroy $force $pool
ret=$?
[[ $ret -eq 0 ]] && break
log_note "zpool destroy failed with $ret"
! [[ count++ -ge $NUM_RETRIES ]] && must=log_must
sleep $wait_time
done
[[ -d $mtpt ]] && \
log_must rm -rf $mtpt
*** 1224,1234 ****
--- 1193,1239 ----
fi
return 0
}
+ # Return 0 if destroy successfully or the pool exists; $? otherwise
+ # Note: In local zones, this function should return 0 silently.
#
+ # $1 - pool name
+ # Destroy pool with the given parameters.
+
+ function destroy_pool_no_force #pool
+ {
+ typeset pool=${1%%/*}
+
+ do_destroy_pool $pool
+ if (( $? != 0 )); then
+ return 1
+ else
+ return 0
+ fi
+ }
+
+ # Return 0 if destroy successfully or the pool exists; $? otherwise
+ # Note: In local zones, this function should return 0 silently.
+ #
+ # $1 - pool name
+ # Force a destroy pool with the given parameters.
+
+ function destroy_pool #pool
+ {
+ typeset pool=${1%%/*}
+
+ do_destroy_pool $pool -f
+ if (( $? != 0 )); then
+ return 1
+ else
+ return 0
+ fi
+ }
+
+ #
# Firstly, create a pool with 5 datasets. Then, create a single zone and
# export the 5 datasets to it. In addition, we also add a ZFS filesystem
# and a zvol device to the zone.
#
# $1 zone name
*** 1504,1538 ****
fi
return 0
}
#
- # Wait until a hotspare transitions to a given state or times out.
- #
- # Return 0 when pool/disk matches expected state, 1 on timeout.
- #
- function wait_hotspare_state # pool disk state timeout
- {
- typeset pool=$1
- typeset disk=${2#$/DEV_DSKDIR/}
- typeset state=$3
- typeset timeout=${4:-60}
- typeset -i i=0
-
- while [[ $i -lt $timeout ]]; do
- if check_hotspare_state $pool $disk $state; then
- return 0
- fi
-
- i=$((i+1))
- sleep 1
- done
-
- return 1
- }
-
- #
# Verify a given slog disk is inuse or avail
#
# Return 0 is pool/disk matches expected state, 1 otherwise
#
function check_slog_state # pool disk state{online,offline,unavail}
--- 1509,1518 ----
*** 1567,1601 ****
fi
return 0
}
#
- # Wait until a vdev transitions to a given state or times out.
- #
- # Return 0 when pool/disk matches expected state, 1 on timeout.
- #
- function wait_vdev_state # pool disk state timeout
- {
- typeset pool=$1
- typeset disk=${2#$/DEV_DSKDIR/}
- typeset state=$3
- typeset timeout=${4:-60}
- typeset -i i=0
-
- while [[ $i -lt $timeout ]]; do
- if check_vdev_state $pool $disk $state; then
- return 0
- fi
-
- i=$((i+1))
- sleep 1
- done
-
- return 1
- }
-
- #
# Check the output of 'zpool status -v <pool>',
# and to see if the content of <token> contain the <keyword> specified.
#
# Return 0 is contain, 1 otherwise
#
--- 1547,1556 ----
*** 1622,1633 ****
# is_pool_resilvered - to check if the pool is resilver completed
# is_pool_scrubbing - to check if the pool is scrub in progress
# is_pool_scrubbed - to check if the pool is scrub completed
# is_pool_scrub_stopped - to check if the pool is scrub stopped
# is_pool_scrub_paused - to check if the pool has scrub paused
- # is_pool_removing - to check if the pool is removing a vdev
- # is_pool_removed - to check if the pool is remove completed
#
function is_pool_resilvering #pool <verbose>
{
check_pool_status "$1" "scan" "resilver in progress since " $2
return $?
--- 1577,1586 ----
*** 1661,1682 ****
{
check_pool_status "$1" "scan" "scrub paused since " $2
return $?
}
- function is_pool_removing #pool
- {
- check_pool_status "$1" "remove" "in progress since "
- return $?
- }
-
- function is_pool_removed #pool
- {
- check_pool_status "$1" "remove" "completed on"
- return $?
- }
-
#
# Use create_pool()/destroy_pool() to clean up the infomation in
# in the given disk to avoid slice overlapping.
#
function cleanup_devices #vdevs
--- 1614,1623 ----
*** 2447,2457 ****
--- 2388,2440 ----
eval su \$user -c \"$@\" > /tmp/out 2>/tmp/err
return $?
}
+ # Return 0 if the pool is successfully epxorted; $? otherwise
#
+ # $1 - pool name
+ # Export pool.
+ function export_pool #pool
+ {
+ typeset pool=${1%%/*}
+ # Checking to see if the device is busy. If so, we'll
+ # retry the export a few times with a sleep between tries.
+ errmsg='device is busy'
+ retry_num=$NUM_RETRIES
+ TMPFILE=`mktemp`
+ if [ -z "$TMPFILE" ] ; then
+ log_note "Unable to create temporary file $TMPFILE"
+ return 1
+ fi
+ until [ $retry_num == 0 ] ; do
+ log_note "zpool export $pool"
+ zpool export $pool 2>$TMPFILE
+ # If the export failed, see if it's due to a
+ # device is busy issue and retry if it is.
+ if (( $? != 0 )); then
+ # if this is busy then we want to retry
+ if [ "`grep "$errmsg" $TMPFILE`" != "" ]; then
+ retry_num-=1
+ log_note "Device is busy, retry zpool export"
+ sleep $EXPORT_SLEEP_TIME
+ else # return here if error is something else
+ rn $TMPFILE
+ return 1
+ fi
+ else
+ # export succeeded.
+ rm $TMPFILE
+ return 0
+ fi
+ done
+ # We've reached our max retries, try to export one more time
+ # and require it to succeed.
+ log_must zpool export $pool
+ }
+
+ #
# Check if the pool contains the specified vdevs
#
# $1 pool
# $2..n <vdev> ...
#
*** 2547,2595 ****
typeset objnum
[[ -e $pathname ]] || log_fail "No such file or directory: $pathname"
objnum=$(stat -c %i $pathname)
echo $objnum
- }
-
- #
- # Prints the current time in seconds since UNIX Epoch.
- #
- function current_epoch
- {
- printf '%(%s)T'
- }
-
- #
- # Get decimal value of global uint32_t variable using mdb.
- #
- function mdb_get_uint32
- {
- typeset variable=$1
- typeset value
-
- value=$(mdb -k -e "$variable/X | ::eval .=U")
- if [[ $? -ne 0 ]]; then
- log_fail "Failed to get value of '$variable' from mdb."
- return 1
- fi
-
- echo $value
- return 0
- }
-
- #
- # Set global uint32_t variable to a decimal value using mdb.
- #
- function mdb_set_uint32
- {
- typeset variable=$1
- typeset value=$2
-
- mdb -kw -e "$variable/W 0t$value" > /dev/null
- if [[ $? -ne 0 ]]; then
- echo "Failed to set '$variable' to '$value' in mdb."
- return 1
- fi
-
- return 0
}
--- 2530,2535 ----