[libvirt] [PATCH 2/3] Improve LXC startup error reporting

Daniel P. Berrange berrange at redhat.com
Thu Mar 7 15:58:39 UTC 2013


On Thu, Mar 07, 2013 at 04:40:05PM +0100, Peter Krempa wrote:
> On 03/06/13 17:16, Daniel P. Berrange wrote:
> >From: "Daniel P. Berrange" <berrange at redhat.com>
> >
> >Currently we rely on a VIR_ERROR message being logged by the
> >virRaiseError function to report LXC startup errors. This gives
> >the right message, but is rather ugly and can be truncated
> >if lots of log messages are written. Change the LXC controller
> >to explicitly print any virErrorPtr message to stderr. Then
> >change the driver to skip over anything that looks like a log
> >message.
> >
> >The result is that this
> >
> >error: Failed to start domain busy
> >error: internal error guest failed to start: 2013-03-04 19:46:42.846+0000: 1734: info : libvirt version: 1.0.2
> >2013-03-04 19:46:42.846+0000: 1734: error : virFileLoopDeviceAssociate:600 : Unable to open /root/disk.raw: No such file or directory
> >
> >changes to
> >
> >error: Failed to start domain busy
> >error: internal error guest failed to start: Unable to open /root/disk.raw: No such file or directory
> >Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> >---
> >  src/lxc/lxc_controller.c |   7 ++-
> >  src/lxc/lxc_process.c    | 130 ++++++++++++++++++++++++++++++++---------------
> >  2 files changed, 94 insertions(+), 43 deletions(-)
> >
> >diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
> >index 15aa334..78e8a70 100644
> >--- a/src/lxc/lxc_controller.c
> >+++ b/src/lxc/lxc_controller.c
> >@@ -1706,7 +1706,6 @@ int main(int argc, char *argv[])
> >      rc = virLXCControllerRun(ctrl);
> >
> >  cleanup:
> >-    virPidFileDelete(LXC_STATE_DIR, name);
> 
> From the code later on, it doesn't seem you want retain the pid
> file. If you do so, errors won't be reported later on ... [1]


> >+
> >  /**
> >   * virLXCProcessStart:
> >   * @conn: pointer to connection
> >@@ -1124,9 +1164,15 @@ int virLXCProcessStart(virConnectPtr conn,
> >
> >      /* And get its pid */
> >      if ((r = virPidFileRead(driver->stateDir, vm->def->name, &vm->pid)) < 0) {
> 
> [1] ... here.

This handles the case where libvirt_lxc failed to startup at all,
so never wrote the pid file. There is aready code later in this
method which handles the case where libvirt_lxc started, but then
quit early, which still reads the log output.


> 
> >-        virReportSystemError(-r,
> >-                             _("Failed to read pid file %s/%s.pid"),
> >-                             driver->stateDir, vm->def->name);
> >+        char out[1024];
> >+
> >+        if (virLXCProcessReadLogOutput(vm, logfile, pos, out, 1024) > 0)
> >+            virReportError(VIR_ERR_INTERNAL_ERROR,
> >+                           _("guest failed to start: %s"), out);
> >+        else
> >+            virReportSystemError(-r,
> >+                                 _("Failed to read pid file %s/%s.pid"),
> >+                                 driver->stateDir, vm->def->name);
> >          goto cleanup;


REgards,
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 :|




More information about the libvir-list mailing list