|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] fixes for suspend & resume
Ewan Mellor wrote: > On Wed, Nov 29, 2006 at 11:22:46AM -0500, Chris wrote: > >> Ewan Mellor wrote: >>> On Tue, Nov 21, 2006 at 04:45:13PM -0500, Chris wrote: >>> >>>> There's at least one additional problem (that this patch doesn't >>>> address) effecting domains that are started, suspended, resumed, and >>>> finally shutdown. Affected domains remain in the xend's list of running >>>> domains when instead they should revert back to a dormant state with >>>> domid of -1. A work around is to restart xend after the effected >>>> domains have been shutdown, which causes the domains to correctly appear >>>> as dormant, but clearly this restart shouldn't be necessary. >>> I believe that this is fixed (or certainly, it's better) with xen-unstable >>> changeset 12566. >>> >>> Ewan. >>> >> I think you're right; seems to be fixed from what I can tell. >> >> However, I think found another problem. :) Rebooting a managed domain >> seems to fail with an exception that the rebooted domain's name already >> exists. >> >> Clearly, the managed domain's name does and should exist to Xend because >> it's hanging out in the lifecycle area. >> >> There's a call to checkName() in XendDomainInfo's __init__() method >> that's the source of the exception, though I'm debating the merits of >> where to make changes. It might be enough to relax checkName() to allow >> creation of XendDomainInfo instances with non-unique domain names if >> they only conflict with managed domains that are not running and soon to >> be replaced. Although, it would seem more safe if an existing >> XendDomainInfo instance were re-used when a reboot occurs. >> >> Any thoughts? > > Yes, you're right. I think we're relying upon the fact that the > XendDomainInfo instances aren't necessarily unique, so I've put a fix in > comparing the UUIDs of the VMs as specified on that instance. That should do > the trick. I'll be sure test your solution when it appears in the changelog list. There may be more than one way to skin this cat; for grins here is another way to approach the name conflict issue. This patch checks to see if the domain being rebooted is managed and, if so, calls XendDomain.domain_start() instead of calling XendDomain.domain_create(). I think the main advantage is Xend doesn't tend toward creating non-unique XendDomainInfo instances. This may not mean much now, but in the future it might be a useful property, especially if the XendDomain.domain_lookup() implementation ever changes. I'll leave that for you to decide. That said, don't go replacing the patch you've written with this one because I hadn't finished working out the kinks yet. Just consider this submission food for thought. Cheers -Chris diff -r d1b0a5adaeab tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py Wed Nov 29 23:40:40 2006 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py Thu Nov 30 15:51:34 2006 -0500
@@ -981,6 +981,7 @@ class XendDomainInfo:
False if it is to be destroyed.
"""
from xen.xend import XendDomain
+ xd = XendDomain.instance()
self._configureBootloader()
config = self.sxpr()
@@ -997,6 +998,8 @@ class XendDomainInfo:
return
old_domid = self.domid
+ old_domname = self.info['name']
+ dom_is_managed = xd.is_domain_managed(self)
self._writeVm(RESTART_IN_PROGRESS, 'True')
now = time.time()
@@ -1029,14 +1032,18 @@ class XendDomainInfo:
new_dom = None
try:
- new_dom = XendDomain.instance().domain_create(config)
+ if dom_is_managed:
+ xd.domain_start(old_domname)
+ new_dom = xd.domain_lookup(old_domname)
+ else:
+ new_dom = xd.domain_create(config)
new_dom.unpause()
rst_cnt = self._readVm('xend/restart_count')
rst_cnt = int(rst_cnt) + 1
self._writeVm('xend/restart_count', str(rst_cnt))
new_dom._removeVm(RESTART_IN_PROGRESS)
except:
- if new_dom:
+ if new_dom and not dom_is_managed:
new_dom._removeVm(RESTART_IN_PROGRESS)
new_dom.destroy()
else:
_______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |