[Kimchi-devel] [PATCH V2] Avoid useless libvirt error log produced by featuretests

apporc appleorchard2000 at gmail.com
Thu Jan 23 10:16:43 UTC 2014


When running feature tests, we get bunch of error messages as below:

*** Running feature tests ***
libvirt: Domain Config error : internal error unknown protocol type 'http'
libvirt: Domain Config error : internal error unknown protocol type 'https'
libvirt: Domain Config error : internal error unknown protocol type 'ftp'
libvirt: Domain Config error : internal error unknown protocol type 'ftps'
libvirt: Domain Config error : internal error unknown protocol type 'tftp'
*** Feature tests completed ***

By replacing default error handler of libvirt, this patch succeeded to
avoid the error. After Featuretest, the default error handler will be restored.
The default error handler(in libvirtmod.so) just do one thing, it prints the error message to
stderr before we catch the exception in python.

Signed-off-by: apporc <appleorchard2000 at gmail.com>
---
 src/kimchi/featuretests.py |   14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/kimchi/featuretests.py b/src/kimchi/featuretests.py
index a5755a2..d68fcb8 100644
--- a/src/kimchi/featuretests.py
+++ b/src/kimchi/featuretests.py
@@ -57,16 +57,26 @@ class FeatureTests(object):
 
     @staticmethod
     def libvirt_supports_iso_stream(protocol):
+        def libvirt_errorhandler(userdata, error):
+            # A libvirt error handler to ignore annoying messages in stderr
+            pass
+
         xml = ISO_STREAM_XML % {'protocol': protocol}
         conn = None
         try:
+            # Register the error handler to hide libvirt error in stderr
+            libvirt.registerErrorHandler(f=libvirt_errorhandler, ctx=None)
             conn = libvirt.open('qemu:///system')
             dom = conn.defineXML(xml)
             dom.undefine()
             return True
-        except libvirt.libvirtError:
-            return False
+        except libvirt.libvirtError, e:
+            if e.message == "internal error unknown protocol type '%s'" % protocol:
+                return False
+            else:
+                raise e
         finally:
+            libvirt.registerErrorHandler(f=None, ctx=None)
             conn is None or conn.close()
 
     @staticmethod
-- 
1.7.9.5




More information about the Kimchi-devel mailing list