summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlvaro Lopez Garcia <aloga@ifca.unican.es>2011-11-30 12:25:00 +0100
committerAlvaro Lopez Garcia <aloga@ifca.unican.es>2011-11-30 12:32:04 +0100
commit7c11490677bc49086271ee377e6a8076eebe15f6 (patch)
tree7c31a1a238574bd94f686e4e602f3b696a1058c5
parenta83e83ac187141e106206232dc1f0f6fcb88947e (diff)
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. Change-Id: Ib3d4ff23aadf5a0c93dde0c37c5686bf404ce9de
-rw-r--r--nova/tests/test_libvirt.py25
-rw-r--r--nova/virt/libvirt/connection.py3
2 files changed, 27 insertions, 1 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
index 6de5f322c..c6fb5c348 100644
--- a/nova/tests/test_libvirt.py
+++ b/nova/tests/test_libvirt.py
@@ -1024,6 +1024,31 @@ class LibvirtConnTestCase(test.TestCase):
ip = conn.get_host_ip_addr()
self.assertEquals(ip, FLAGS.my_ip)
+ @test.skip_if(missing_libvirt(), "Test requires libvirt")
+ def test_broken_connection(self):
+ 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 5e9be4ef9..437203e46 100644
--- a/nova/virt/libvirt/connection.py
+++ b/nova/virt/libvirt/connection.py
@@ -235,7 +235,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