• D
    Run an RPC protocol over the LXC controller monitor · 9117fcb2
    Daniel P. Berrange 提交于
    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: NDaniel P. Berrange <berrange@redhat.com>
    9117fcb2
lxc_controller.c 46.3 KB