[PATCH 4/5] qemu: monitor: Plumb in disk IO error message passthrough to VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON

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

 



Pass the generic error message from qemu to the event so that users can
possibly use the information. As documented the error is prefixed with
"other: " to prevent collisions with already documented values in our
API.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 src/qemu/qemu_monitor_json.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 9f417d27c6..6de34b03bb 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -695,7 +695,7 @@ qemuMonitorJSONHandleIOError(qemuMonitor *mon, virJSONValue *data)
     const char *device;
     const char *nodename;
     const char *action;
-    const char *reason = "";
+    g_autofree char *reason = NULL;
     bool nospc = false;
     int actionID;

@@ -713,14 +713,27 @@ qemuMonitorJSONHandleIOError(qemuMonitor *mon, virJSONValue *data)

     nodename = virJSONValueObjectGetString(data, "node-name");

-    if (virJSONValueObjectGetBoolean(data, "nospace", &nospc) == 0 && nospc)
-        reason = "enospc";
+    if (virJSONValueObjectGetBoolean(data, "nospace", &nospc) == 0 && nospc) {
+        reason = g_strdup("enospc");
+    } else {
+        /* For any unknown error we prefix the qemu-originating error with 'other: '
+         * so that applications can use that to filter them from errors we
+         * define in our API */
+        const char *qemureason;
+
+        if ((qemureason = virJSONValueObjectGetString(data, "reason"))) {
+            reason = g_strdup_printf("other: %s", qemureason);
+        }
+    }

     if ((actionID = qemuMonitorIOErrorActionTypeFromString(action)) < 0) {
         VIR_WARN("unknown disk io error action '%s'", action);
         actionID = VIR_DOMAIN_EVENT_IO_ERROR_NONE;
     }

+    if (!reason)
+        reason = g_strdup("");
+
     qemuMonitorEmitIOError(mon, device, nodename, actionID, reason);
 }

-- 
2.48.1




[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]

  Powered by Linux