84 lines
3.3 KiB
Diff
84 lines
3.3 KiB
Diff
# HG changeset patch
|
|
# User Keir Fraser <keir.fraser@citrix.com>
|
|
# Date 1201267791 0
|
|
# Node ID 7f9646fcffe8075a75ba831832773ace485a8608
|
|
# Parent dc6264577b5905a82a41d082544280867f259d81
|
|
Fix leaking of /vm/<uuid> path in xenstore on various VM lifecycle events.
|
|
|
|
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
|
|
|
|
Index: xen-3.2.1-testing/tools/python/xen/xend/XendCheckpoint.py
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/tools/python/xen/xend/XendCheckpoint.py
|
|
+++ xen-3.2.1-testing/tools/python/xen/xend/XendCheckpoint.py
|
|
@@ -128,10 +128,10 @@ def save(fd, dominfo, network, live, dst
|
|
if checkpoint:
|
|
dominfo.resumeDomain()
|
|
else:
|
|
- dominfo.destroyDomain()
|
|
+ dominfo.destroy()
|
|
dominfo.testDeviceComplete()
|
|
try:
|
|
- dominfo.setName(domain_name)
|
|
+ dominfo.setName(domain_name, False)
|
|
except VmError:
|
|
# Ignore this. The name conflict (hopefully) arises because we
|
|
# are doing localhost migration; if we are doing a suspend of a
|
|
Index: xen-3.2.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
|
+++ xen-3.2.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
|
@@ -1120,10 +1120,11 @@ class XendDomainInfo:
|
|
def getDomid(self):
|
|
return self.domid
|
|
|
|
- def setName(self, name):
|
|
+ def setName(self, name, to_store = True):
|
|
self._checkName(name)
|
|
self.info['name_label'] = name
|
|
- self.storeVm("name", name)
|
|
+ if to_store:
|
|
+ self.storeVm("name", name)
|
|
|
|
def getName(self):
|
|
return self.info['name_label']
|
|
@@ -1397,7 +1398,7 @@ class XendDomainInfo:
|
|
new_dom_info = self._preserveForRestart()
|
|
else:
|
|
self._unwatchVm()
|
|
- self.destroyDomain()
|
|
+ self.destroy()
|
|
|
|
# new_dom's VM will be the same as this domain's VM, except where
|
|
# the rename flag has instructed us to call preserveForRestart.
|
|
@@ -1411,9 +1412,6 @@ class XendDomainInfo:
|
|
new_dom_info)
|
|
new_dom.waitForDevices()
|
|
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:
|
|
@@ -1439,13 +1437,19 @@ class XendDomainInfo:
|
|
new_name, new_uuid)
|
|
self._unwatchVm()
|
|
self._releaseDevices()
|
|
+ # Remove existing vm node in xenstore
|
|
+ self._removeVm()
|
|
new_dom_info = self.info.copy()
|
|
new_dom_info['name_label'] = self.info['name_label']
|
|
new_dom_info['uuid'] = self.info['uuid']
|
|
self.info['name_label'] = new_name
|
|
self.info['uuid'] = new_uuid
|
|
self.vmpath = XS_VMROOT + new_uuid
|
|
+ # Write out new vm node to xenstore
|
|
self._storeVmDetails()
|
|
+ rst_cnt = self._readVm('xend/restart_count')
|
|
+ rst_cnt = int(rst_cnt) + 1
|
|
+ self._writeVm('xend/restart_count', str(rst_cnt))
|
|
self._preserve()
|
|
return new_dom_info
|
|
|