From aeacea16a30f85dfb307803a4b46a602cabc8eb5 Mon Sep 17 00:00:00 2001 From: Derek Higgins Date: Tue, 4 Sep 2012 11:50:36 +0100 Subject: Fixing call to hasManagedSaveImage Fixes bug #1044090 hasManagedSaveImage is not implmented in the LXC libvirt driver, resulting in the following error when a vm is deleted "Error from libvirt during saved instance removal. Code=3 Error=this function is not supported by the connection driver: virDomainHasManagedSaveImage" This commit replaces the use of hasManagedSaveImage, managedSaveRemove and undefine with undefineFlags which does the work of all 3 calls and is implemented in versions of libvirt > 0.9.4. We also revert back to calling undefine if undefineFlags raises an error. Change-Id: Ib8d451aeff7767f835c3c1aab99ee4ab5e299852 --- nova/virt/libvirt/driver.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) (limited to 'nova/virt') diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 693590b38..d7339d4da 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -483,18 +483,13 @@ class LibvirtDriver(driver.ComputeDriver): virt_dom = None if virt_dom: try: - # NOTE(derekh): we can switch to undefineFlags and - # VIR_DOMAIN_UNDEFINE_MANAGED_SAVE once we require 0.9.4 - if virt_dom.hasManagedSaveImage(0): - virt_dom.managedSaveRemove(0) - except libvirt.libvirtError as e: - errcode = e.get_error_code() - LOG.error(_("Error from libvirt during saved instance " - "removal. Code=%(errcode)s Error=%(e)s") % - locals(), instance=instance) - try: - # NOTE(justinsb): We remove the domain definition. - virt_dom.undefine() + try: + virt_dom.undefineFlags( + libvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE) + except libvirt.libvirtError as e: + LOG.debug(_("Error from libvirt during undefineFlags." + " Retrying with undefine"), instance=instance) + virt_dom.undefine() except libvirt.libvirtError as e: errcode = e.get_error_code() LOG.error(_("Error from libvirt during undefine. " -- cgit