[PATCH 1/3] test: add fake_snap.pl for snapshot simulation

Michael Adam obnox at samba.org
Wed Dec 4 16:58:14 MST 2013


pushed to autobuild

On 2013-12-03 at 14:45 +0100, David Disseldorp wrote:
> The script simulates snapshots by simply copying file data from the base
> path to a snapshot path located under .snapshots/@GMT-%Y.%m.%d-%H.%M.%S/
> 
> Signed-off-by: David Disseldorp <ddiss at samba.org>
> ---
>  source3/script/tests/fake_snap.pl | 70 +++++++++++++++++++++++++++++++++++++++
>  1 file changed, 70 insertions(+)
>  create mode 100755 source3/script/tests/fake_snap.pl
> 
> diff --git a/source3/script/tests/fake_snap.pl b/source3/script/tests/fake_snap.pl
> new file mode 100755
> index 0000000..d1233f3
> --- /dev/null
> +++ b/source3/script/tests/fake_snap.pl
> @@ -0,0 +1,70 @@
> +#!/usr/bin/perl -w
> +
> +use strict;
> +
> +use File::Path qw(rmtree);
> +use POSIX ();
> +
> +sub _create_snapshot
> +{
> +	my ($base_path) = @_;
> +	my $time_str = POSIX::strftime("%Y.%m.%d-%H.%M.%S" , localtime());
> +	my $snap_path = $base_path . "/.snapshots/\@GMT-" . $time_str;
> +	my $ret;
> +
> +	POSIX::mkdir($base_path . "/.snapshots", 0777);
> +
> +	# add trailing slash to src path to ensure that only contents is copied
> +	$ret = system("rsync", "-a", "--exclude=.snapshots/", "${base_path}/",
> +		      $snap_path);
> +	if ($ret != 0) {
> +		print STDERR "rsync failed with $ret\n";
> +	} else {
> +		print "$snap_path\n";
> +	}
> +
> +	return $ret;
> +}
> +
> +sub _delete_snapshot
> +{
> +	my ($base_path, $snap_path) = @_;
> +
> +	# we're doing a recursive delete, so do some sanity checks
> +	if ((index($snap_path, $base_path) != 0) || (index($snap_path, ".snapshots") == -1)) {
> +		print STDERR "invalid snap_path: $snap_path\n";
> +		return -1;
> +	}
> +
> +	rmtree($snap_path, {error => \my $err});
> +	if (@$err) {
> +		for my $diag (@$err) {
> +			my ($file, $message) = %$diag;
> +			if ($file eq '') {
> +				print STDERR "rmtree error: $message\n";
> +			} else {
> +				print STDERR "rmtree error $file: $message\n";
> +			}
> +		}
> +		return -1;
> +	}
> +
> +	return 0;
> +}
> +
> +my $ret;
> +my $num_args = $#ARGV + 1;
> +my $cmd = shift;
> +
> +if (($num_args == 2) && ($cmd eq "--check")) {
> +	$ret = 0;
> +} elsif (($num_args == 2) && ($cmd eq "--create")) {
> +	$ret = _create_snapshot($ARGV[0]);
> +} elsif (($num_args == 3) && ($cmd eq "--delete")) {
> +	$ret = _delete_snapshot($ARGV[0], $ARGV[1]);
> +} else {
> +	print STDERR "invalid script argument\n";
> +	$ret = -1;
> +}
> +
> +exit $ret;
> -- 
> 1.8.1.4
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 215 bytes
Desc: Digital signature
URL: <http://lists.samba.org/pipermail/samba-technical/attachments/20131205/fdae76f2/attachment.pgp>


More information about the samba-technical mailing list