Now it is possible to migrate a VM offline when replica is enabled. It will reduce replication to an minimal amount. --- PVE/QemuMigrate.pm | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-)
diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm index e6f147e..5defe34 100644 --- a/PVE/QemuMigrate.pm +++ b/PVE/QemuMigrate.pm @@ -10,6 +10,7 @@ use PVE::INotify; use PVE::Tools; use PVE::Cluster; use PVE::Storage; +use PVE::ReplicationTools; use PVE::QemuServer; use Time::HiRes qw( usleep ); use PVE::RPCEnvironment; @@ -435,6 +436,16 @@ sub phase1 { sync_disks($self, $vmid); + # set new replica_target if we migrate to replica target. + if ($conf->{replica}) { + $self->log('info', "change replica target to Node: $self->{opts}->{node}"); + if ($conf->{replica_target} eq $self->{node}) { + $conf->{replica_target} = $self->{opts}->{node}; + } + + PVE::ReplicationTools::job_remove($vmid); + PVE::QemuConfig->write_config($vmid, $conf); + } }; sub phase1_cleanup { @@ -842,13 +853,22 @@ sub phase3 { my $volids = $self->{volumes}; return if $self->{phase2errors}; + my $synced_volumes = PVE::ReplicationTools::get_syncable_guestdisks($self->{vmconf}, 'qemu') + if $self->{vmconf}->{replica}; + + # 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$/; + + # do not destroy if new target is local_host + if (!($self->{vmconf}->{replica} && defined($synced_volumes->{$volid}) + && $self->{vmconf}->{replica_target} eq $self->{node}) ) { + 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$/; + } } } } @@ -955,6 +975,11 @@ sub phase3_cleanup { # clear migrate lock my $cmd = [ @{$self->{rem_ssh}}, 'qm', 'unlock', $vmid ]; $self->cmd_logerr($cmd, errmsg => "failed to clear migrate lock"); + + if ($self->{vmconf}->{replica}) { + my $cmd = [ @{$self->{rem_ssh}}, 'qm', 'set', $vmid, '--replica']; + $self->cmd_logerr($cmd, errmsg => "failed to activate replica"); + } } sub final_cleanup { -- 2.1.4 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel