On Thu, Mar 07, 2013 at 05:03:18PM +0100, Peter Krempa wrote:
On 03/07/13 16:58, Daniel P. Berrange wrote:
>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(a)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(a)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.
>
Ah, okay then. So ACK to the patch if you move the output of the
error message in lxc_controller.c right after the cleanup label.
In fact double checking things, removing that virPidFileDelete
line is not required at all, so I've dropped it.
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 :|