diff options
| author | Jenkins <jenkins@review.openstack.org> | 2011-11-10 04:11:12 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2011-11-10 04:11:12 +0000 |
| commit | 260568339c3666fc37abbe63aaaa76abc3d900b3 (patch) | |
| tree | a786c592a221d8318f1f8feceaf658d6c543331c | |
| parent | 6fa35344f98aff915051242b9daff7ad38e47756 (diff) | |
| parent | ad7fcf225e126d2a719c04019c4daa1616d2159e (diff) | |
Merge "Undefine libvirt saved instances"
| -rw-r--r-- | Authors | 1 | ||||
| -rw-r--r-- | nova/tests/test_libvirt.py | 19 | ||||
| -rw-r--r-- | nova/virt/libvirt/connection.py | 11 |
3 files changed, 31 insertions, 0 deletions
@@ -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) |
