mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
virNetServerRun: Notify systemd that we're accepting clients
Systemd does not forget about the cases, where client service needs to wait for daemon service to initialize and start accepting new clients. Setting a dependency in client is not enough as systemd doesn't know when the daemon has initialized itself and started accepting new clients. However, it offers a mechanism to solve this. The daemon needs to call a special systemd function by which the daemon tells "I'm ready to accept new clients". This is exactly what we need with libvirtd-guests (client) and libvirtd (daemon). So now, with this change, libvirt-guests.service is invoked not any sooner than libvirtd.service calls the systemd notify function. Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
4e7fc8305a
commit
68954fb25c
@ -239,6 +239,7 @@ LIBVIRT_CHECK_SANLOCK
|
||||
LIBVIRT_CHECK_SASL
|
||||
LIBVIRT_CHECK_SELINUX
|
||||
LIBVIRT_CHECK_SSH2
|
||||
LIBVIRT_CHECK_SYSTEMD_DAEMON
|
||||
LIBVIRT_CHECK_UDEV
|
||||
LIBVIRT_CHECK_YAJL
|
||||
|
||||
@ -2773,6 +2774,7 @@ LIBVIRT_RESULT_SANLOCK
|
||||
LIBVIRT_RESULT_SASL
|
||||
LIBVIRT_RESULT_SELINUX
|
||||
LIBVIRT_RESULT_SSH2
|
||||
LIBVIRT_RESULT_SYSTEMD_DAEMON
|
||||
LIBVIRT_RESULT_UDEV
|
||||
LIBVIRT_RESULT_YAJL
|
||||
AC_MSG_NOTICE([ libxml: $LIBXML_CFLAGS $LIBXML_LIBS])
|
||||
|
@ -13,6 +13,7 @@ Documentation=man:libvirtd(8)
|
||||
Documentation=http://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
EnvironmentFile=-/etc/sysconfig/libvirtd
|
||||
ExecStart=@sbindir@/libvirtd $LIBVIRTD_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
|
34
m4/virt-systemd-daemon.m4
Normal file
34
m4/virt-systemd-daemon.m4
Normal file
@ -0,0 +1,34 @@
|
||||
dnl The libsystemd-daemon.so library
|
||||
dnl
|
||||
dnl Copyright (C) 2012-2013 Red Hat, Inc.
|
||||
dnl
|
||||
dnl This library is free software; you can redistribute it and/or
|
||||
dnl modify it under the terms of the GNU Lesser General Public
|
||||
dnl License as published by the Free Software Foundation; either
|
||||
dnl version 2.1 of the License, or (at your option) any later version.
|
||||
dnl
|
||||
dnl This library is distributed in the hope that it will be useful,
|
||||
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
dnl Lesser General Public License for more details.
|
||||
dnl
|
||||
dnl You should have received a copy of the GNU Lesser General Public
|
||||
dnl License along with this library. If not, see
|
||||
dnl <http://www.gnu.org/licenses/>.
|
||||
dnl
|
||||
|
||||
AC_DEFUN([LIBVIRT_CHECK_SYSTEMD_DAEMON],[
|
||||
LIBVIRT_CHECK_PKG([SYSTEMD_DAEMON], [libsystemd-daemon], [0.27.1])
|
||||
|
||||
old_CFLAGS="$CFLAGS"
|
||||
old_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $SYSTEMD_DAEMON_CFLAGS"
|
||||
LIBS="$LIBS $SYSTEMD_DAEMON_LIBS"
|
||||
AC_CHECK_FUNCS([sd_notify])
|
||||
CFLAGS="$old_CFLAGS"
|
||||
LIBS="$old_LIBS"
|
||||
])
|
||||
|
||||
AC_DEFUN([LIBVIRT_RESULT_SYSTEMD_DAEMON],[
|
||||
LIBVIRT_RESULT_LIB([SYSTEMD_DAEMON])
|
||||
])
|
@ -958,11 +958,11 @@ libvirt_util_la_SOURCES = \
|
||||
libvirt_util_la_CFLAGS = $(CAPNG_CFLAGS) $(YAJL_CFLAGS) $(LIBNL_CFLAGS) \
|
||||
$(AM_CFLAGS) $(AUDIT_CFLAGS) $(DEVMAPPER_CFLAGS) \
|
||||
$(DBUS_CFLAGS) $(LDEXP_LIBM) $(NUMACTL_CFLAGS) \
|
||||
-I$(top_srcdir)/src/conf
|
||||
$(SYSTEMD_DAEMON_CFLAGS) -I$(top_srcdir)/src/conf
|
||||
libvirt_util_la_LIBADD = $(CAPNG_LIBS) $(YAJL_LIBS) $(LIBNL_LIBS) \
|
||||
$(THREAD_LIBS) $(AUDIT_LIBS) $(DEVMAPPER_LIBS) \
|
||||
$(LIB_CLOCK_GETTIME) $(DBUS_LIBS) $(MSCOM_LIBS) $(LIBXML_LIBS) \
|
||||
$(SECDRIVER_LIBS) $(NUMACTL_LIBS)
|
||||
$(SECDRIVER_LIBS) $(NUMACTL_LIBS) $(SYSTEMD_DAEMON_LIBS)
|
||||
|
||||
|
||||
noinst_LTLIBRARIES += libvirt_conf.la
|
||||
|
@ -1826,6 +1826,7 @@ virSystemdCreateMachine;
|
||||
virSystemdMakeMachineName;
|
||||
virSystemdMakeScopeName;
|
||||
virSystemdMakeSliceName;
|
||||
virSystemdNotifyStartup;
|
||||
virSystemdTerminateMachine;
|
||||
|
||||
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include "virnetservermdns.h"
|
||||
#include "virdbus.h"
|
||||
#include "virstring.h"
|
||||
#include "virsystemd.h"
|
||||
|
||||
#ifndef SA_SIGINFO
|
||||
# define SA_SIGINFO 0
|
||||
@ -1085,6 +1086,10 @@ void virNetServerRun(virNetServerPtr srv)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* We are accepting connections now. Notify systemd
|
||||
* so it can start dependent services. */
|
||||
virSystemdNotifyStartup();
|
||||
|
||||
VIR_DEBUG("srv=%p quit=%d", srv, srv->quit);
|
||||
while (!srv->quit) {
|
||||
/* A shutdown timeout is specified, so check
|
||||
|
@ -21,6 +21,10 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#ifdef WITH_SYSTEMD_DAEMON
|
||||
# include <systemd/sd-daemon.h>
|
||||
#endif
|
||||
|
||||
#include "virsystemd.h"
|
||||
#include "virdbus.h"
|
||||
#include "virstring.h"
|
||||
@ -304,3 +308,11 @@ cleanup:
|
||||
VIR_FREE(machinename);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void
|
||||
virSystemdNotifyStartup(void)
|
||||
{
|
||||
#ifdef WITH_SYSTEMD_DAEMON
|
||||
sd_notify(0, "READY=1");
|
||||
#endif
|
||||
}
|
||||
|
@ -46,4 +46,6 @@ int virSystemdTerminateMachine(const char *name,
|
||||
const char *drivername,
|
||||
bool privileged);
|
||||
|
||||
void virSystemdNotifyStartup(void);
|
||||
|
||||
#endif /* __VIR_SYSTEMD_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user