[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] xend: avoid call to XendDomainInfo.recreate() while creating domain


  • To: xen-devel@xxxxxxxxxxxxxxxxxxx
  • From: Paolo Bonzini <pbonzini@xxxxxxxxxx>
  • Date: Tue, 22 Mar 2011 14:14:52 +0100
  • Delivery-date: Tue, 22 Mar 2011 06:15:33 -0700
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:from:to:subject:date:message-id:x-mailer:content-type :mime-version:content-transfer-encoding:x-mercurial-node:user-agent; b=nRInhLbheO6scPgDbHiCtMGb3ObvqdaAxK6NWZTUEzPcHxmL/zz3qYlAHEm8VrTEy5 NspVjp35j3VUGkSJMKKPLT+sB93mYcI0/7F9MTRvbuSaJAzj3aAj4qI7TZ2dfn/9KmJI RvT9vjxES9I5pWkirvSrj4ROtDMGeopNyof/U=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

# HG changeset patch
# User Paolo Bonzini <pbonzini@xxxxxxxxxx>
# Date 1300799548 -3600
# Node ID e1452f8088dc667ca57cc1c5a63983a5131d1314
# Parent  c639f0afaa74591d1053677b0a6348503a14fd78
avoid call to XendDomainInfo.recreate() while creating domain.

We observed xend failing to create a new domain on NUMA machines
in some cases.  The culprit is find_relaxed_node() which calls
XendDomain.instance().list():

                 from xen.xend import XendDomain
                 doms = XendDomain.instance().list('all')
                 for dom in filter (lambda d: d.domid != self.domid, doms):

Depending on the state of the XendDomain singleton, XendDomain._refresh
may call XendDomainInfo.recreate(); this one fails because the domain
info hasn't been initialized yet, so that self.info['memory'] is zero.
XendDomain then decides things are broken beyond repair, and destroys
the domain.

This patch skips the refresh in this case, and fixes the problem.

Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>

diff --git a/tools/python/xen/xend/XendDomain.py 
b/tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py
+++ b/tools/python/xen/xend/XendDomain.py
@@ -825,7 +825,7 @@ class XendDomain:
     # ------------------------------------------------------------
     # Xen Legacy API     
 
-    def list(self, state = DOM_STATE_RUNNING):
+    def list(self, state = DOM_STATE_RUNNING, refresh = True):
         """Get list of domain objects.
 
         @param: the state in which the VMs should be -- one of the
@@ -844,7 +844,7 @@ class XendDomain:
                 break
             count += 1
         try:
-            if resu:
+            if resu and refresh:
                 self._refresh(refresh_shutdown = False)
             
             # active domains
diff --git a/tools/python/xen/xend/XendDomainInfo.py 
b/tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py
+++ b/tools/python/xen/xend/XendDomainInfo.py
@@ -2726,7 +2726,7 @@ class XendDomainInfo:
                 nodeload = [0]
                 nodeload = nodeload * nr_nodes
                 from xen.xend import XendDomain
-                doms = XendDomain.instance().list('all')
+                doms = XendDomain.instance().list('all', False)
                 for dom in filter (lambda d: d.domid != self.domid, doms):
                     cpuinfo = dom.getVCPUInfo()
                     for vcpu in sxp.children(cpuinfo, 'vcpu'):



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.