This changes the behavior to remove offline migrated volumes only after the migration has finished successfully (mostly relevant for mixed settings, e.g. online migration with unused/vmstate disks).
local_volumes contains both, the volumes previously in $self->{volumes} and the volumes in $self->{online_local_volumes}, and hence is the place to look for which volumes we need to remove. Of course, replicated volumes still need to be skipped. Signed-off-by: Fabian Ebner <f.eb...@proxmox.com> --- Who needs phase3 anyways ;)? PVE/QemuMigrate.pm | 45 ++++++++++++--------------------------------- 1 file changed, 12 insertions(+), 33 deletions(-) diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm index 421b9d7..a6f42df 100644 --- a/PVE/QemuMigrate.pm +++ b/PVE/QemuMigrate.pm @@ -292,7 +292,6 @@ sub scan_local_volumes { # local volumes which have been copied # and their old_id => new_id pairs - $self->{volumes} = []; $self->{volume_map} = {}; $self->{local_volumes} = {}; @@ -523,14 +522,10 @@ sub scan_local_volumes { my $ref = $local_volumes->{$volid}->{ref}; if ($self->{running} && $ref eq 'config') { push @{$self->{online_local_volumes}}, $volid; - } elsif ($ref eq 'generated') { - die "can't live migrate VM with local cloudinit disk. use a shared storage instead\n" if $self->{running}; - # skip all generated volumes but queue them for deletion in phase3_cleanup - push @{$self->{volumes}}, $volid; - next; + } elsif ($self->{running} && $ref eq 'generated') { + die "can't live migrate VM with local cloudinit disk. use a shared storage instead\n"; } else { next if $self->{replicated_volumes}->{$volid}; - push @{$self->{volumes}}, $volid; $local_volumes->{$volid}->{migration_mode} = 'offline'; } } @@ -1160,18 +1155,7 @@ sub phase2_cleanup { sub phase3 { my ($self, $vmid) = @_; - my $volids = $self->{volumes}; - return if $self->{phase2errors}; - - # destroy local copies - foreach my $volid (@$volids) { - eval { PVE::Storage::vdisk_free($self->{storecfg}, $volid); }; - if (my $err = $@) { - $self->log('err', "removing local copy of '$volid' failed - $err"); - $self->{errors} = 1; - last if $err =~ /^interrupted by signal$/; - } - } + return; } sub phase3_cleanup { @@ -1303,22 +1287,17 @@ sub phase3_cleanup { $self->{errors} = 1; } - if($self->{storage_migration}) { - # destroy local copies - my $volids = $self->{online_local_volumes}; - - foreach my $volid (@$volids) { - # keep replicated volumes! - next if $self->{replicated_volumes}->{$volid}; + # destroy local copies + foreach my $volid (keys %{$self->{local_volumes}}) { + # keep replicated volumes! + next if $self->{replicated_volumes}->{$volid}; - eval { PVE::Storage::vdisk_free($self->{storecfg}, $volid); }; - if (my $err = $@) { - $self->log('err', "removing local copy of '$volid' failed - $err"); - $self->{errors} = 1; - last if $err =~ /^interrupted by signal$/; - } + eval { PVE::Storage::vdisk_free($self->{storecfg}, $volid); }; + if (my $err = $@) { + $self->log('err', "removing local copy of '$volid' failed - $err"); + $self->{errors} = 1; + last if $err =~ /^interrupted by signal$/; } - } # clear migrate lock -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel