]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virStorageSource: Add fields for storing last I/O error message
authorPeter Krempa <pkrempa@redhat.com>
Mon, 27 Jan 2025 15:20:43 +0000 (16:20 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 4 Feb 2025 13:40:55 +0000 (14:40 +0100)
Hypervisors may report a I/O error message (unstable; for human use)
to libvirt. In order to store it with the appropriate virStorageSource
so that it can be later queried we need to add fields to
virStorageSource to store the timestamp and message.

The message is deliberately not copied via virStorageSourceCopy.

The messages are also not serialized to the status XML as losing them on
a daemon restart as they're likely to be stale anyways.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
src/conf/storage_source_conf.c
src/conf/storage_source_conf.h

index 2b658dd485c0c7ce341f3baae3f2ef9220e74539..ca956a1b7ccd9cd145d6b03768d65ff5e0f814ff 100644 (file)
@@ -917,6 +917,8 @@ virStorageSourceCopy(const virStorageSource *src,
     def->nfs_uid = src->nfs_uid;
     def->nfs_gid = src->nfs_gid;
 
+    /* 'ioerror_timestamp' and 'ioerror_message' are deliberately not copied */
+
     return g_steal_pointer(&def);
 }
 
@@ -1203,6 +1205,9 @@ virStorageSourceClear(virStorageSource *def)
 
     g_clear_pointer(&def->fdtuple, g_object_unref);
 
+    VIR_FREE(def->ioerror_timestamp);
+    VIR_FREE(def->ioerror_message);
+
     /* clear everything except the class header as the object APIs
      * will break otherwise */
     memset((char *) def + sizeof(def->parent), 0,
index 94637225181a8f4a6434ed4ca965669892074d6f..e6cbb93c065bec88dde22ba426cca13c14267a81 100644 (file)
@@ -445,6 +445,12 @@ struct _virStorageSource {
      * to do this decision.
      */
     bool seclabelSkipRemember;
+
+    /* Last instance of hypervisor originated I/O error message and timestamp.
+     * The error stored here is not designed to be stable. The message
+     * is also not copied via virStorageSourceCopy */
+    char *ioerror_timestamp;
+    char *ioerror_message;
 };
 
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(virStorageSource, virObjectUnref);