Signed-off-by: Alexandre Derumier <aderum...@odiso.com> --- PVE/QemuMigrate.pm | 88 +++++++++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 40 deletions(-)
diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm index 5c3c5d3..7a701a9 100644 --- a/PVE/QemuMigrate.pm +++ b/PVE/QemuMigrate.pm @@ -547,47 +547,9 @@ sub phase2 { my $cmd = generate_migrate_start_cmd($self, $vmid, $nodename, $migration_type); my ($raddr, $rport, $ruri, $spice_port, $spice_ticket) = find_remote_ports($self, $vmid, $cmd); - - $self->log('info', "start remote tunnel"); - - if ($migration_type eq 'secure') { - - if ($ruri =~ /^unix:/) { - unlink $raddr; - $self->{tunnel} = $self->fork_tunnel("$raddr:$raddr"); - $self->{tunnel}->{sock_addr} = $raddr; - - my $unix_socket_try = 0; # wait for the socket to become ready - while (! -S $raddr) { - $unix_socket_try++; - if ($unix_socket_try > 100) { - $self->{errors} = 1; - $self->finish_tunnel($self->{tunnel}); - die "Timeout, migration socket $ruri did not get ready"; - } - - usleep(50000); - } - - } elsif ($ruri =~ /^tcp:/) { - my $tunnel_addr; - if ($raddr eq "localhost") { - # for backwards compatibility with older qemu-server versions - my $pfamily = PVE::Tools::get_host_address_family($nodename); - my $lport = PVE::Tools::next_migrate_port($pfamily); - $tunnel_addr = "$lport:localhost:$rport"; - } - - $self->{tunnel} = $self->fork_tunnel($tunnel_addr); - - } else { - die "unsupported protocol in migration URI: $ruri\n"; - } - } else { - #fork tunnel for insecure migration, to send faster commands like resume - $self->{tunnel} = $self->fork_tunnel(); - } + start_remote_tunnel($self, $nodename, $migration_type, $raddr, $rport, $ruri); + my $start = time(); my $opt_bwlimit = $self->{opts}->{bwlimit}; @@ -1094,4 +1056,50 @@ sub find_remote_ports { return ($raddr, $rport, $ruri, $spice_port, $spice_ticket); } +sub start_remote_tunnel { + my ($self, $nodename, $migration_type, $raddr, $rport, $ruri) = @_; + + die "unable to detect remote migration address\n" if !$raddr; + + $self->log('info', "start remote tunnel"); + + if ($migration_type eq 'secure') { + + if ($ruri =~ /^unix:/) { + unlink $raddr; + $self->{tunnel} = $self->fork_tunnel("$raddr:$raddr"); + $self->{tunnel}->{sock_addr} = $raddr; + + my $unix_socket_try = 0; # wait for the socket to become ready + while (! -S $raddr) { + $unix_socket_try++; + if ($unix_socket_try > 100) { + $self->{errors} = 1; + $self->finish_tunnel($self->{tunnel}); + die "Timeout, migration socket $ruri did not get ready"; + } + + usleep(50000); + } + + } elsif ($ruri =~ /^tcp:/) { + my $tunnel_addr; + if ($raddr eq "localhost") { + # for backwards compatibility with older qemu-server versions + my $pfamily = PVE::Tools::get_host_address_family($nodename); + my $lport = PVE::Tools::next_migrate_port($pfamily); + $tunnel_addr = "$lport:localhost:$rport"; + } + + $self->{tunnel} = $self->fork_tunnel($tunnel_addr); + + } else { + die "unsupported protocol in migration URI: $ruri\n"; + } + } else { + #fork tunnel for insecure migration, to send faster commands like resume + $self->{tunnel} = $self->fork_tunnel(); + } +} + 1; -- 2.11.0 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel