On Fri, Jul 27, 2012 at 09:41:29AM +0200, Jiri Denemark wrote:
On Tue, Jul 24, 2012 at 14:22:51 +0100, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange(a)redhat.com>
>
> This defines a new RPC protocol to be used between the LXC
> controller and the libvirtd LXC driver. There is only a
> single RPC message defined thus far, an asynchronous "EXIT"
> event that is emitted just before the LXC controller process
> exits. This provides the LXC driver with details about how
> the container shutdown - normally, or abnormally (crashed),
> thus allowing the driver to emit better libvirt events.
>
> Emitting the event in the LXC controller requires a few
> little tricks with the RPC service. Simply calling the
> virNetServiceClientSendMessage does not work, since this
> merely queues the message for asynchronous processing.
> In addition the main event loop is no longer running at
> the point the event is emitted, so no I/O is processed.
>
> Thus after invoking virNetServiceClientSendMessage it is
> necessary to mark the client as being in "delayed close"
> mode. Then the event loop is run again, until the client
> completes its close - this happens only after the queued
> message has been fully transmitted. The final complexity
> is that it is not safe to run virNetServerQuit() from the
> client close callback, since that is invoked from a
> context where the server is locked. Thus a zero-second
> timer is used to trigger shutdown of the event loop,
> causing the controller to finally exit.
>
> * src/Makefile.am: Add rules for generating RPC protocol
> files and dispatch methods
> * src/lxc/lxc_controller.c: Emit an RPC event immediately
> before exiting
> * src/lxc/lxc_domain.h: Record the shutdown reason
> given by the controller
> * src/lxc/lxc_monitor.c, src/lxc/lxc_monitor.h: Register
> RPC program and event handler. Add callback to let
> driver receive EXIT event.
> * src/lxc/lxc_process.c: Use monitor exit event to decide
> what kind of domain event to emit
> * src/lxc/lxc_protocol.x: Define wire protocol for LXC
> controller monitor.
>
> Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
> ---
> .gitignore | 4 ++
> src/Makefile.am | 50 +++++++++++++++++++
> src/lxc/lxc_controller.c | 125 +++++++++++++++++++++++++++++++++++++++++++++-
> src/lxc/lxc_domain.h | 1 +
> src/lxc/lxc_monitor.c | 41 +++++++++++++++
> src/lxc/lxc_monitor.h | 6 +++
> src/lxc/lxc_process.c | 27 ++++++++++
> src/lxc/lxc_protocol.x | 21 ++++++++
> 8 files changed, 274 insertions(+), 1 deletion(-)
> create mode 100644 src/lxc/lxc_protocol.x
>
> diff --git a/.gitignore b/.gitignore
> index b4cbb5f..e4b3932 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -105,6 +105,10 @@
> /src/locking/qemu-sanlock.conf
> /src/locking/test_libvirt_sanlock.aug
> /src/lxc/test_libvirtd_lxc.aug
> +/src/lxc/lxc_controller_dispatch.h
> +/src/lxc/lxc_monitor_dispatch.h
> +/src/lxc/lxc_protocol.c
> +/src/lxc/lxc_protocol.h
> /src/qemu/test_libvirtd_qemu.aug
> /src/remote/*_client_bodies.h
> /src/remote/*_protocol.[ch]
> diff --git a/src/Makefile.am b/src/Makefile.am
> index 492ce73..44da1fa 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -347,7 +347,55 @@ if WITH_XEN_INOTIFY
> XEN_DRIVER_SOURCES += xen/xen_inotify.c xen/xen_inotify.h
> endif
>
> +EXTRA_DIST += \
> + dtrace2systemtap.pl \
> + rpc/gendispatch.pl \
> + rpc/genprotocol.pl \
> + rpc/gensystemtap.pl \
> + rpc/virnetprotocol.x \
> + rpc/virkeepaliveprotocol.x
Did you want to move this EXTRA_DIST part and copied it instead? I don't see
the corresponding - lines.
Hmm, not sure what went wrong here.
> +
> +LXC_PROTOCOL_GENERATED = \
> + $(srcdir)/lxc/lxc_protocol.h \
> + $(srcdir)/lxc/lxc_protocol.c \
> + $(NULL)
Did you add $(NULL) because you want to be able to add new entries here
without the need append '\' to the last line or is there another reason for
it?
Yes, it means when you add new entries you only get a 1-line
diff, instead of a 2-line diff from adding '\'. We should in
fact make this change across all our makefiles some time.
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|