all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH qemu-server 1/2] migration: factor out starting remote tunnel
@ 2020-07-16 12:06 Fabian Ebner
  2020-07-16 12:07 ` [pve-devel] [RFC qemu-server 2/2] create test environment for QemuMigrate.pm Fabian Ebner
  0 siblings, 1 reply; 2+ messages in thread
From: Fabian Ebner @ 2020-07-16 12:06 UTC (permalink / raw)
  To: pve-devel

so the '-S' check can be avoided with mocking.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---
 PVE/QemuMigrate.pm | 119 ++++++++++++++++++++++++---------------------
 1 file changed, 64 insertions(+), 55 deletions(-)

diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm
index cd4a005..0d8dc82 100644
--- a/PVE/QemuMigrate.pm
+++ b/PVE/QemuMigrate.pm
@@ -204,6 +204,69 @@ sub finish_tunnel {
     die $err if $err;
 }
 
+sub start_remote_tunnel {
+    my ($self, $raddr, $rport, $ruri, $unix_socket_info) = @_;
+
+    my $nodename = PVE::INotify::nodename();
+    my $migration_type = $self->{opts}->{migration_type};
+
+    if ($migration_type eq 'secure') {
+
+	if ($ruri =~ /^unix:/) {
+	    my $ssh_forward_info = ["$raddr:$raddr"];
+	    $unix_socket_info->{$raddr} = 1;
+
+	    my $unix_sockets = [ keys %$unix_socket_info ];
+	    for my $sock (@$unix_sockets) {
+		push @$ssh_forward_info, "$sock:$sock";
+		unlink $sock;
+	    }
+
+	    $self->{tunnel} = $self->fork_tunnel($ssh_forward_info);
+
+	    my $unix_socket_try = 0; # wait for the socket to become ready
+	    while ($unix_socket_try <= 100) {
+		$unix_socket_try++;
+		my $available = 0;
+		foreach my $sock (@$unix_sockets) {
+		    if (-S $sock) {
+			$available++;
+		    }
+		}
+
+		if ($available == @$unix_sockets) {
+		    last;
+		}
+
+		usleep(50000);
+	    }
+	    if ($unix_socket_try > 100) {
+		$self->{errors} = 1;
+		$self->finish_tunnel($self->{tunnel});
+		die "Timeout, migration socket $ruri did not get ready";
+	    }
+	    $self->{tunnel}->{unix_sockets} = $unix_sockets if (@$unix_sockets);
+
+	} elsif ($ruri =~ /^tcp:/) {
+	    my $ssh_forward_info = [];
+	    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);
+		push @$ssh_forward_info, "$lport:localhost:$rport";
+	    }
+
+	    $self->{tunnel} = $self->fork_tunnel($ssh_forward_info);
+
+	} 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();
+    }
+}
+
 sub lock_vm {
     my ($self, $vmid, $code, @param) = @_;
 
@@ -795,62 +858,8 @@ sub phase2 {
     }
 
     $self->log('info', "start remote tunnel");
+    $self->start_remote_tunnel($raddr, $rport, $ruri, $unix_socket_info);
 
-    if ($migration_type eq 'secure') {
-
-	if ($ruri =~ /^unix:/) {
-	    my $ssh_forward_info = ["$raddr:$raddr"];
-	    $unix_socket_info->{$raddr} = 1;
-
-	    my $unix_sockets = [ keys %$unix_socket_info ];
-	    for my $sock (@$unix_sockets) {
-		push @$ssh_forward_info, "$sock:$sock";
-		unlink $sock;
-	    }
-
-	    $self->{tunnel} = $self->fork_tunnel($ssh_forward_info);
-
-	    my $unix_socket_try = 0; # wait for the socket to become ready
-	    while ($unix_socket_try <= 100) {
-		$unix_socket_try++;
-		my $available = 0;
-		foreach my $sock (@$unix_sockets) {
-		    if (-S $sock) {
-			$available++;
-		    }
-		}
-
-		if ($available == @$unix_sockets) {
-		    last;
-		}
-
-		usleep(50000);
-	    }
-	    if ($unix_socket_try > 100) {
-		$self->{errors} = 1;
-		$self->finish_tunnel($self->{tunnel});
-		die "Timeout, migration socket $ruri did not get ready";
-	    }
-	    $self->{tunnel}->{unix_sockets} = $unix_sockets if (@$unix_sockets);
-
-	} elsif ($ruri =~ /^tcp:/) {
-	    my $ssh_forward_info = [];
-	    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);
-		push @$ssh_forward_info, "$lport:localhost:$rport";
-	    }
-
-	    $self->{tunnel} = $self->fork_tunnel($ssh_forward_info);
-
-	} 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();
-    }
     my $start = time();
 
     my $opt_bwlimit = $self->{opts}->{bwlimit};
-- 
2.20.1





^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-07-16 12:07 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-16 12:06 [pve-devel] [PATCH qemu-server 1/2] migration: factor out starting remote tunnel Fabian Ebner
2020-07-16 12:07 ` [pve-devel] [RFC qemu-server 2/2] create test environment for QemuMigrate.pm Fabian Ebner

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal