On Thu, Mar 19, 2015 at 11:14:39AM +0800, Luyao Huang wrote:
Adding a comment in the bugzilla saying you posted a patch (with a link
to libvir-list archives) can be helpful. Otherwise they might send the
exact same patch - if your was not merged yet, or it was rejected.
When start/migrate/restore a vm failed, libvirt will try to catch the
log in
Libvirt only uses the error from qemu if qemu exits during the startup.
Start/migrate/restore could fail for other reasons.
/var/log/libvirt/qemu/vm.log and output them before. However we add a
check in
qemuDomainObjExitMonitor after commit dc2fd51f, this will overwrite
the error set in priv->mon which has set by qemuMonitorIO (a qemu monitor
I/O event callback function).
qemuMonitorIO only stores the error in mon->lastError.
It's the functions like qemuMonitorSend and qemuMonitorClose that take
this error and set it via virSetError.
Add a check in qemuDomainObjExitMonitor, if there is an error have been
set by other function, we won't overwrite it.
Reworded as:
When qemu exits during startup, libvirt includes the error from
/var/log/libvirt/qemu/vm.log in the error message:
$ virsh start test3
error: Failed to start domain test3
error: internal error: early end of file from monitor: possible problem:
2015-02-27T03:03:16.985494Z qemu-kvm: -numa memdev is not supported by
machine rhel6.5.0
The check for domain liveness added to qemuDomainObjExitMonitor
in commit dc2fd51f sometimes overwrites this error:
$ virsh start test3
error: Failed to start domain test3
error: operation failed: domain is no longer running
Fix the check to only report an error if there is none set.
Signed-off-by: Luyao Huang <lhuang(a)redhat.com>
---
src/qemu/qemu_domain.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
ACK and pushed.
Jan
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 2eacef2..41d1263 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1609,8 +1609,9 @@ int qemuDomainObjExitMonitor(virQEMUDriverPtr driver,
{
qemuDomainObjExitMonitorInternal(driver, obj);
if (!virDomainObjIsActive(obj)) {
- virReportError(VIR_ERR_OPERATION_FAILED, "%s",
- _("domain is no longer running"));
+ if (!virGetLastError())
+ virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+ _("domain is no longer running"));
return -1;
}
return 0;
--
1.8.3.1
--
libvir-list mailing list
libvir-list(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list