[libvirt] [PATCH 0/3] Misc LXC errore reporting improvements

From: "Daniel P. Berrange" <berrange@redhat.com> A few more LXC fixes to improve error reporting Instead of # virsh -c lxc:/// start shell error: Failed to start domain shell error: internal error: guest failed to start: PATH=/bin:/sbin TERM=linux container=lxc-libvirt container_uuid=95449419-f969-d649-d996-2566ec42af7d LIBVIRT_LXC_UUID=95449419-f969-d649-d996-2566ec42af7d LIBVIRT_LXC_NAME=shell /bin/sh error receiving signal from container: Input/output error we now get # virsh -c lxc:/// start shell error: Failed to start domain shell error: internal error: guest failed to start: Failed to access '/mnt/btr/does/not/exist': No such file or directory Daniel P. Berrange (3): Ensure lxcContainerMain reports errors on stderr Ensure lxcContainerResolveSymlinks reports errors Improve log filtering in virLXCProcessReadLogOutputData src/lxc/lxc_container.c | 18 ++++++++++++++---- src/lxc/lxc_process.c | 16 +++++++++++++++- 2 files changed, 29 insertions(+), 5 deletions(-) -- 1.8.3.1

From: "Daniel P. Berrange" <berrange@redhat.com> Ensure the lxcContainerMain method reports any errors that occur during setup to stderr, where libvirtd will pick them up. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/lxc/lxc_container.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c index 7c722cc..9e87175 100644 --- a/src/lxc/lxc_container.c +++ b/src/lxc/lxc_container.c @@ -1905,6 +1905,15 @@ cleanup: ret = virCommandExec(cmd); } + if (ret != 0) { + virErrorPtr err = virGetLastError(); + if (err && err->message) + fprintf(stderr, "%s\n", err->message); + else + fprintf(stderr, "%s\n", + _("Unknown failure in libvirt_lxc startup")); + } + virCommandFree(cmd); return ret; } -- 1.8.3.1

On 10/14/13 14:09, Daniel P. Berrange wrote:
From: "Daniel P. Berrange" <berrange@redhat.com>
Ensure the lxcContainerMain method reports any errors that occur during setup to stderr, where libvirtd will pick them up.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/lxc/lxc_container.c | 9 +++++++++ 1 file changed, 9 insertions(+)
ACK. Peter

From: "Daniel P. Berrange" <berrange@redhat.com> The lxcContainerResolveSymlinks method merely logged some errors as debug messages, rather than reporting them as proper errors. This meant startup failures were not diagnosed at all. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/lxc/lxc_container.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c index 9e87175..56df69e 100644 --- a/src/lxc/lxc_container.c +++ b/src/lxc/lxc_container.c @@ -1697,7 +1697,6 @@ static int lxcContainerResolveSymlinks(virDomainDefPtr vmDef) { char *newroot; size_t i; - char ebuf[1024]; VIR_DEBUG("Resolving symlinks"); @@ -1707,14 +1706,16 @@ static int lxcContainerResolveSymlinks(virDomainDefPtr vmDef) continue; if (access(fs->src, F_OK)) { - VIR_DEBUG("Failed to access '%s': %s", fs->src, - virStrerror(errno, ebuf, sizeof(ebuf))); + virReportSystemError(errno, + _("Failed to access '%s'"), fs->src); return -1; } VIR_DEBUG("Resolving '%s'", fs->src); if (virFileResolveAllLinks(fs->src, &newroot) < 0) { - VIR_DEBUG("Failed to resolve symlink at %s", fs->src); + virReportSystemError(errno, + _("Failed to resolve symlink at %s"), + fs->src); return -1; } -- 1.8.3.1

On 10/14/13 14:09, Daniel P. Berrange wrote:
From: "Daniel P. Berrange" <berrange@redhat.com>
The lxcContainerResolveSymlinks method merely logged some errors as debug messages, rather than reporting them as proper errors. This meant startup failures were not diagnosed at all.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/lxc/lxc_container.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
ACK. Peter

From: "Daniel P. Berrange" <berrange@redhat.com> Make the virLXCProcessReadLogOutputData method ignore the log lines about the container startup argv, ignore the generic error message from libvirt_lxc when lxcContainerMain fails and skip over blank lines. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/lxc/lxc_process.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index 5a091e6..8ede404 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -807,6 +807,20 @@ cleanup: } +static bool +virLXCProcessIgnorableLogLine(const char *str) +{ + if (virLogProbablyLogMessage(str)) + return true; + if (strstr(str, "PATH=")) + return true; + if (strstr(str, "error receiving signal from container")) + return true; + if (STREQ(str, "")) + return true; + return false; +} + static int virLXCProcessReadLogOutputData(virDomainObjPtr vm, int fd, @@ -844,7 +858,7 @@ virLXCProcessReadLogOutputData(virDomainObjPtr vm, /* Filter out debug messages from intermediate libvirt process */ while ((eol = strchr(filter_next, '\n'))) { *eol = '\0'; - if (virLogProbablyLogMessage(filter_next)) { + if (virLXCProcessIgnorableLogLine(filter_next)) { memmove(filter_next, eol + 1, got - (eol - buf)); got -= eol + 1 - filter_next; } else { -- 1.8.3.1

On 10/14/13 14:09, Daniel P. Berrange wrote:
From: "Daniel P. Berrange" <berrange@redhat.com>
Make the virLXCProcessReadLogOutputData method ignore the log lines about the container startup argv, ignore the generic error message from libvirt_lxc when lxcContainerMain fails and skip over blank lines.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/lxc/lxc_process.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)
ACK Peter
participants (2)
-
Daniel P. Berrange
-
Peter Krempa