replication: prepare: return additional information about snapshots

This is backwards compatible, because existing users of prepare() only
rely on the elements to evaluate to true or be defined.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
This commit is contained in:
Fabian Ebner 2021-10-19 09:54:54 +02:00 committed by Fabian Grünbichler
parent 84fc20aa37
commit 3200c404a9

View File

@ -181,11 +181,11 @@ sub prepare {
my $last_snapshots = {}; my $last_snapshots = {};
my $cleaned_replicated_volumes = {}; my $cleaned_replicated_volumes = {};
foreach my $volid (@$volids) { foreach my $volid (@$volids) {
my $list = PVE::Storage::volume_snapshot_list($storecfg, $volid); my $info = PVE::Storage::volume_snapshot_info($storecfg, $volid);
foreach my $snap (@$list) { for my $snap (keys $info->%*) {
if ((defined($snapname) && ($snap eq $snapname)) || if ((defined($snapname) && ($snap eq $snapname)) ||
(defined($parent_snapname) && ($snap eq $parent_snapname))) { (defined($parent_snapname) && ($snap eq $parent_snapname))) {
$last_snapshots->{$volid}->{$snap} = 1; $last_snapshots->{$volid}->{$snap} = $info->{$snap};
} elsif ($snap =~ m/^\Q$prefix\E/) { } elsif ($snap =~ m/^\Q$prefix\E/) {
if ($last_sync != 0) { if ($last_sync != 0) {
$logfunc->("delete stale replication snapshot '$snap' on $volid"); $logfunc->("delete stale replication snapshot '$snap' on $volid");
@ -206,11 +206,11 @@ sub prepare {
} }
# Last_sync=0 and a replication snapshot only occur, if the VM was stolen # Last_sync=0 and a replication snapshot only occur, if the VM was stolen
} else { } else {
$last_snapshots->{$volid}->{$snap} = 1; $last_snapshots->{$volid}->{$snap} = $info->{$snap};
} }
# Other snapshots might need to serve as replication base after rollback # Other snapshots might need to serve as replication base after rollback
} else { } else {
$last_snapshots->{$volid}->{$snap} = 1; $last_snapshots->{$volid}->{$snap} = $info->{$snap};
} }
} }
} }