summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2011-11-10 04:11:12 +0000
committerGerrit Code Review <review@openstack.org>2011-11-10 04:11:12 +0000
commit260568339c3666fc37abbe63aaaa76abc3d900b3 (patch)
treea786c592a221d8318f1f8feceaf658d6c543331c
parent6fa35344f98aff915051242b9daff7ad38e47756 (diff)
parentad7fcf225e126d2a719c04019c4daa1616d2159e (diff)
Merge "Undefine libvirt saved instances"
-rw-r--r--Authors1
-rw-r--r--nova/tests/test_libvirt.py19
-rw-r--r--nova/virt/libvirt/connection.py11
3 files changed, 31 insertions, 0 deletions
diff --git a/Authors b/Authors
index 2f38958ad..a5b7ac22d 100644
--- a/Authors
+++ b/Authors
@@ -34,6 +34,7 @@ Dave Walker <DaveWalker@ubuntu.com>
David Pravec <David.Pravec@danix.org>
David Subiros <david.perez5@hp.com>
Dean Troyer <dtroyer@gmail.com>
+Derek Higgins <higginsd@gmail.com>
Devendra Modium <dmodium@isi.edu>
Devin Carlen <devin.carlen@gmail.com>
Donal Lafferty <donal.lafferty@citrix.com>
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
index 28af606bc..d0ca361ad 100644
--- a/nova/tests/test_libvirt.py
+++ b/nova/tests/test_libvirt.py
@@ -1063,6 +1063,25 @@ class LibvirtConnTestCase(test.TestCase):
instance = db.instance_create(self.context, self.test_instance)
conn.destroy(instance, {})
+ @test.skip_if(missing_libvirt(), "Test requires libvirt")
+ def test_destroy_saved(self):
+ """Ensure destroy calls managedSaveRemove for saved instance"""
+ mock = self.mox.CreateMock(libvirt.virDomain)
+ mock.destroy()
+ mock.hasManagedSaveImage(0).AndReturn(1)
+ mock.managedSaveRemove(0)
+ mock.undefine()
+
+ self.mox.ReplayAll()
+
+ def fake_lookup_by_name(instance_name):
+ return mock
+
+ conn = connection.LibvirtConnection(False)
+ self.stubs.Set(conn, '_lookup_by_name', fake_lookup_by_name)
+ instance = {"name": "instancename", "id": "instanceid"}
+ conn.destroy(instance, [])
+
class HostStateTestCase(test.TestCase):
diff --git a/nova/virt/libvirt/connection.py b/nova/virt/libvirt/connection.py
index c2a13f6a7..53a059052 100644
--- a/nova/virt/libvirt/connection.py
+++ b/nova/virt/libvirt/connection.py
@@ -311,6 +311,17 @@ class LibvirtConnection(driver.ComputeDriver):
raise
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.warning(_("Error from libvirt during saved instance "
+ "removal %(instance_name)s. Code=%(errcode)s"
+ " Error=%(e)s") % locals())
+
+ try:
# NOTE(justinsb): We remove the domain definition. We probably
# would do better to keep it if cleanup=False (e.g. volumes?)
# (e.g. #2 - not losing machines on failure)