[patch 02/12] Add virNetwork to virError (note: ABI issue)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Add virNetwork support to virError in order that the network
on which the error occurred can be reported.

Note, the issue here is that virError is a public structure
and we're arguably breaking ABI if we enlarge it. However,
it's unlikely anyone would define a virError structure
themself.

Signed-off-by: Mark McLoughlin <markmc@xxxxxxxxxx>

Index: libvirt/include/libvirt/virterror.h
===================================================================
--- libvirt.orig/include/libvirt/virterror.h
+++ libvirt/include/libvirt/virterror.h
@@ -72,6 +72,7 @@ struct _virError {
     char       *str3;	/* extra string information */
     int		int1;	/* extra number information */
     int		int2;	/* extra number information */
+    virNetworkPtr net;	/* the network if available */
 };
 
 /**
Index: libvirt/src/conf.c
===================================================================
--- libvirt.orig/src/conf.c
+++ libvirt/src/conf.c
@@ -95,7 +95,7 @@ virConfError(virConfPtr conf ATTRIBUTE_U
         return;
 
     errmsg = __virErrorMsg(error, info);
-    __virRaiseError(NULL, NULL, VIR_FROM_CONF, error, VIR_ERR_ERROR,
+    __virRaiseError(NULL, NULL, NULL, VIR_FROM_CONF, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, line, 0, errmsg, info, line);
 }
 
Index: libvirt/src/hash.c
===================================================================
--- libvirt.orig/src/hash.c
+++ libvirt/src/hash.c
@@ -617,7 +617,7 @@ virHashError(virConnectPtr conn, virErro
         return;
 
     errmsg = __virErrorMsg(error, info);
-    __virRaiseError(conn, NULL, VIR_FROM_NONE, error, VIR_ERR_ERROR,
+    __virRaiseError(conn, NULL, NULL, VIR_FROM_NONE, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, 0, 0, errmsg, info);
 }
 
Index: libvirt/src/internal.h
===================================================================
--- libvirt.orig/src/internal.h
+++ libvirt/src/internal.h
@@ -200,6 +200,7 @@ char *virDomainGetVMInfo(virDomainPtr do
  ************************************************************************/
 void __virRaiseError(virConnectPtr conn,
 		     virDomainPtr dom,
+		     virNetworkPtr net,
 		     int domain,
 		     int code,
 		     virErrorLevel level,
Index: libvirt/src/libvirt.c
===================================================================
--- libvirt.orig/src/libvirt.c
+++ libvirt/src/libvirt.c
@@ -107,7 +107,7 @@ virLibConnError(virConnectPtr conn, virE
         return;
 
     errmsg = __virErrorMsg(error, info);
-    __virRaiseError(conn, NULL, VIR_FROM_NONE, error, VIR_ERR_ERROR,
+    __virRaiseError(conn, NULL, NULL, VIR_FROM_NONE, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, 0, 0, errmsg, info);
 }
 
@@ -133,7 +133,7 @@ virLibDomainError(virDomainPtr domain, v
     if (error != VIR_ERR_INVALID_DOMAIN) {
         conn = domain->conn;
     }
-    __virRaiseError(conn, domain, VIR_FROM_DOM, error, VIR_ERR_ERROR,
+    __virRaiseError(conn, domain, NULL, VIR_FROM_DOM, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, 0, 0, errmsg, info);
 }
 
@@ -159,8 +159,7 @@ virLibNetworkError(virNetworkPtr network
     if (error != VIR_ERR_INVALID_NETWORK) {
         conn = network->conn;
     }
-    /* XXX: should be able to pass network pointer here */
-    __virRaiseError(conn, NULL, VIR_FROM_NET, error, VIR_ERR_ERROR,
+    __virRaiseError(conn, NULL, network, VIR_FROM_NET, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, 0, 0, errmsg, info);
 }
 
Index: libvirt/src/proxy_internal.c
===================================================================
--- libvirt.orig/src/proxy_internal.c
+++ libvirt/src/proxy_internal.c
@@ -116,7 +116,7 @@ virProxyError(virConnectPtr conn, virErr
         return;
 
     errmsg = __virErrorMsg(error, info);
-    __virRaiseError(conn, NULL, VIR_FROM_PROXY, error, VIR_ERR_ERROR,
+    __virRaiseError(conn, NULL, NULL, VIR_FROM_PROXY, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, 0, 0, errmsg, info);
 }
 
Index: libvirt/src/qemu_internal.c
===================================================================
--- libvirt.orig/src/qemu_internal.c
+++ libvirt/src/qemu_internal.c
@@ -140,7 +140,7 @@ qemuError(virConnectPtr con,
         return;
 
     errmsg = __virErrorMsg(error, info);
-    __virRaiseError(con, dom, VIR_FROM_QEMU, error, VIR_ERR_ERROR,
+    __virRaiseError(con, dom, NULL, VIR_FROM_QEMU, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, 0, 0, errmsg, info, 0);
 }
 
Index: libvirt/src/sexpr.c
===================================================================
--- libvirt.orig/src/sexpr.c
+++ libvirt/src/sexpr.c
@@ -38,7 +38,7 @@ virSexprError(virErrorNumber error, cons
         return;
 
     errmsg = __virErrorMsg(error, info);
-    __virRaiseError(NULL, NULL, VIR_FROM_SEXPR, error, VIR_ERR_ERROR,
+    __virRaiseError(NULL, NULL, NULL, VIR_FROM_SEXPR, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, 0, 0, errmsg, info);
 }
 
Index: libvirt/src/test.c
===================================================================
--- libvirt.orig/src/test.c
+++ libvirt/src/test.c
@@ -198,7 +198,7 @@ testError(virConnectPtr con,
         return;
 
     errmsg = __virErrorMsg(error, info);
-    __virRaiseError(con, dom, VIR_FROM_XEN, error, VIR_ERR_ERROR,
+    __virRaiseError(con, dom, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, 0, 0, errmsg, info, 0);
 }
 
Index: libvirt/src/virterror.c
===================================================================
--- libvirt.orig/src/virterror.c
+++ libvirt/src/virterror.c
@@ -17,7 +17,7 @@
 #include "internal.h"
 
 static virError lastErr =       /* the last error */
-{ 0, 0, NULL, VIR_ERR_NONE, NULL, NULL, NULL, NULL, NULL, 0, 0 };
+{ 0, 0, NULL, VIR_ERR_NONE, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL };
 static virErrorFunc virErrorHandler = NULL;     /* global error handlet */
 static void *virUserData = NULL;        /* associated data */
 
@@ -230,7 +230,7 @@ virConnSetErrorFunc(virConnectPtr conn, 
 void
 virDefaultErrorFunc(virErrorPtr err)
 {
-    const char *lvl = "", *dom = "", *domain = "";
+    const char *lvl = "", *dom = "", *domain = "", *network = "";
     int len;
 
     if ((err == NULL) || (err->code == VIR_ERR_OK))
@@ -277,24 +277,27 @@ virDefaultErrorFunc(virErrorPtr err)
     }
     if ((err->dom != NULL) && (err->code != VIR_ERR_INVALID_DOMAIN)) {
         domain = err->dom->name;
+    } else if ((err->net != NULL) && (err->code != VIR_ERR_INVALID_NETWORK)) {
+        network = err->net->name;
     }
     len = strlen(err->message);
     if ((err->domain == VIR_FROM_XML) && (err->code == VIR_ERR_XML_DETAIL) &&
         (err->int1 != 0))
-        fprintf(stderr, "libvir: %s%s %s: line %d: %s",
-                dom, lvl, domain, err->int1, err->message);
+        fprintf(stderr, "libvir: %s%s %s%s: line %d: %s",
+                dom, lvl, domain, network, err->int1, err->message);
     else if ((len == 0) || (err->message[len - 1] != '\n'))
-        fprintf(stderr, "libvir: %s%s %s: %s\n",
-                dom, lvl, domain, err->message);
+        fprintf(stderr, "libvir: %s%s %s%s: %s\n",
+                dom, lvl, domain, network, err->message);
     else
-        fprintf(stderr, "libvir: %s%s %s: %s",
-                dom, lvl, domain, err->message);
+        fprintf(stderr, "libvir: %s%s %s%s: %s",
+                dom, lvl, domain, network, err->message);
 }
 
 /**
  * __virRaiseError:
  * @conn: the connection to the hypervisor if available
  * @dom: the domain if available
+ * @net: the network if available
  * @domain: the virErrorDomain indicating where it's coming from
  * @code: the virErrorNumber code for the error
  * @level: the virErrorLevel for the error
@@ -310,7 +313,7 @@ virDefaultErrorFunc(virErrorPtr err)
  * immediately if a callback is found and store it for later handling.
  */
 void
-__virRaiseError(virConnectPtr conn, virDomainPtr dom,
+__virRaiseError(virConnectPtr conn, virDomainPtr dom, virNetworkPtr net,
                 int domain, int code, virErrorLevel level,
                 const char *str1, const char *str2, const char *str3,
                 int int1, int int2, const char *msg, ...)
@@ -349,6 +352,7 @@ __virRaiseError(virConnectPtr conn, virD
     virResetError(to);
     to->conn = conn;
     to->dom = dom;
+    to->net = net;
     to->domain = domain;
     to->code = code;
     to->message = str;
Index: libvirt/src/xen_internal.c
===================================================================
--- libvirt.orig/src/xen_internal.c
+++ libvirt/src/xen_internal.c
@@ -476,7 +476,7 @@ virXenError(virErrorNumber error, const 
         return;
 
     errmsg = __virErrorMsg(error, info);
-    __virRaiseError(NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
+    __virRaiseError(NULL, NULL, NULL, VIR_FROM_XEN, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, value, 0, errmsg, info, value);
 }
 
Index: libvirt/src/xend_internal.c
===================================================================
--- libvirt.orig/src/xend_internal.c
+++ libvirt/src/xend_internal.c
@@ -153,7 +153,7 @@ virXendError(virConnectPtr conn, virErro
         return;
 
     errmsg = __virErrorMsg(error, info);
-    __virRaiseError(conn, NULL, VIR_FROM_XEND, error, VIR_ERR_ERROR,
+    __virRaiseError(conn, NULL, NULL, VIR_FROM_XEND, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, 0, 0, errmsg, info);
 }
 
@@ -174,7 +174,7 @@ virXendErrorInt(virConnectPtr conn, virE
         return;
 
     errmsg = __virErrorMsg(error, NULL);
-    __virRaiseError(conn, NULL, VIR_FROM_XEND, error, VIR_ERR_ERROR,
+    __virRaiseError(conn, NULL, NULL, VIR_FROM_XEND, error, VIR_ERR_ERROR,
                     errmsg, NULL, NULL, val, 0, errmsg, val);
 }
 
Index: libvirt/src/xm_internal.c
===================================================================
--- libvirt.orig/src/xm_internal.c
+++ libvirt/src/xm_internal.c
@@ -116,7 +116,7 @@ xenXMError(virConnectPtr conn, virErrorN
         return;
 
     errmsg = __virErrorMsg(error, info);
-    __virRaiseError(conn, NULL, VIR_FROM_XEND, error, VIR_ERR_ERROR,
+    __virRaiseError(conn, NULL, NULL, VIR_FROM_XEND, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, 0, 0, errmsg, info);
 }
 
Index: libvirt/src/xml.c
===================================================================
--- libvirt.orig/src/xml.c
+++ libvirt/src/xml.c
@@ -34,7 +34,7 @@ virXMLError(virErrorNumber error, const 
         return;
 
     errmsg = __virErrorMsg(error, info);
-    __virRaiseError(NULL, NULL, VIR_FROM_XML, error, VIR_ERR_ERROR,
+    __virRaiseError(NULL, NULL, NULL, VIR_FROM_XML, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, value, 0, errmsg, info, value);
 }
 
Index: libvirt/src/xmlrpc.c
===================================================================
--- libvirt.orig/src/xmlrpc.c
+++ libvirt/src/xmlrpc.c
@@ -39,7 +39,7 @@ static void xmlRpcError(virErrorNumber e
         return;
 
     errmsg = __virErrorMsg(error, info);
-    __virRaiseError(NULL, NULL, VIR_FROM_RPC, error, VIR_ERR_ERROR,
+    __virRaiseError(NULL, NULL, NULL, VIR_FROM_RPC, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, value, 0, errmsg, info, value);
 }
 
Index: libvirt/src/xs_internal.c
===================================================================
--- libvirt.orig/src/xs_internal.c
+++ libvirt/src/xs_internal.c
@@ -106,7 +106,7 @@ virXenStoreError(virConnectPtr conn, vir
         return;
 
     errmsg = __virErrorMsg(error, info);
-    __virRaiseError(conn, NULL, VIR_FROM_XENSTORE, error, VIR_ERR_ERROR,
+    __virRaiseError(conn, NULL, NULL, VIR_FROM_XENSTORE, error, VIR_ERR_ERROR,
                     errmsg, info, NULL, 0, 0, errmsg, info);
 }
 

-- 


[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]