Recover from name uniqueness violation by renaming. Fixes bug #277.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
This commit is contained in:
emellor@ewan committed 2005-10-05 14:38:19 +01:00
1 parent 39f62611c4
commit 293dfc0ac2
2 files changed
+24 -6

No files matched your search

+6 -4
View File
@@ -309,10 +309,12 @@ class XendDomain:
if n == 1:
return matching[0]
elif n > 1:
raise XendError(
'Name uniqueness has been violated for name %s' % name)
else:
return None
log.error('Name uniqueness has been violated for name %s! '
'Recovering by renaming:', name)
for d in matching:
d.renameUniquely()
return None
finally:
self.domains_lock.release()
+18 -2
View File
@@ -1288,7 +1288,7 @@ class XendDomainInfo:
preserving the restart semantics (name and UUID preserved).
"""
new_name = self.generateShutdownName()
new_name = self.generateUniqueName()
new_uuid = getUuid()
log.info("Renaming dead domain %s (%d, %s) to %s (%s).",
self.info['name'], self.domid, self.uuid, new_name, new_uuid)
@@ -1307,7 +1307,23 @@ class XendDomainInfo:
self.state_set(STATE_VM_TERMINATED)
def generateShutdownName(self):
## public:
def renameUniquely(self):
"""Rename this domain so that it has a unique name. This is used by
XendDomain to recover from non-uniqueness errors; we should never have
allowed the system to reach this state in the first place."""
new_name = self.generateUniqueName()
log.error('Renaming %s (%d, %s) to %s', self.info['name'], self.domid,
self.uuid, new_name)
self.setName(new_name)
# private:
def generateUniqueName(self):
n = 1
while True:
name = "%s-%d" % (self.info['name'], n)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.