From 7f290fcdb51eff0e70f5b2092257eb0f40f3ef5d Mon Sep 17 00:00:00 2001 From: Guangyu Suo Date: Mon, 21 Sep 2015 14:12:17 +0000 Subject: [PATCH] Fix reconnecting to libvirt The libvirt inspector may can't inspect data from libvirt on some occasions after libvirtd is restarted, though we have reconnecting logic. When this occurs, it will raise libvirt.VIR_ERR_INTERNAL_ERROR instead of libvirt.VIR_ERR_SYSTEM_ERROR in reconnecting logic. This results compute agent no longer reconnects to libvirt, and fails to inspect data any more. This patch is just updated to deal with INTERNAL_ERROR. Change-Id: Ifbd754cb050ec7e364d17fea3b32191da1e22ef5 Closes-bug: #1498013 --- ceilometer/compute/virt/libvirt/inspector.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ceilometer/compute/virt/libvirt/inspector.py b/ceilometer/compute/virt/libvirt/inspector.py index fe6a8ef8..83b52486 100644 --- a/ceilometer/compute/virt/libvirt/inspector.py +++ b/ceilometer/compute/virt/libvirt/inspector.py @@ -48,7 +48,8 @@ def retry_on_disconnect(function): try: return function(self, *args, **kwargs) except libvirt.libvirtError as e: - if (e.get_error_code() == libvirt.VIR_ERR_SYSTEM_ERROR and + if (e.get_error_code() in (libvirt.VIR_ERR_SYSTEM_ERROR, + libvirt.VIR_ERR_INTERNAL_ERROR) and e.get_error_domain() in (libvirt.VIR_FROM_REMOTE, libvirt.VIR_FROM_RPC)): LOG.debug('Connection to libvirt broken') @@ -94,7 +95,8 @@ class LibvirtInspector(virt_inspector.Inspector): if not libvirt or not isinstance(ex, libvirt.libvirtError): raise virt_inspector.InspectorException(six.text_type(ex)) error_code = ex.get_error_code() - if (error_code == libvirt.VIR_ERR_SYSTEM_ERROR and + if (error_code in (libvirt.VIR_ERR_SYSTEM_ERROR, + libvirt.VIR_ERR_INTERNAL_ERROR) and ex.get_error_domain() in (libvirt.VIR_FROM_REMOTE, libvirt.VIR_FROM_RPC)): raise