[libvirt] [PATCH 20/23] Enable systemd socket activation with virtlockd

Eric Blake eblake at redhat.com
Fri Aug 17 16:53:23 UTC 2012


On 08/09/2012 09:20 AM, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
> 
> This enhancement virtlockd so that it can receive a pre-opened

s/enhancement/enhances/

> UNIX domain socket from systemd at launch time, and adds the
> systemd service/socket unit files
> 
> * daemon/libvirtd.service.in: Require virtlockd to be running
> * libvirt.spec.in: Add virtlockd systemd files
> * src/Makefile.am: Install systemd files
> * src/locking/lock_daemon.c: Support socket activation
> * src/locking/virtlockd.service.in, src/locking/virtlockd.socket.in:
>   systemd unit files
> * src/rpc/virnetserverservice.c, src/rpc/virnetserverservice.h:
>   Add virNetServerServiceNewFD() method
> * src/rpc/virnetsocket.c, src/rpc/virnetsocket.h: Add virNetSocketNewListenFD
>   method
> 

I didn't closely read the systemd documentation to see if you integrated
correctly, so I have to assume that you tested this and that it worked.
 That said, I'll review the C code for accuracy.

> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
>  libvirt.spec.in                  |  6 ++++
>  src/Makefile.am                  | 51 ++++++++++++++++++++++++++--
>  src/locking/lock_daemon.c        | 73 ++++++++++++++++++++++++++++++++++++++--
>  src/locking/virtlockd.service.in | 13 +++++++
>  src/locking/virtlockd.socket.in  |  8 +++++
>  5 files changed, 147 insertions(+), 4 deletions(-)
>  create mode 100644 src/locking/virtlockd.service.in
>  create mode 100644 src/locking/virtlockd.socket.in
> 
> +++ b/src/Makefile.am
> @@ -1552,6 +1552,53 @@ virtlockd.init: locking/virtlockd.init.in $(top_builddir)/config.status
>  
>  
>  
> +EXTRA_DIST += locking/virtlockd.service.in locking/virtlockd.socket.in
> +
> +if WITH_LIBVIRTD
> +if LIBVIRT_INIT_SCRIPT_SYSTEMD
> +
> +SYSTEMD_UNIT_DIR = /lib/systemd/system
> +
> +BUILT_SOURCES += virtlockd.service virtlockd.socket
> +
> +install-systemd: virtlockd.init install-sysconfig
> +	mkdir -p $(DESTDIR)$(SYSTEMD_UNIT_DIR)

$(MKDIR_P)

> +	$(INSTALL_SCRIPT) virtlockd.service \
> +	  $(DESTDIR)$(SYSTEMD_UNIT_DIR)/
> +	$(INSTALL_SCRIPT) virtlockd.socket \
> +	  $(DESTDIR)$(SYSTEMD_UNIT_DIR)/

s/INSTALL_SCRIPT/INSTALL_DATA/2 - systemd files should not be marked
executable (cf. install-init-systemd in daemon/Makefile.am).

> 
> +
> +virtlockd.service: locking/virtlockd.service.in $(top_builddir)/config.status
> +	$(AM_V_GEN)sed					\
> +	    -e "s!::localstatedir::!$(localstatedir)!g"	\
> +	    -e "s!::sbindir::!$(sbindir)!g"		\
> +	    -e "s!::sysconfdir::!$(sysconfdir)!g"	\
> +	    < $< > $@-t &&				\
> +	    chmod a+x $@-t &&				\
> +	    mv $@-t $@
> +

Problem.  Here, you look for '::sbindir::'...

> +++ b/src/locking/lock_daemon.c
> @@ -454,8 +454,69 @@ virLockDaemonSetupSignals(virNetServerPtr srv)
>      return 0;
>  }
>  
> +
>  static int
> -virLockDaemonSetupNetworking(virNetServerPtr srv, const char *sock_path)
> +virLockDaemonSetupNetworkingSystemD(virNetServerPtr srv)
> +{

> +    unsetenv("LISTEN_PID");
> +    unsetenv("LISTEN_FDS");

I was scratching my head on this one, until I realized you want to
re-exec, and the re-exec uses our mechanisms rather than systemd
mechanisms to reuse the fd.

> +++ b/src/locking/virtlockd.service.in
> @@ -0,0 +1,13 @@
> +[Unit]
> +Description=Virtual machine lock manager
> +Requires=virtlockd.socket
> +After=syslog.target
> +
> +[Service]
> +EnvironmentFile=-/etc/sysconfig/virtlockd
> +ExecStart=@sbindir@/virtlockd

...but here, you used @sbindir at .

> +ExecReload=/bin/kill -HUP $MAINPID
> +# Loosing the locks is a really bad thing that will

s/Loosing/Losing/

> +# cause the machine to be fenced (rebooted), so make
> +# sure we discourage OOM killer
> +OOMScoreAdjust=-900

Losing locks is bad, but does virtlockd really cause fencing on failure,
or are you over-exaggerating the effects due to copying from something
stricter?

-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120817/46b2548d/attachment-0001.sig>


More information about the libvir-list mailing list