[libvirt] xen-hypervisor: GetVcpus may not find a certain domain

Cole Robinson crobinso at redhat.com
Sun Apr 8 13:19:32 UTC 2012


On 04/02/2012 10:38 AM, Stefan Bader wrote:
> xen-hypervisor: GetVcpus may not find a certain domain
> 
> Observed on connections that have been running and then shut
> down. The hypervisor subdriver fills the log with internal
> errors while the xend driver actually can handle the query.
> 
> This only handles the case which I observed after shutting
> down an instance via virt-manager and leaving its console
> window open. The same reasoning would probably be true for
> other internal errors as long as they potentially get recovered
> by other sub-drivers.
> 
> BugLink: http://bugs.launchpad.net/bugs/963006
> 
> Signed-off-by: Stefan Bader <stefan.bader at canonical.com>
> 
> Index: libvirt-0.9.8/src/xen/xen_driver.c
> ===================================================================
> --- libvirt-0.9.8.orig/src/xen/xen_driver.c	2011-12-02 04:59:50.000000000 +0100
> +++ libvirt-0.9.8/src/xen/xen_driver.c	2012-03-23 11:31:53.982620050 +0100
> @@ -1190,6 +1190,8 @@
>              if (ret > 0)
>                  return ret;
>          }
> +
> +    xenUnifiedError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
>      return -1;
>  }

I don't think this piece is correct, since this will overwrite any error
raised by sub drivers. It should just be dropped.

>  
> Index: libvirt-0.9.8/src/xen/xen_hypervisor.c
> ===================================================================
> --- libvirt-0.9.8.orig/src/xen/xen_hypervisor.c	2012-03-23 10:58:29.000000000 +0100
> +++ libvirt-0.9.8/src/xen/xen_hypervisor.c	2012-03-23 11:26:50.741137585 +0100
> @@ -3612,8 +3612,11 @@
>                                 &dominfo);
>  
>      if ((ret < 0) || (XEN_GETDOMAININFO_DOMAIN(dominfo) != domain->id)) {
> -        virXenErrorFunc(VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
> -                        _("cannot get domain details"), 0);
> +        /* This can happen if an instance is just shut down. It is probably
> +         * better to leave the shouting to the unified caller.
> +         * virXenErrorFunc(VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
> +         *                 _("cannot get domain details"), 0);
> +         */
>          return (-1);
>      }

This is kind of a hack. The whole xen driver arch is pretty weird though so
error handling is just strange as it is.

But isn't this all a side effect of the bug that your previous patch fixes?
virt-manager won't call GetVCPUs on an inactive VM, it's only doing so in this
case because libvirt and xen get out of sync. So I think fixing the previous
bug should stop the error log spew.

Thanks,
Cole




More information about the libvir-list mailing list