[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: Rename all dying domains to be prefixed with Zombie. This allows a new domain
So what happens if: * Dom1 is told to die * It doesn't because it can't free a physical resource (i.e. disk) * It gets renamed to Zombie-Dom1 * User tries to recreate Dom1 * New Dom1 grabs physical resource that was keeping Dom1 from dying Doesn't that provide for the possibility of 2 writers to a device that only can support 1, and all heck breaking loose? (Note, I hope I'm wrong here) It seems that this just moves the race to somewhere more dangerous. -Sean On Thu, Oct 06, 2005 at 10:16:12AM +0000, Xen patchbot -unstable wrote: > Diffstat output: > > XendDomainInfo.py | 33 ++++++++++++++++++++++----------- > 1 files changed, 22 insertions(+), 11 deletions(-) > > # HG changeset patch > # User emellor@ewan > # Node ID 0bc466c255605d0efeb4803626b72415839b9e6c > # Parent 1cfe0875658d5f83d38a5d96abe7a66e0d5db508 > Rename all dying domains to be prefixed with Zombie. This allows a new domain > to be created with the same name, fixing the race condition inside XendDomain > that caused bug #278. > > Move the state_set(TERMINATED) call onto the end of cleanupDomain rather than > destroyDomain, so that this flag is set when XendDomain cleans up a domain > that was killed without going through Xend. > > Remove is_terminated, as this check is no longer necessary, since we are using > Zombie prefixes instead. > > Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx> > > diff -r 1cfe0875658d -r 0bc466c25560 tools/python/xen/xend/XendDomainInfo.py > --- a/tools/python/xen/xend/XendDomainInfo.py Thu Oct 6 10:04:49 2005 > +++ b/tools/python/xen/xend/XendDomainInfo.py Thu Oct 6 10:09:14 2005 > @@ -97,6 +97,7 @@ > DOMROOT = '/local/domain/' > VMROOT = '/vm/' > > +ZOMBIE_PREFIX = 'Zombie-' > > xc = xen.lowlevel.xc.new() > xroot = XendRoot.instance() > @@ -997,8 +998,6 @@ > dominfo = domain_by_name(name) > if not dominfo: > return > - if dominfo.is_terminated(): > - return > if self.domid is None: > raise VmError("VM name '%s' already in use by domain %d" % > (name, dominfo.domid)) > @@ -1100,6 +1099,14 @@ > except: > log.exception("Removing domain path failed.") > > + try: > + if not self.info['name'].startswith(ZOMBIE_PREFIX): > + self.info['name'] = self.generateZombieName() > + except: > + log.exception("Renaming Zombie failed.") > + > + self.state_set(STATE_VM_TERMINATED) > + > > def cleanupVm(self): > """Cleanup VM resources. Idempotent. Nothrow guarantee.""" > @@ -1123,23 +1130,15 @@ > log.debug("XendDomainInfo.destroyDomain(%s)", str(self.domid)) > > self.cleanupDomain() > - > + > try: > if self.domid is not None: > xc.domain_destroy(dom=self.domid) > except: > log.exception("XendDomainInfo.destroy: xc.domain_destroy > failed.") > > - self.state_set(STATE_VM_TERMINATED) > - > > ## private: > - > - def is_terminated(self): > - """Check if a domain has been terminated. > - """ > - return self.state == STATE_VM_TERMINATED > - > > def release_devices(self): > """Release all domain's devices. Nothrow guarantee.""" > @@ -1353,6 +1352,18 @@ > n += 1 > > > + def generateZombieName(self): > + n = 0 > + name = ZOMBIE_PREFIX + self.info['name'] > + while True: > + try: > + self.check_name(name) > + return name > + except VmError: > + n += 1 > + name = "%s%d-%s" % (ZOMBIE_PREFIX, n, self.info['name']) > + > + > def configure_bootloader(self): > if not self.info['bootloader']: > return > > _______________________________________________ > Xen-changelog mailing list > Xen-changelog@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-changelog > -- __________________________________________________________________ Sean Dague Mid-Hudson Valley sean at dague dot net Linux Users Group http://dague.net http://mhvlug.org There is no silver bullet. Plus, werewolves make better neighbors than zombies, and they tend to keep the vampire population down. __________________________________________________________________ Attachment:
pgpjUQc0LTDYd.pgp _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |