[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