[PATCH v2 07/15] virStorageSource: Add fields for storing last I/O error message

Peter Krempa posted 15 patches 7 months, 1 week ago
[PATCH v2 07/15] virStorageSource: Add fields for storing last I/O error message
Posted by Peter Krempa 7 months, 1 week ago
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>
---
 src/conf/storage_source_conf.c | 5 +++++
 src/conf/storage_source_conf.h | 6 ++++++
 2 files changed, 11 insertions(+)

diff --git a/src/conf/storage_source_conf.c b/src/conf/storage_source_conf.c
index 2b658dd485..ca956a1b7c 100644
--- a/src/conf/storage_source_conf.c
+++ b/src/conf/storage_source_conf.c
@@ -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,
diff --git a/src/conf/storage_source_conf.h b/src/conf/storage_source_conf.h
index 9463722518..e6cbb93c06 100644
--- a/src/conf/storage_source_conf.h
+++ b/src/conf/storage_source_conf.h
@@ -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);
-- 
2.48.1
Re: [PATCH v2 07/15] virStorageSource: Add fields for storing last I/O error message
Posted by Daniel P. Berrangé 7 months, 1 week ago
On Tue, Jan 28, 2025 at 05:28:11PM +0100, Peter Krempa wrote:
> 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>
> ---
>  src/conf/storage_source_conf.c | 5 +++++
>  src/conf/storage_source_conf.h | 6 ++++++
>  2 files changed, 11 insertions(+)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>


With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|