On 06/21/2018 07:03 AM, Michael Trapp wrote:
vhostmd has no signal handler for SIGPIPE and a restart of libvirtd results in
a stopped vhostmd. The root cause seems to be a UDS socket between vhostmd and
libvirtd which is closed by a libvirtd restart.
In addition to the signal handler the connection to libvirtd has to be opened
again otherwise vhostmd can't read any data from libvirtd and doesn't update
the metrics.
---
The reconnect can be checked with
service libvirtd stop
This results in a closed UDS socket of the vhostmd process
/var/run/libvirt/libvirt-sock-ro is not available anymore
After a
service libvirtd start
vhostmd connects to libvirtd (strace)
connect(6, {sa_family=AF_FILE, path="/var/run/libvirt/libvirt-sock-ro"}, 110) = 0
/proc/PID/fd contains
lrwx------ 1 root root 64 ... 6 -> socket:[173298]
and the VM metrics are updated again.
vhostmd/vhostmd.c | 2 ++
vhostmd/virt-util.c | 43 ++++++++++++++++++++++++++++++++++++-------
2 files changed, 38 insertions(+), 7 deletions(-)
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
index 7f04705..4cf4630 100644
--- a/vhostmd/vhostmd.c
+++ b/vhostmd/vhostmd.c
@@ -117,6 +117,7 @@ static void sig_handler(int sig, siginfo_t *siginfo ATTRIBUTE_UNUSED,
case SIGQUIT:
down = 1;
break;
+ case SIGPIPE:
default:
break;
}
@@ -1053,6 +1054,7 @@ int main(int argc, char *argv[])
sigaction(SIGINT, &sig_action, NULL);
sigaction(SIGQUIT, &sig_action, NULL);
sigaction(SIGTERM, &sig_action, NULL);
+ sigaction(SIGPIPE, &sig_action, NULL);
xmlInitParser();
diff --git a/vhostmd/virt-util.c b/vhostmd/virt-util.c
index 1c31305..c867300 100644
--- a/vhostmd/virt-util.c
+++ b/vhostmd/virt-util.c
@@ -26,21 +26,48 @@
#include "util.h"
+enum {
+ CLOSED = 0,
+ ESTABLISHED
+} connection = CLOSED;
+
static virConnectPtr conn = NULL;
const char *libvirt_uri = NULL;
+void
+conn_close_cb(virConnectPtr c,
+ int __attribute__((__unused__)) reason,
+ void __attribute__((__unused__)) *p)
We already have this defined in util.h. ACK with the below squashed in. I'll
push it shortly.
Regards,
Jim
diff --git a/vhostmd/virt-util.c b/vhostmd/virt-util.c
index c867300..587146f 100644
--- a/vhostmd/virt-util.c
+++ b/vhostmd/virt-util.c
@@ -37,8 +37,8 @@ const char *libvirt_uri = NULL;
void
conn_close_cb(virConnectPtr c,
- int __attribute__((__unused__)) reason,
- void __attribute__((__unused__)) *p)
+ int reason ATTRIBUTE_UNUSED,
+ void *p ATTRIBUTE_UNUSED)
{
if (c == conn)
connection = CLOSED;
_______________________________________________
virt-tools-list mailing list
virt-tools-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/virt-tools-list