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.
__________________________________________________________________
pgp6czwZO8tyE.pgp
Description: PGP signature
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|