]> git.ipfire.org Git - thirdparty/libvirt.git/commit
Run an RPC protocol over the LXC controller monitor
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 17 Jul 2012 14:54:08 +0000 (15:54 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 30 Jul 2012 12:07:43 +0000 (13:07 +0100)
commit9117fcb2637f1a969ceaf01ae49eba1ac508d8bc
treecf3940d6ccfbba7788fc699d1b0f8e972724f841
parentca5ab840731d7752dc243d35329a305794dc43e4
Run an RPC protocol over the LXC controller monitor

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@redhat.com>
.gitignore
src/Makefile.am
src/lxc/lxc_controller.c
src/lxc/lxc_domain.h
src/lxc/lxc_monitor.c
src/lxc/lxc_monitor.h
src/lxc/lxc_process.c
src/lxc/lxc_protocol.x [new file with mode: 0644]