[libvirt] [PATCH] qemu: fix sometimes error overwrite when we fail to start/migrate/restore

Ján Tomko jtomko at redhat.com
Thu Mar 19 09:27:31 UTC 2015


On Thu, Mar 19, 2015 at 11:14:39AM +0800, Luyao Huang wrote:
> https://bugzilla.redhat.com/show_bug.cgi?id=1196934
> 

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 at 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 at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150319/493f3702/attachment-0001.sig>


More information about the libvir-list mailing list