[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Fix the handling of the transient flag.
# HG changeset patch # User Ewan Mellor <ewan@xxxxxxxxxxxxx> # Date 1174588820 0 # Node ID 1fc6efdab399f6e421c1f8980edf83c7f857b543 # Parent abd9ae4f1f17f392d350fbc3e6dd1855cd9ad9aa Fix the handling of the transient flag. Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx> --- tools/python/xen/xend/XendDomain.py | 56 ++++++++++++++++++++++++-------- tools/python/xen/xend/XendDomainInfo.py | 22 +++++------- 2 files changed, 52 insertions(+), 26 deletions(-) diff -r abd9ae4f1f17 -r 1fc6efdab399 tools/python/xen/xend/XendDomain.py --- a/tools/python/xen/xend/XendDomain.py Thu Mar 22 18:37:37 2007 +0000 +++ b/tools/python/xen/xend/XendDomain.py Thu Mar 22 18:40:20 2007 +0000 @@ -34,7 +34,7 @@ import xen.lowlevel.xc from xen.xend import XendOptions, XendCheckpoint, XendDomainInfo from xen.xend.PrettyPrint import prettyprint -from xen.xend.XendConfig import XendConfig +from xen.xend import XendConfig from xen.xend.XendError import XendError, XendInvalidDomain, VmError from xen.xend.XendError import VMBadState from xen.xend.XendLogging import log @@ -191,6 +191,10 @@ class XendDomain: self._managed_domain_register(new_dom) else: self._managed_domain_register(running_dom) + for key in XendConfig.XENAPI_CFG_TYPES.keys(): + if key not in XendConfig.LEGACY_XENSTORE_VM_PARAMS and \ + key in dom: + running_dom.info[key] = dom[key] except Exception: log.exception("Failed to create reference to managed " "domain: %s" % dom_name) @@ -316,7 +320,7 @@ class XendDomain: for dom_uuid in dom_uuids: try: cfg_file = self._managed_config_path(dom_uuid) - cfg = XendConfig(filename = cfg_file) + cfg = XendConfig.XendConfig(filename = cfg_file) if cfg.get('uuid') != dom_uuid: # something is wrong with the SXP log.error("UUID mismatch in stored configuration: %s" % @@ -414,7 +418,7 @@ class XendDomain: running_domids = [d['domid'] for d in running if d['dying'] != 1] for domid, dom in self.domains.items(): if domid not in running_domids and domid != DOM0_ID: - self.remove_domain(dom, domid) + self._remove_domain(dom, domid) def add_domain(self, info): @@ -433,6 +437,16 @@ class XendDomain: self._managed_domain_register(info) def remove_domain(self, info, domid = None): + """Remove the domain from the list of running domains, taking the + domains_lock first. + """ + self.domains_lock.acquire() + try: + self._remove_domain(info, domid) + finally: + self.domains_lock.release() + + def _remove_domain(self, info, domid = None): """Remove the domain from the list of running domains @requires: Expects to be protected by the domains_lock. @@ -683,7 +697,7 @@ class XendDomain: self.domains_lock.acquire() try: try: - xeninfo = XendConfig(xapi = xenapi_vm) + xeninfo = XendConfig.XendConfig(xapi = xenapi_vm) dominfo = XendDomainInfo.createDormant(xeninfo) log.debug("Creating new managed domain: %s: %s" % (dominfo.getName(), dominfo.get_uuid())) @@ -906,7 +920,7 @@ class XendDomain: self.domains_lock.acquire() try: try: - domconfig = XendConfig(sxp_obj = config) + domconfig = XendConfig.XendConfig(sxp_obj = config) dominfo = XendDomainInfo.createDormant(domconfig) log.debug("Creating new managed domain: %s" % dominfo.getName()) @@ -971,18 +985,34 @@ class XendDomain: raise VMBadState("Domain is still running", POWER_STATE_NAMES[DOM_STATE_HALTED], POWER_STATE_NAMES[dominfo.state]) - - log.info("Domain %s (%s) deleted." % - (dominfo.getName(), dominfo.info.get('uuid'))) - - self._managed_domain_unregister(dominfo) - self.remove_domain(dominfo) - XendDevices.destroy_device_state(dominfo) + + self._domain_delete_by_info(dominfo) except Exception, ex: raise XendError(str(ex)) finally: self.domains_lock.release() - + + + def domain_delete_by_dominfo(self, dominfo): + """Only for use by XendDomainInfo. + """ + self.domains_lock.acquire() + try: + self._domain_delete_by_info(dominfo) + finally: + self.domains_lock.release() + + + def _domain_delete_by_info(self, dominfo): + """Expects to be protected by domains_lock. + """ + log.info("Domain %s (%s) deleted." % + (dominfo.getName(), dominfo.info.get('uuid'))) + + self._managed_domain_unregister(dominfo) + self._remove_domain(dominfo) + XendDevices.destroy_device_state(dominfo) + def domain_configure(self, config): """Configure an existing domain. diff -r abd9ae4f1f17 -r 1fc6efdab399 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Thu Mar 22 18:37:37 2007 +0000 +++ b/tools/python/xen/xend/XendDomainInfo.py Thu Mar 22 18:40:20 2007 +0000 @@ -660,7 +660,6 @@ class XendDomainInfo: vm_config = dict(zip(augment_entries, vm_config)) for arg in augment_entries: - xapicfg = arg val = vm_config[arg] if val != None: if arg in XendConfig.LEGACY_CFG_TO_XENAPI_CFG: @@ -1651,6 +1650,12 @@ class XendDomainInfo: self._cleanup_phantom_devs(paths) + if "transient" in self.info["other_config"] \ + and bool(self.info["other_config"]["transient"]): + from xen.xend import XendDomain + XendDomain.instance().domain_delete_by_dominfo(self) + + def destroyDomain(self): log.debug("XendDomainInfo.destroyDomain(%s)", str(self.domid)) @@ -1662,25 +1667,16 @@ class XendDomainInfo: self.domid = None for state in DOM_STATES_OLD: self.info[state] = 0 + self._stateSet(DOM_STATE_HALTED) except: log.exception("XendDomainInfo.destroy: xc.domain_destroy failed.") from xen.xend import XendDomain - - if "transient" in self.info["other_config"]\ - and bool(self.info["other_config"]["transient"]): - xendDomainInstance = XendDomain.instance() - - xendDomainInstance.domains_lock.acquire() - xendDomainInstance._refresh(refresh_shutdown = False) - xendDomainInstance.domains_lock.release() - - xendDomainInstance.domain_delete(self.info["name_label"]) - else: - XendDomain.instance().remove_domain(self) + XendDomain.instance().remove_domain(self) self.cleanupDomain() self._cleanup_phantom_devs(paths) + def resumeDomain(self): log.debug("XendDomainInfo.resumeDomain(%s)", str(self.domid)) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |