mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-05-29 18:34:50 +00:00
fix bug 247: retry qmp open
This commit is contained in:
parent
14db53662a
commit
2ae10d4e22
@ -4,7 +4,10 @@ use strict;
|
|||||||
#use PVE::SafeSyslog;
|
#use PVE::SafeSyslog;
|
||||||
use PVE::QemuServer;
|
use PVE::QemuServer;
|
||||||
use IO::Multiplex;
|
use IO::Multiplex;
|
||||||
|
use POSIX qw(EINTR EAGAIN);
|
||||||
use JSON;
|
use JSON;
|
||||||
|
use Time::HiRes qw(usleep gettimeofday tv_interval);
|
||||||
|
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
|
|
||||||
# Qemu Monitor Protocol (QMP) client.
|
# Qemu Monitor Protocol (QMP) client.
|
||||||
@ -109,8 +112,22 @@ my $open_connection = sub {
|
|||||||
|
|
||||||
my $sname = PVE::QemuServer::qmp_socket($vmid);
|
my $sname = PVE::QemuServer::qmp_socket($vmid);
|
||||||
|
|
||||||
my $fh = IO::Socket::UNIX->new(Peer => $sname, Blocking => 0, Timeout => 1) ||
|
my $fh;
|
||||||
die "unable to connect to VM $vmid socket - $!\n";
|
my $starttime = [gettimeofday];
|
||||||
|
my $count = 0;
|
||||||
|
for (;;) {
|
||||||
|
$count++;
|
||||||
|
$fh = IO::Socket::UNIX->new(Peer => $sname, Blocking => 0, Timeout => 1);
|
||||||
|
last if $fh;
|
||||||
|
if ($! != EINTR && $! != EAGAIN) {
|
||||||
|
die "unable to connect to VM $vmid socket - $!\n";
|
||||||
|
}
|
||||||
|
my $elapsed = tv_interval($starttime, [gettimeofday]);
|
||||||
|
if ($elapsed > 1) {
|
||||||
|
die "unable to connect to VM $vmid socket - timeout after $count retries\n";
|
||||||
|
}
|
||||||
|
usleep(100000);
|
||||||
|
}
|
||||||
|
|
||||||
$self->{fhs}->{$vmid} = $fh;
|
$self->{fhs}->{$vmid} = $fh;
|
||||||
$self->{fhs_lookup}->{$fh} = $vmid;
|
$self->{fhs_lookup}->{$fh} = $vmid;
|
||||||
|
Loading…
Reference in New Issue
Block a user