summaryrefslogtreecommitdiffstats
path: root/nova/virt
diff options
context:
space:
mode:
Diffstat (limited to 'nova/virt')
-rw-r--r--nova/virt/libvirt/connection.py12
-rw-r--r--nova/virt/libvirt/firewall.py7
2 files changed, 16 insertions, 3 deletions
diff --git a/nova/virt/libvirt/connection.py b/nova/virt/libvirt/connection.py
index 2f35c664c..79cfd1652 100644
--- a/nova/virt/libvirt/connection.py
+++ b/nova/virt/libvirt/connection.py
@@ -406,8 +406,16 @@ class LibvirtConnection(driver.ComputeDriver):
timer = utils.LoopingCall(_wait_for_destroy)
timer.start(interval=0.5, now=True)
- self.firewall_driver.unfilter_instance(instance,
- network_info=network_info)
+ try:
+ self.firewall_driver.unfilter_instance(instance,
+ network_info=network_info)
+ except libvirt.libvirtError as e:
+ errcode = e.get_error_code()
+ LOG.warning(_("Error from libvirt during unfilter. "
+ "Code=%(errcode)s Error=%(e)s") %
+ locals(), instance=instance)
+ reason = "Error unfiltering instance."
+ raise exception.InstanceTerminationFailure(reason=reason)
# NOTE(vish): we disconnect from volumes regardless
block_device_mapping = driver.block_device_info_get_mapping(
diff --git a/nova/virt/libvirt/firewall.py b/nova/virt/libvirt/firewall.py
index 04b3cf42a..93f03d6df 100644
--- a/nova/virt/libvirt/firewall.py
+++ b/nova/virt/libvirt/firewall.py
@@ -156,7 +156,12 @@ class NWFilterFirewall(base_firewall.FirewallDriver):
try:
_nw = self._conn.nwfilterLookupByName(instance_filter_name)
_nw.undefine()
- except libvirt.libvirtError:
+ except libvirt.libvirtError as e:
+ errcode = e.get_error_code()
+ if errcode == libvirt.VIR_ERR_OPERATION_INVALID:
+ # This happens when the instance filter is still in
+ # use (ie. when the instance has not terminated properly)
+ raise
LOG.debug(_('The nwfilter(%(instance_filter_name)s) '
'is not found.') % locals(),
instance=instance)