diff options
author | Alvaro Lopez Garcia <aloga@ifca.unican.es> | 2011-11-30 12:25:00 +0100 |
---|---|---|
committer | Mark McLoughlin <markmc@redhat.com> | 2011-12-21 17:35:15 +0000 |
commit | add84707ec40bc4de1de5616da41b2ac5f4a9537 (patch) | |
tree | 0c3e0b60f67e29bc73ba2544c0973ef1a35eadb8 | |
parent | 1e3b88ba20b9f9ab925ecd1238845adbc0157cb1 (diff) | |
download | nova-add84707ec40bc4de1de5616da41b2ac5f4a9537.tar.gz |
Fixes bug 767947
If libvirt was restarted, a libvirt.libvirtError was raised with error
domain libvirt.VIR_FROM_RPC when trying to use the existing connection.
(cherry picked from commit 7c11490677bc49086271ee377e6a8076eebe15f6)
Change-Id: Ib3d4ff23aadf5a0c93dde0c37c5686bf404ce9de
-rw-r--r-- | Authors | 1 | ||||
-rw-r--r-- | nova/tests/test_libvirt.py | 28 | ||||
-rw-r--r-- | nova/virt/libvirt/connection.py | 3 |
3 files changed, 31 insertions, 1 deletions
@@ -4,6 +4,7 @@ Adam Johnson <adjohn@gmail.com> Ahmad Hassan <ahmad.hassan@hp.com> Alex Meade <alex.meade@rackspace.com> Alexander Sakhnov <asakhnov@mirantis.com> +Alvaro Lopez Garcia <aloga@ifca.unican.es> Andrey Brindeyev <abrindeyev@griddynamics.com> Andy Smith <code@term.ie> Andy Southgate <andy.southgate@citrix.com> diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index f59b2f7259..e3e6b7572e 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -951,6 +951,34 @@ class LibvirtConnTestCase(test.TestCase): ip = conn.get_host_ip_addr() self.assertEquals(ip, FLAGS.my_ip) + def test_broken_connection(self): + # Skip if non-libvirt environment + if not self.lazy_load_library_exists(): + return + + for (error, domain) in ( + (libvirt.VIR_ERR_SYSTEM_ERROR, libvirt.VIR_FROM_REMOTE), + (libvirt.VIR_ERR_SYSTEM_ERROR, libvirt.VIR_FROM_RPC)): + + conn = connection.LibvirtConnection(False) + + self.mox.StubOutWithMock(conn, "_wrapped_conn") + self.mox.StubOutWithMock(conn._wrapped_conn, "getCapabilities") + self.mox.StubOutWithMock(libvirt.libvirtError, "get_error_code") + self.mox.StubOutWithMock(libvirt.libvirtError, "get_error_domain") + + conn._wrapped_conn.getCapabilities().AndRaise( + libvirt.libvirtError("fake failure")) + + libvirt.libvirtError.get_error_code().AndReturn(error) + libvirt.libvirtError.get_error_domain().AndReturn(domain) + + self.mox.ReplayAll() + + self.assertFalse(conn._test_connection()) + + self.mox.UnsetStubs() + def test_volume_in_mapping(self): conn = connection.LibvirtConnection(False) swap = {'device_name': '/dev/sdb', diff --git a/nova/virt/libvirt/connection.py b/nova/virt/libvirt/connection.py index ba1dc86d67..5237285e68 100644 --- a/nova/virt/libvirt/connection.py +++ b/nova/virt/libvirt/connection.py @@ -203,7 +203,8 @@ class LibvirtConnection(driver.ComputeDriver): return True except libvirt.libvirtError as e: if e.get_error_code() == libvirt.VIR_ERR_SYSTEM_ERROR and \ - e.get_error_domain() == libvirt.VIR_FROM_REMOTE: + e.get_error_domain() in (libvirt.VIR_FROM_REMOTE, + libvirt.VIR_FROM_RPC): LOG.debug(_('Connection to libvirt broke')) return False raise |