[pve-devel] [PATCH v2 guest-common] replication: avoid "expected snapshot missing" warning when irrelevant
Fiona Ebner
f.ebner at proxmox.com
Fri Sep 23 10:16:47 CEST 2022
Only print it when there is a snapshot that would've been removed
without the safeguard. Mostly relevant when a new volume is added to
an already replicated guest.
Fixes replication tests in pve-manager.
Fixes: c0b2948 ("replication: prepare: safeguard against removal if expected snapshot is missing")
Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
Changes from v1:
* Only warn when other snapshot would be removed without the
safeguard, not just when no other snapshot is present.
src/PVE/Replication.pm | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/src/PVE/Replication.pm b/src/PVE/Replication.pm
index 8591d0e..469ca19 100644
--- a/src/PVE/Replication.pm
+++ b/src/PVE/Replication.pm
@@ -177,16 +177,21 @@ sub prepare {
my $removal_ok = !defined($snapname) || $info->{$snapname};
$removal_ok = 0 if $last_sync == 0; # last_sync=0 if the VM was stolen, don't remove!
$removal_ok = 1 if $last_sync == 1; # last_sync=1 is a special value used to remove all
+
+ # check if it's a replication snapshot with the same $prefix but not the $last_sync one
+ my $potentially_stale = sub {
+ my ($snap) = @_;
+
+ return 0 if defined($snapname) && $snap eq $snapname;
+ return 0 if defined($parent_snapname) && $snap eq $parent_snapname;
+ return $snap =~ m/^\Q$prefix\E/;
+ };
+
$logfunc->("expected snapshot $snapname not present for $volid, not removing others")
- if !$removal_ok && $last_sync > 1;
+ if !$removal_ok && $last_sync > 1 && grep { $potentially_stale->($_) } keys $info->%*;
for my $snap (keys $info->%*) {
- if ( # check if it's a stale replication snapshot
- !(defined($snapname) && $snap eq $snapname) &&
- !(defined($parent_snapname) && $snap eq $parent_snapname) &&
- $snap =~ m/^\Q$prefix\E/ &&
- $removal_ok
- ) {
+ if ($potentially_stale->($snap) && $removal_ok) {
$logfunc->("delete stale replication snapshot '$snap' on $volid");
eval {
PVE::Storage::volume_snapshot_delete($storecfg, $volid, $snap);
--
2.30.2
More information about the pve-devel
mailing list