diff options
author | Sean Eric Fagan <[email protected]> | 2022-03-18 17:02:12 -0700 |
---|---|---|
committer | GitHub <[email protected]> | 2022-03-18 17:02:12 -0700 |
commit | 565089f592426f4a8f0e3df1027f947700799fa6 (patch) | |
tree | b1b4223cf80d5cb2a0ce84fd8560e39d2a656a47 /tests | |
parent | 3ce3d305324ba5ffddfcbc90a996a2b3a8424109 (diff) |
Allow zfs send to exclude datasets
Add support for a -exclude/-X option to `zfs send` to allow dataset
hierarchies to be excluded.
Snapshots can be excluded using a channel program; however,
this can result in failures with 'zfs send -R'; this option allows
them to be excluded. Fortunately, this required a change only to
cmd/zfs/zfs_main.c, using the already-existing callback argument
to zfs_send() that is currently unused.
Reviewed-by: Paul Dagnelie <[email protected]>
Reviewed-by: Christian Schwarz <[email protected]>
Reviewed-by: Ahelenia ZiemiaĆska <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Co-authored-by: Sean Eric Fagan <[email protected]>
Signed-off-by: Sean Eric Fagan <[email protected]>
Closes #13158
Diffstat (limited to 'tests')
7 files changed, 363 insertions, 1 deletions
diff --git a/tests/runfiles/common.run b/tests/runfiles/common.run index 6bc4bb583..87b669db7 100644 --- a/tests/runfiles/common.run +++ b/tests/runfiles/common.run @@ -824,7 +824,8 @@ tests = ['recv_dedup', 'recv_dedup_encrypted_zvol', 'rsend_001_pos', 'rsend_006_pos', 'rsend_007_pos', 'rsend_008_pos', 'rsend_009_pos', 'rsend_010_pos', 'rsend_011_pos', 'rsend_012_pos', 'rsend_013_pos', 'rsend_014_pos', 'rsend_016_neg', 'rsend_019_pos', 'rsend_020_pos', - 'rsend_021_pos', 'rsend_022_pos', 'rsend_024_pos', + 'rsend_021_pos', 'rsend_022_pos', 'rsend_024_pos', 'rsend_025_pos', + 'rsend_026_neg', 'rsend_027_pos', 'rsend_028_neg', 'rsend_029_neg', 'send-c_verify_ratio', 'send-c_verify_contents', 'send-c_props', 'send-c_incremental', 'send-c_volume', 'send-c_zstreamdump', 'send-c_lz4_disabled', 'send-c_recv_lz4_disabled', diff --git a/tests/zfs-tests/tests/functional/rsend/Makefile.am b/tests/zfs-tests/tests/functional/rsend/Makefile.am index b8eb54f64..305fc0d51 100644 --- a/tests/zfs-tests/tests/functional/rsend/Makefile.am +++ b/tests/zfs-tests/tests/functional/rsend/Makefile.am @@ -24,6 +24,11 @@ dist_pkgdata_SCRIPTS = \ rsend_021_pos.ksh \ rsend_022_pos.ksh \ rsend_024_pos.ksh \ + rsend_025_pos.ksh \ + rsend_026_neg.ksh \ + rsend_027_pos.ksh \ + rsend_028_neg.ksh \ + rsend_029_neg.ksh \ send_encrypted_files.ksh \ send_encrypted_hierarchy.ksh \ send_encrypted_props.ksh \ diff --git a/tests/zfs-tests/tests/functional/rsend/rsend_025_pos.ksh b/tests/zfs-tests/tests/functional/rsend/rsend_025_pos.ksh new file mode 100755 index 000000000..99254cccd --- /dev/null +++ b/tests/zfs-tests/tests/functional/rsend/rsend_025_pos.ksh @@ -0,0 +1,90 @@ +#!/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 2009 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# +# Copyright (c) 2013, 2016 by Delphix. All rights reserved. +# + +. $STF_SUITE/tests/functional/rsend/rsend.kshlib + +# DESCRIPTION: +# zfs send -exclude will exclude the given hierarchy +# and only that given hierarchy. +# +# STRATEGY: +# 1. Setup test model +# 2. Create several datasets on pool. +# 3. Send -R -X pool/dataset +# 4. Verify receive does not have the excluded dataset(s). + +verify_runnable "both" + +function cleanup +{ + cleanup_pool $POOL2 + cleanup_pool $POOL + log_must setup_test_model $POOL +} + +log_assert "zfs send -R -X will skip excluded dataset(s)" +log_onexit cleanup + +cleanup + +# +# Create some datasets +log_must zfs create -p $POOL/ds1/second/third +log_must zfs create -p $POOL/ds2/second + +log_must zfs snapshot -r $POOL@presend + +log_must eval "zfs send -R $POOL@presend > $BACKDIR/presend" +log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/presend" + +for ds in ds1 ds1/second ds1/second/third \ + ds2 ds2/second +do + log_must datasetexists $POOL2/$ds +done + +log_must_busy zfs destroy -r $POOL2 + +log_must eval "zfs send -R -X $POOL/ds1/second $POOL@presend > $BACKDIR/presend" +log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/presend" + +for ds in ds1 ds2 ds2/second +do + log_must datasetexists $POOL2/$ds +done + +for ds in ds1/second ds1/second/third +do + log_must datasetnonexists $POOL2/$ds +done + +log_pass "zfs send -X excluded datasets" + diff --git a/tests/zfs-tests/tests/functional/rsend/rsend_026_neg.ksh b/tests/zfs-tests/tests/functional/rsend/rsend_026_neg.ksh new file mode 100755 index 000000000..5248008a1 --- /dev/null +++ b/tests/zfs-tests/tests/functional/rsend/rsend_026_neg.ksh @@ -0,0 +1,58 @@ +#!/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 2009 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# +# Copyright (c) 2013, 2016 by Delphix. All rights reserved. +# + +. $STF_SUITE/include/libtest.shlib +. $STF_SUITE/tests/functional/rsend/rsend.kshlib + +# DESCRIPTION: +# zfs send -X without -R will fail. +# +# STRATEGY: +# 1. Setup test model +# 2. Run "zfs send -X random $POOL" and check for failure. + +verify_runnable "both" + +function cleanup +{ + cleanup_pool $POOL2 + cleanup_pool $POOL + log_must setup_test_model $POOL +} + +log_assert "zfs send -X without -R will fail" +log_onexit cleanup + +cleanup + +log_mustnot eval "zfs send -X $POOL/foobar $POOL@final" + +log_pass "Ensure that zfs send -X without -R will fail" diff --git a/tests/zfs-tests/tests/functional/rsend/rsend_027_pos.ksh b/tests/zfs-tests/tests/functional/rsend/rsend_027_pos.ksh new file mode 100755 index 000000000..645685e69 --- /dev/null +++ b/tests/zfs-tests/tests/functional/rsend/rsend_027_pos.ksh @@ -0,0 +1,92 @@ +#!/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 2009 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# +# Copyright (c) 2013, 2016 by Delphix. All rights reserved. +# + +. $STF_SUITE/tests/functional/rsend/rsend.kshlib + +# DESCRIPTION: +# zfs send with multiple -X/--exclude options will +# exclude all of them. +# +# STRATEGY: +# 1. Setup test model +# 2. Create several datasets on pool. +# 3. Send -R -X pool/dataset +# 4. Verify receive does not have the excluded dataset(s). + +verify_runnable "both" + +function cleanup +{ + cleanup_pool $POOL2 + cleanup_pool $POOL + log_must setup_test_model $POOL +} + +log_assert "zfs send with multiple -X options will skip excluded dataset" +log_onexit cleanup + +cleanup + +# +# Create some datasets +log_must zfs create -p $POOL/ds1/second/third +log_must zfs create -p $POOL/ds2/second +log_must zfs create -p $POOL/ds3/first/second/third + +log_must zfs snapshot -r $POOL@presend + +log_must eval "zfs send -R $POOL@presend > $BACKDIR/presend" +log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/presend" + +for ds in ds1 ds1/second ds1/second/third \ + ds2 ds2/second \ + ds3 ds3/first ds3/first/second ds3/first/second/third +do + log_must datasetexists $POOL2/$ds +done + +log_must_busy zfs destroy -r $POOL2 + +log_must eval "zfs send -R -X $POOL/ds1/second --exclude $POOL/ds3/first/second $POOL@presend > $BACKDIR/presend" +log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/presend" + +for ds in ds1 ds2 ds2/second ds3 ds3/first +do + log_must datasetexists $POOL2/$ds +done + +for ds in ds1/second ds1/second/third ds3/first/second ds3/first/second/third +do + log_must datasetnonexists $POOL2/$ds +done + +log_pass "zfs send with multiple -X options excluded datasets" + diff --git a/tests/zfs-tests/tests/functional/rsend/rsend_028_neg.ksh b/tests/zfs-tests/tests/functional/rsend/rsend_028_neg.ksh new file mode 100755 index 000000000..e9186d793 --- /dev/null +++ b/tests/zfs-tests/tests/functional/rsend/rsend_028_neg.ksh @@ -0,0 +1,58 @@ +#!/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 2009 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# +# Copyright (c) 2013, 2016 by Delphix. All rights reserved. +# + +. $STF_SUITE/include/libtest.shlib +. $STF_SUITE/tests/functional/rsend/rsend.kshlib + +# DESCRIPTION: +# zfs send -X with invalid dataset name will fail. +# +# STRATEGY: +# 1. Setup test model +# 2. Run "zfs send -X $POOL $POOL" and check for failure. + +verify_runnable "both" + +function cleanup +{ + cleanup_pool $POOL2 + cleanup_pool $POOL + log_must setup_test_model $POOL +} + +log_assert "zfs send -X $POOL will fail" +log_onexit cleanup + +cleanup + +log_mustnot eval "zfs send -X $POOL $POOL@final" + +log_pass "Ensure that zfs send -X $POOL will fail" diff --git a/tests/zfs-tests/tests/functional/rsend/rsend_029_neg.ksh b/tests/zfs-tests/tests/functional/rsend/rsend_029_neg.ksh new file mode 100755 index 000000000..7c3a96b71 --- /dev/null +++ b/tests/zfs-tests/tests/functional/rsend/rsend_029_neg.ksh @@ -0,0 +1,58 @@ +#!/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 2009 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# +# Copyright (c) 2013, 2016 by Delphix. All rights reserved. +# + +. $STF_SUITE/include/libtest.shlib +. $STF_SUITE/tests/functional/rsend/rsend.kshlib + +# DESCRIPTION: +# zfs send -X with invalid dataset name will fail. +# +# STRATEGY: +# 1. Setup test model +# 2. Run "zfs send -X $POOL/da%set $POOL" and check for failure. + +verify_runnable "both" + +function cleanup +{ + cleanup_pool $POOL2 + cleanup_pool $POOL + log_must setup_test_model $POOL +} + +log_assert "zfs send -X $POOL/da%set will fail" +log_onexit cleanup + +cleanup + +log_mustnot eval "zfs send -X $POOL/da%set $POOL@final" + +log_pass "Ensure that zfs send -X with invalid dataset name will fail" |