All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joe Jin <joe.jin@oracle.com>
To: Matt Wilson <msw@amazon.com>, Keir Fraser <keir@xen.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	Ian Campbell <ian.campbell@citrix.com>,
	Roger Pau Monne <roger.pau@citrix.com>
Cc: Joe Jin <joe.jin@oracle.com>, xen-devel <xen-devel@lists.xen.org>
Subject: Re: [PATCH] xend: make xc.vcpu_getinfo() return None if guest not existed
Date: Tue, 26 Nov 2013 09:25:25 +0800	[thread overview]
Message-ID: <5293F885.4030602@oracle.com> (raw)
In-Reply-To: <528D7A24.4020009@oracle.com>

Hi Matt,

Would you please help to review and comment the fix?

Thanks,
Joe

On 11/21/13 11:12, Joe Jin wrote:
> We hit failure when when reboot some guests at the same time,
> xend.log has below:
> [2013-09-04 20:01:26 6254] ERROR (XendDomainInfo:496) VM start failed
> Traceback (most recent call last):
>   File "/usr/lib64/python2.4/site-packages/xen/xend/XendDomainInfo.py", line 482, in start
>     XendTask.log_progress(31, 60, self._initDomain)
>   File "/usr/lib64/python2.4/site-packages/xen/xend/XendTask.py", line 209, in log_progress
>     retval = func(*args, **kwds)
>   File "/usr/lib64/python2.4/site-packages/xen/xend/XendDomainInfo.py", line 2918, in _initDomain
>     node = self._setCPUAffinity()
>   File "/usr/lib64/python2.4/site-packages/xen/xend/XendDomainInfo.py", line 2835, in _setCPUAffinity
>     best_node = find_relaxed_node(candidate_node_list)[0]
>   File "/usr/lib64/python2.4/site-packages/xen/xend/XendDomainInfo.py", line 2803, in find_relaxed_node
>     cpuinfo = dom.getVCPUInfo()
>   File "/usr/lib64/python2.4/site-packages/xen/xend/XendDomainInfo.py", line 1600, in getVCPUInfo
>     raise XendError(str(exn))
> XendError: (3, 'No such process')
> 
> This caused by one or more guests be rebooted between the call of
> find_relaxed_node()->list('all') and getVCPUInfo(). This patch will let
> xc.vcpu_getinfo() return None if guest not existed to avoid the failure.
> 
> Signed-off-by: Joe Jin <joe.jin@oracle.com>
> Cc: Matt Wilson <msw@amazon.com>
> Cc: Keir Fraser <keir@xen.org>
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Ian Campbell <ian.campbell@citrix.com>
> Cc: Roger Pau Monne <roger.pau@citrix.com>
> ---
>  tools/python/xen/lowlevel/xc/xc.c       |   15 ++++++++++++---
>  tools/python/xen/xend/XendDomainInfo.py |    2 +-
>  2 files changed, 13 insertions(+), 4 deletions(-)
> 
> diff --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c
> index 2625fc4..9a7e589 100644
> --- a/tools/python/xen/lowlevel/xc/xc.c
> +++ b/tools/python/xen/lowlevel/xc/xc.c
> @@ -396,8 +396,13 @@ static PyObject *pyxc_vcpu_getinfo(XcObject *self,
>          return pyxc_error_to_exception(self->xc_handle);
>  
>      rc = xc_vcpu_getinfo(self->xc_handle, dom, vcpu, &info);
> -    if ( rc < 0 )
> -        return pyxc_error_to_exception(self->xc_handle);
> +    if ( rc < 0)
> +    {
> +        if (errno == ESRCH)
> +            return Py_BuildValue("");
> +        else
> +            return pyxc_error_to_exception(self->xc_handle);
> +    }
>  
>      cpumap = xc_cpumap_alloc(self->xc_handle);
>      if(cpumap == NULL)
> @@ -407,7 +412,11 @@ static PyObject *pyxc_vcpu_getinfo(XcObject *self,
>      if ( rc < 0 )
>      {
>          free(cpumap);
> -        return pyxc_error_to_exception(self->xc_handle);
> +
> +        if (errno == ESRCH)
> +            return Py_BuildValue("");
> +        else
> +            return pyxc_error_to_exception(self->xc_handle);
>      }
>  
>      info_dict = Py_BuildValue("{s:i,s:i,s:i,s:L,s:i}",
> diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py
> index e9d3e7e..6b5fd83 100644
> --- a/tools/python/xen/xend/XendDomainInfo.py
> +++ b/tools/python/xen/xend/XendDomainInfo.py
> @@ -1518,7 +1518,7 @@ class XendDomainInfo:
>              for i in range(0, self.info['VCPUs_max']):
>                  if self.domid is not None:
>                      info = xc.vcpu_getinfo(self.domid, i)
> -
> +                    if info == None: continue
>                      sxpr.append(['vcpu',
>                                   ['number',   i],
>                                   ['online',   info['online']],
> 


-- 
Oracle <http://www.oracle.com>
Joe Jin | Software Development Senior Manager | +8610.6106.5624
ORACLE | Linux and Virtualization
No. 24 Zhongguancun Software Park, Haidian District | 100193 Beijing 

  reply	other threads:[~2013-11-26  1:25 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-21  3:12 [PATCH] xend: make xc.vcpu_getinfo() return None if guest not existed Joe Jin
2013-11-26  1:25 ` Joe Jin [this message]
2013-12-03 10:38 ` Joe Jin
2013-12-08 23:52   ` Matt Wilson
2013-12-10  9:05     ` Joe Jin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5293F885.4030602@oracle.com \
    --to=joe.jin@oracle.com \
    --cc=ian.campbell@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=keir@xen.org \
    --cc=konrad.wilk@oracle.com \
    --cc=msw@amazon.com \
    --cc=roger.pau@citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.