Verify 'zfs destroy' will unshare the dataset
This change adds a new test case to the zfs-test suite to verify that when 'zfs destroy' is used on a shared dataset, the dataset will be unshared after the destroy operation completes. Reviewed by: loli10K <ezomori.nozomu@gmail.com> Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Prakash Surya <prakash.surya@delphix.com> Closes #7941
This commit is contained in:
parent
1bf490ba93
commit
54eb2c410e
@ -282,7 +282,8 @@ tags = ['functional', 'cli_root', 'zfs_unmount']
|
||||
|
||||
[tests/functional/cli_root/zfs_unshare]
|
||||
tests = ['zfs_unshare_001_pos', 'zfs_unshare_002_pos', 'zfs_unshare_003_pos',
|
||||
'zfs_unshare_004_neg', 'zfs_unshare_005_neg', 'zfs_unshare_006_pos']
|
||||
'zfs_unshare_004_neg', 'zfs_unshare_005_neg', 'zfs_unshare_006_pos',
|
||||
'zfs_unshare_007_pos']
|
||||
tags = ['functional', 'cli_root', 'zfs_unshare']
|
||||
|
||||
[tests/functional/cli_root/zfs_upgrade]
|
||||
|
@ -1230,6 +1230,34 @@ function datasetnonexists
|
||||
return 0
|
||||
}
|
||||
|
||||
function is_shared_impl
|
||||
{
|
||||
typeset fs=$1
|
||||
typeset mtpt
|
||||
|
||||
if is_linux; then
|
||||
for mtpt in `share | awk '{print $1}'` ; do
|
||||
if [[ $mtpt == $fs ]] ; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
fi
|
||||
|
||||
for mtpt in `share | awk '{print $2}'` ; do
|
||||
if [[ $mtpt == $fs ]] ; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
typeset stat=$(svcs -H -o STA nfs/server:default)
|
||||
if [[ $stat != "ON" ]]; then
|
||||
log_note "Current nfs/server status: $stat"
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
#
|
||||
# Given a mountpoint, or a dataset name, determine if it is shared via NFS.
|
||||
#
|
||||
@ -1254,27 +1282,7 @@ function is_shared
|
||||
fi
|
||||
fi
|
||||
|
||||
if is_linux; then
|
||||
for mtpt in `share | awk '{print $1}'` ; do
|
||||
if [[ $mtpt == $fs ]] ; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
fi
|
||||
|
||||
for mtpt in `share | awk '{print $2}'` ; do
|
||||
if [[ $mtpt == $fs ]] ; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
typeset stat=$(svcs -H -o STA nfs/server:default)
|
||||
if [[ $stat != "ON" ]]; then
|
||||
log_note "Current nfs/server status: $stat"
|
||||
fi
|
||||
|
||||
return 1
|
||||
is_shared_impl "$fs"
|
||||
}
|
||||
|
||||
#
|
||||
|
@ -7,4 +7,5 @@ dist_pkgdata_SCRIPTS = \
|
||||
zfs_unshare_003_pos.ksh \
|
||||
zfs_unshare_004_neg.ksh \
|
||||
zfs_unshare_005_neg.ksh \
|
||||
zfs_unshare_006_pos.ksh
|
||||
zfs_unshare_006_pos.ksh \
|
||||
zfs_unshare_007_pos.ksh
|
||||
|
@ -0,0 +1,72 @@
|
||||
#!/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 2016, loli10K. All rights reserved.
|
||||
# Copyright (c) 2018 by Delphix. All rights reserved.
|
||||
#
|
||||
|
||||
. $STF_SUITE/include/libtest.shlib
|
||||
|
||||
#
|
||||
# DESCRIPTION:
|
||||
# Verify that 'zfs destroy' on a shared dataset, will unshare it.
|
||||
#
|
||||
# STRATEGY:
|
||||
# 1. Create and share a dataset with sharenfs.
|
||||
# 2. Verify the dataset is shared.
|
||||
# 3. Invoke 'zfs destroy' on the dataset.
|
||||
# 4. Verify the dataset is not shared.
|
||||
#
|
||||
|
||||
verify_runnable "global"
|
||||
|
||||
function cleanup
|
||||
{
|
||||
if datasetexists "$TESTPOOL/$TESTFS/shared1"; then
|
||||
log_must zfs destroy -f $TESTPOOL/$TESTFS/shared1
|
||||
fi
|
||||
}
|
||||
|
||||
log_assert "Verify 'zfs destroy' will unshare the dataset"
|
||||
log_onexit cleanup
|
||||
|
||||
# 1. Create and share a dataset with sharenfs.
|
||||
log_must zfs create \
|
||||
-o sharenfs=on -o mountpoint=$TESTDIR/1 $TESTPOOL/$TESTFS/shared1
|
||||
|
||||
#
|
||||
# 2. Verify the datasets is shared.
|
||||
#
|
||||
# The "non-impl" variant of "is_shared" requires the dataset to exist.
|
||||
# Thus, we can only use the "impl" variant in step 4, below. To be
|
||||
# consistent with step 4, we also use the "impl" variant here.
|
||||
#
|
||||
log_must eval "is_shared_impl $TESTDIR/1"
|
||||
|
||||
# 3. Invoke 'zfs destroy' on the dataset.
|
||||
log_must zfs destroy -f $TESTPOOL/$TESTFS/shared1
|
||||
|
||||
# 4. Verify the dataset is not shared.
|
||||
log_mustnot eval "is_shared_impl $TESTDIR/1"
|
||||
|
||||
log_pass "'zfs destroy' will unshare the dataset."
|
Loading…
Reference in New Issue
Block a user