[pve-devel] [PATCH v2 manager 2/2] pvesr: prepare_local_job: use PVE::replication::prepare

Fabian Grünbichler f.gruenbichler at proxmox.com
Thu Jun 8 11:07:35 CEST 2017


to reduce code duplication. this slightly changes behaviour
compared to the previous version:

only disks with the correct prefix are cleaned up, not all
disks with __replication* snapshots.

Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
---
v2: rebased with mapping from $images to $volids

 PVE/CLI/pvesr.pm | 24 +++++-------------------
 1 file changed, 5 insertions(+), 19 deletions(-)

diff --git a/PVE/CLI/pvesr.pm b/PVE/CLI/pvesr.pm
index b9206e0f..3ca01c86 100644
--- a/PVE/CLI/pvesr.pm
+++ b/PVE/CLI/pvesr.pm
@@ -129,31 +129,17 @@ __PACKAGE__->register_method ({
 	my $snapname = PVE::ReplicationState::replication_snapshot_name($jobid, $last_sync);
 
 	# find replication snapshots
-	my $last_snapshots = {};
 	foreach my $storeid (@$storage_list) {
 	    my $scfg = PVE::Storage::storage_config($storecfg, $storeid);
 	    my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
 	    my $images = $plugin->list_images($storeid, $scfg, $vmid, undef, $cache);
-	    foreach my $disk (@$images) {
-		my $volid = $disk->{volid};
-		my ($storeid, $volname) = PVE::Storage::parse_volume_id($volid);
-		my $list = $plugin->volume_snapshot_list($scfg, $storeid, $volname); # fixme: pass $cache
-		my $found_replication_snapshots = 0;
-		foreach my $snap (@$list) {
-		    if ($snap eq $snapname || (defined($parent_snapname) && ($snap eq $parent_snapname))) {
-			$last_snapshots->{$volid}->{$snap} = 1 if $wanted_volids->{$volid};
-		    } elsif ($snap =~ m/^__replication_/) {
-			$found_replication_snapshots = 1;
-			if ($wanted_volids->{$volid}) {
-			    $logfunc->("$jobid: delete stale replication snapshot '$snap' on $volid");
-			    PVE::Storage::volume_snapshot_delete($storecfg, $volid, $snap);
-			}
-		    }
-		}
-		# remove stale volumes
-		if ($found_replication_snapshots && !$wanted_volids->{$volid}) {
+	    my $volids = [ map { $_->{volid} } @$images ];
+	    my ($last_snapshots, $cleaned_replicated_volumes) = PVE::Replication::prepare($storecfg, $volids, $jobid, $last_sync, $parent_snapname, $logfunc);
+	    foreach my $volid (keys %$cleaned_replicated_volumes) {
+		if (!$wanted_volids->{$volid}) {
 		    $logfunc->("$jobid: delete stale volume '$volid'");
 		    PVE::Storage::vdisk_free($storecfg, $volid);
+		    delete $last_snapshots->{$volid};
 		}
 	    }
 	}
-- 
2.11.0





More information about the pve-devel mailing list