|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] xend: Unlink VDI instances and VBD instan
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1253871973 -3600
# Node ID dc72e4fbab2783566a0757d1269205c9b663f520
# Parent c7ee30ba186d170ef09620b86731f8387544445f
xend: Unlink VDI instances and VBD instances
VBD information in xend does not have a VDI value if XenAPI mode
is invalid. A new patch confirms the VDI value is valid. So, the new
patch cuts off VDI->VBD links if the VDI value is valid.
Signed-off-by: Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx>
---
tools/python/xen/xend/XendDomain.py | 2 ++
tools/python/xen/xend/XendDomainInfo.py | 14 ++++++++++++++
2 files changed, 16 insertions(+)
diff -r c7ee30ba186d -r dc72e4fbab27 tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py Fri Sep 25 10:45:02 2009 +0100
+++ b/tools/python/xen/xend/XendDomain.py Fri Sep 25 10:46:13 2009 +0100
@@ -347,6 +347,7 @@ class XendDomain:
if self.is_domain_managed(dom):
self._managed_config_remove(dom.get_uuid())
del self.managed_domains[dom.get_uuid()]
+ dom.unlink_xapi_instances()
dom.destroy_xapi_instances()
except ValueError:
log.warn("Domain is not registered: %s" % dom.get_uuid())
@@ -485,6 +486,7 @@ class XendDomain:
if domid in self.domains:
del self.domains[domid]
+ info.unlink_xapi_instances()
info.destroy_xapi_instances()
else:
log.warning("Attempted to remove non-existent domain.")
diff -r c7ee30ba186d -r dc72e4fbab27 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py Fri Sep 25 10:45:02 2009 +0100
+++ b/tools/python/xen/xend/XendDomainInfo.py Fri Sep 25 10:46:13 2009 +0100
@@ -4043,6 +4043,20 @@ class XendDomainInfo:
except Exception, exn:
raise XendError('Failed to destroy device')
+ def unlink_xapi_instances(self):
+ from xen.xend import XendDomain
+ if XendDomain.instance().is_valid_vm(self.info.get('uuid')):
+ # domain still exists.
+ return
+
+ for vbd_ref in self.info.get('vbd_refs'):
+ dev_info = self.info['devices'].get(vbd_ref)[1]
+ vdi_uuid = dev_info.get('VDI', None)
+ if vdi_uuid and XendNode.instance().is_valid_vdi(vdi_uuid):
+ vdi = XendNode.instance().get_vdi_by_uuid(vdi_uuid)
+ if vdi.getVBDs().count(vbd_ref):
+ vdi.removeVBD(vbd_ref)
+
def destroy_xapi_instances(self):
"""Destroy Xen-API instances stored in XendAPIStore.
"""
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
|
|
|
|