summaryrefslogtreecommitdiffstats
path: root/tests/zfs-tests
diff options
context:
space:
mode:
authorGiuseppe Di Natale <[email protected]>2018-03-06 14:54:57 -0800
committerTony Hutter <[email protected]>2018-05-07 17:19:56 -0700
commit6356d50e673d0718fe3ceb1ec9fca17eeab0c189 (patch)
tree8e210c1ef7a2a1e52213dc0338169ec277b05a9c /tests/zfs-tests
parentbd69ae3b537ac4e796c53b0c3d6efdc92d652da6 (diff)
Introduce a destroy_dataset helper
Datasets can be busy when calling zfs destroy. Introduce a helper function to destroy datasets and use it to destroy datasets in zfs_allow_004_pos, zfs_promote_008_pos, and zfs_destroy_002_pos. Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Giuseppe Di Natale <[email protected]> Closes #7224 Closes #7246 Closes #7249 Closes #7267
Diffstat (limited to 'tests/zfs-tests')
-rw-r--r--tests/zfs-tests/include/libtest.shlib54
-rwxr-xr-xtests/zfs-tests/tests/functional/cli_root/zfs_destroy/zfs_destroy_002_pos.ksh5
-rwxr-xr-xtests/zfs-tests/tests/functional/cli_root/zfs_promote/zfs_promote_008_pos.ksh2
-rw-r--r--tests/zfs-tests/tests/functional/delegate/delegate_common.kshlib8
4 files changed, 46 insertions, 23 deletions
diff --git a/tests/zfs-tests/include/libtest.shlib b/tests/zfs-tests/include/libtest.shlib
index d51d73e61..c1862c983 100644
--- a/tests/zfs-tests/include/libtest.shlib
+++ b/tests/zfs-tests/include/libtest.shlib
@@ -503,8 +503,7 @@ function default_cleanup_noexit
typeset fs=""
for fs in $(zfs list -H -o name \
| grep "^$ZONE_POOL/$ZONE_CTR[01234]/"); do
- datasetexists $fs && \
- log_must zfs destroy -Rf $fs
+ destroy_dataset "$fs" "-Rf"
done
# Need cleanup here to avoid garbage dir left.
@@ -565,11 +564,8 @@ function default_container_cleanup
[[ $? -eq 0 ]] && \
log_must zfs unmount $TESTPOOL/$TESTCTR/$TESTFS1
- datasetexists $TESTPOOL/$TESTCTR/$TESTFS1 && \
- log_must zfs destroy -R $TESTPOOL/$TESTCTR/$TESTFS1
-
- datasetexists $TESTPOOL/$TESTCTR && \
- log_must zfs destroy -Rf $TESTPOOL/$TESTCTR
+ destroy_dataset "$TESTPOOL/$TESTCTR/$TESTFS1" "-R"
+ destroy_dataset "$TESTPOOL/$TESTCTR" "-Rf"
[[ -e $TESTDIR1 ]] && \
log_must rm -rf $TESTDIR1 > /dev/null 2>&1
@@ -603,7 +599,7 @@ function destroy_snapshot
log_fail "get_prop mountpoint $snap failed."
fi
- log_must zfs destroy $snap
+ destroy_dataset "$snap"
[[ $mtpt != "" && -d $mtpt ]] && \
log_must rm -rf $mtpt
}
@@ -629,7 +625,7 @@ function destroy_clone
log_fail "get_prop mountpoint $clone failed."
fi
- log_must zfs destroy $clone
+ destroy_dataset "$clone"
[[ $mtpt != "" && -d $mtpt ]] && \
log_must rm -rf $mtpt
}
@@ -648,7 +644,7 @@ function destroy_bookmark
log_fail "'$bkmarkp' does not existed."
fi
- log_must zfs destroy $bkmark
+ destroy_dataset "$bkmark"
}
# Return 0 if a snapshot exists; $? otherwise
@@ -1555,6 +1551,40 @@ function destroy_pool #pool
return 0
}
+# Return 0 if destroy successfully or the dataset exists; $? otherwise
+# Note: In local zones, this function should return 0 silently.
+#
+# $1 - dataset name
+# $2 - custom arguments for zfs destroy
+# Destroy dataset with the given parameters.
+
+function destroy_dataset #dataset #args
+{
+ typeset dataset=$1
+ typeset mtpt
+ typeset args=${2:-""}
+
+ if [[ -z $dataset ]]; then
+ log_note "No dataset name given."
+ return 1
+ fi
+
+ if is_global_zone ; then
+ if datasetexists "$dataset" ; then
+ mtpt=$(get_prop mountpoint "$dataset")
+ log_must_busy zfs destroy $args $dataset
+
+ [[ -d $mtpt ]] && \
+ log_must rm -rf $mtpt
+ else
+ log_note "Dataset does not exist. ($dataset)"
+ return 1
+ fi
+ fi
+
+ return 0
+}
+
#
# 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
@@ -2541,9 +2571,7 @@ function verify_opt_p_ops
esac
# make sure the upper level filesystem does not exist
- if datasetexists ${newdataset%/*} ; then
- log_must zfs destroy -rRf ${newdataset%/*}
- fi
+ destroy_dataset "${newdataset%/*}" "-rRf"
# without -p option, operation will fail
log_mustnot zfs $ops $dataset $newdataset
diff --git a/tests/zfs-tests/tests/functional/cli_root/zfs_destroy/zfs_destroy_002_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zfs_destroy/zfs_destroy_002_pos.ksh
index 594e3ad95..128921226 100755
--- a/tests/zfs-tests/tests/functional/cli_root/zfs_destroy/zfs_destroy_002_pos.ksh
+++ b/tests/zfs-tests/tests/functional/cli_root/zfs_destroy/zfs_destroy_002_pos.ksh
@@ -49,8 +49,7 @@ function cleanup
{
typeset -i i=0
while (( $i < ${#data_objs[*]} )); do
- datasetexists "${data_objs[i]}" && \
- zfs destroy -rf ${data_objs[i]}
+ destroy_dataset "${data_objs[i]}" "-rf"
((i = i + 1))
done
}
@@ -87,7 +86,7 @@ done
i=0
while (( $i < ${#data_objs[*]} )); do
- log_must zfs destroy ${data_objs[i]}
+ destroy_dataset "${data_objs[i]}"
datasetexists ${data_objs[i]} && \
log_fail "'zfs destroy <filesystem>|<volume>|<snapshot>' fail."
((i = i + 1))
diff --git a/tests/zfs-tests/tests/functional/cli_root/zfs_promote/zfs_promote_008_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zfs_promote/zfs_promote_008_pos.ksh
index 05d482c40..c37c9a626 100755
--- a/tests/zfs-tests/tests/functional/cli_root/zfs_promote/zfs_promote_008_pos.ksh
+++ b/tests/zfs-tests/tests/functional/cli_root/zfs_promote/zfs_promote_008_pos.ksh
@@ -49,7 +49,7 @@ function cleanup
log_must zfs promote $vol
fi
- log_must zfs destroy -rR $snap
+ destroy_dataset "$snap" "-rR"
}
log_assert "'zfs promote' can promote a volume clone."
diff --git a/tests/zfs-tests/tests/functional/delegate/delegate_common.kshlib b/tests/zfs-tests/tests/functional/delegate/delegate_common.kshlib
index 8dd601850..ebe2f4ba2 100644
--- a/tests/zfs-tests/tests/functional/delegate/delegate_common.kshlib
+++ b/tests/zfs-tests/tests/functional/delegate/delegate_common.kshlib
@@ -53,15 +53,11 @@ function cleanup_user_group
#
function restore_root_datasets
{
- if datasetexists $ROOT_TESTFS ; then
- log_must zfs destroy -Rf $ROOT_TESTFS
- fi
+ destroy_dataset "$ROOT_TESTFS" "-Rf"
log_must zfs create $ROOT_TESTFS
if is_global_zone ; then
- if datasetexists $ROOT_TESTVOL ; then
- log_must zfs destroy -Rf $ROOT_TESTVOL
- fi
+ destroy_dataset "$ROOT_TESTVOL" "-Rf"
log_must zfs create -V $VOLSIZE $ROOT_TESTVOL
block_device_wait
fi