From: Alastair Tse Date: Thu, 9 Nov 2006 13:16:55 +0000 (+0000) Subject: [XEND] Fix bug with managed domains not having their state updated. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15567^2~42 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=1d5686b8acd6e315f8ebb22d93044559e2d02f8b;p=xen.git [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 --- diff --git a/tools/python/xen/xend/XendDomain.py b/tools/python/xen/xend/XendDomain.py index 71a46e18b8..d68e726621 100644 --- a/tools/python/xen/xend/XendDomain.py +++ b/tools/python/xen/xend/XendDomain.py @@ -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_name = dom.get('name', 'Domain-%s' % 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 --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index e13d2bc42d..6776816d52 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -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):