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

[Xen-changelog] [xen-unstable] [XEND] Fix bug with managed domains not having their state updated.



# HG changeset patch
# User Alastair Tse <atse@xxxxxxxxxxxxx>
# Node ID a14732833603312b144062ea55aa929626190fc2
# Parent  023aa2926e7971eeb2fe208f987d2f2a20e824f0
[XEND] Fix bug with managed domains not having their state updated.

Also added some protection against corrupted sxp configuration files.

Signed-off-by: Alastair Tse <atse@xxxxxxxxxxxxx>
---
 tools/python/xen/xend/XendDomain.py     |   18 ++++++++++++------
 tools/python/xen/xend/XendDomainInfo.py |    7 ++++++-
 2 files changed, 18 insertions(+), 7 deletions(-)

diff -r 023aa2926e79 -r a14732833603 tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       Thu Nov 09 12:38:12 2006 +0000
+++ b/tools/python/xen/xend/XendDomain.py       Thu Nov 09 13:16:55 2006 +0000
@@ -167,10 +167,11 @@ class XendDomain:
 
             # add all managed domains as dormant domains.
             for dom in managed:
-                dom_uuid = dom.get('uuid', uuid.createString())
-                dom['uuid'] = dom_uuid
+                dom_uuid = dom.get('uuid')
+                if not dom_uuid:
+                    continue
+                
                 dom_name = dom.get('name', 'Domain-%s' % dom_uuid)
-                
                 try:
                     running_dom = self.domain_lookup_nr(dom_name)
                     if not running_dom:
@@ -304,6 +305,11 @@ class XendDomain:
             try:
                 cfg_file = self._managed_config_path(dom_uuid)
                 cfg = XendConfig(filename = cfg_file)
+                if cfg.get('uuid') != dom_uuid:
+                    # something is wrong with the SXP
+                    log.error("UUID mismatch in stored configuration: %s" %
+                              cfg_file)
+                    continue
                 doms.append(cfg)
             except Exception:
                 log.exception('Unable to open or parse config.sxp: %s' % \
@@ -387,7 +393,7 @@ class XendDomain:
 
 
     def _add_domain(self, info):
-        """Add the given domain entry to this instance's internal cache.
+        """Add a domain to the list of running domains
         
         @requires: Expects to be protected by the domains_lock.
         @param info: XendDomainInfo of a domain to be added.
@@ -397,7 +403,7 @@ class XendDomain:
         self.domains[info.getDomid()] = info
 
     def _remove_domain(self, info, domid = None):
-        """Remove the given domain from this instance's internal cache.
+        """Remove the domain from the list of running domains
         
         @requires: Expects to be protected by the domains_lock.
         @param info: XendDomainInfo of a domain to be removed.
@@ -849,7 +855,7 @@ class XendDomain:
                 raise XendError("Domain is already running")
             
             dominfo.start(is_managed = True)
-
+            self._add_domain(dominfo)
         finally:
             self.domains_lock.release()
         
diff -r 023aa2926e79 -r a14732833603 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Thu Nov 09 12:38:12 2006 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py   Thu Nov 09 13:16:55 2006 +0000
@@ -1667,7 +1667,12 @@ class XendDomainInfo:
     # ----------------------------------------------------------------
 
     def get_uuid(self):
-        return self.info['uuid']
+        dom_uuid = self.info.get('uuid')
+        if not dom_uuid: # if it doesn't exist, make one up
+            dom_uuid = uuid.createString()
+            self.info['uuid'] = dom_uuid
+        return dom_uuid
+    
     def get_memory_static_max(self):
         return self.info['maxmem']
     def get_memory_static_min(self):

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


 


Rackspace

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