[pve-devel] [zsync] fix: check for incremental sync snapshot.

Fabian Ebner f.ebner at proxmox.com
Thu Mar 19 11:51:47 CET 2020


Hi,
this does fix an issue when the receiving side has the most recent 
snapshot, but not the 'old_snap' one. And of course testing for 
'last_snap' is correct, since that one is the relevant one for the 
incremental sync. With that:

Reviewed-By: Fabian Ebner <f.ebner at proxmox.com>
Tested-By: Fabian Ebner <f.ebner at proxmox.com>

Some ideas for further improvements:
* If on the destination there are older snapshots but not most recent 
one, pve-zsync tries to do a full sync and fails with: "destination has 
snapshots". One could get the list of snapshots from the destination, 
the list of snapshots from the source and use the most recent common one 
as the starting point for an incremental sync (and fail if both sides do 
have snapshots but no match).
* Knowing the list of snapshots for the destination could also be used 
to prevent issuing a useless remote 'zfs destroy' when the snapshot to 
be deleted does not exist for the destination.

On 18.03.20 07:51, Wolfgang Link wrote:
> For an incremental sync you need the last_snap on both sides.
> ---
>   pve-zsync | 13 ++++---------
>   1 file changed, 4 insertions(+), 9 deletions(-)
> 
> diff --git a/pve-zsync b/pve-zsync
> index ea3178e..893baf0 100755
> --- a/pve-zsync
> +++ b/pve-zsync
> @@ -931,6 +931,7 @@ sub snapshot_destroy {
>       }
>   }
>   
> +# check if snapshot for incremental sync exist on dest side
>   sub snapshot_exist {
>       my ($source , $dest, $method, $dest_user) = @_;
>   
> @@ -940,22 +941,16 @@ sub snapshot_exist {
>   
>       my $path = $dest->{all};
>       $path .= "/$source->{last_part}" if $source->{last_part};
> -    $path .= "\@$source->{old_snap}";
> +    $path .= "\@$source->{last_snap}";
>   
>       push @$cmd, $path;
>   
> -
> -    my $text = "";
> -    eval {$text =run_cmd($cmd);};
> +    eval {run_cmd($cmd)};
>       if (my $erro =$@) {
>   	warn "WARN: $erro";
>   	return undef;
>       }
> -
> -    while ($text && $text =~ s/^(.*?)(\n|$)//) {
> -	my $line =$1;
> -	return 1 if $line =~ m/^.*$source->{old_snap}$/;
> -    }
> +    return 1;
>   }
>   
>   sub send_image {
> 




More information about the pve-devel mailing list