On Fri, Oct 03, 2025 at 02:58:59PM +0200, Peter Krempa wrote:
> On Fri, Oct 03, 2025 at 13:43:31 +0100, Daniel P. Berrangé via Devel wrote:
> > From: Daniel P. Berrangé <[email protected]>
> > 
> > The virEventAddHandle/Timeout APIs are unusual in that they do not
> > report errors on failure, because they call through to function
> > callbacks which might be provided externally to libvirt and thus
> > won't be using libvirt's error reporting APIs.
> > 
> > This is a rather unfortunate design characteristic as we can see
> > most callers forgot about this special behaviour and so we are
> > lacking error reporting in many cases.
> > 
> > Signed-off-by: Daniel P. Berrangé <[email protected]>
> > ---
> >  src/libxl/libxl_driver.c           |  2 ++
> >  src/logging/log_cleaner.c          |  4 ++++
> >  src/logging/log_handler.c          |  4 ++++
> >  src/lxc/lxc_controller.c           |  5 ++++-
> >  src/node_device/node_device_udev.c | 10 +++++++++-
> >  src/remote/remote_ssh_helper.c     | 10 ++++++++--
> >  src/rpc/virkeepalive.c             |  5 ++++-
> >  src/rpc/virnetclientstream.c       |  2 ++
> >  src/rpc/virnetserverclient.c       |  5 ++++-
> >  src/rpc/virnetserverservice.c      |  2 ++
> >  10 files changed, 43 insertions(+), 6 deletions(-)
> > 
> > diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> > index 308c0372aa..6a2e2ab964 100644
> > --- a/src/libxl/libxl_driver.c
> > +++ b/src/libxl/libxl_driver.c
> > @@ -170,6 +170,7 @@ libxlFDRegisterEventHook(void *priv,
> >      info->id = virEventAddHandle(fd, vir_events, libxlFDEventCallback,
> >                                   info, libxlOSEventHookInfoFree);
> >      if (info->id < 0) {
> > +        VIR_WARN("Failed to add event watch for FD %d", fd);
> >          VIR_FREE(info);
> >          return -1;
> >      }
> > @@ -255,6 +256,7 @@ libxlTimeoutRegisterEventHook(void *priv,
> >      info->id = virEventAddTimeout(timeout, libxlTimerCallback,
> >                                    info, libxlOSEventHookInfoFree);
> >      if (info->id < 0) {
> > +        VIR_WARN("Failed to add event timer");
> >          VIR_FREE(info);
> >          return -1;
> >      }
> 
> IMO adding a warning here will be questionably useful as it's just
> logged. Does the code that invokes these callbacks report an error that
> would be correlatable with the warning?

Yeah it isn't ideal, but these two methods are callbacks that are
registered with libxl.so, so we don't have a better way to reoprt
errors from them AFAIK.

> 
> 
> > diff --git a/src/node_device/node_device_udev.c 
> > b/src/node_device/node_device_udev.c
> > index 30c2ddf568..85468150c1 100644
> > --- a/src/node_device/node_device_udev.c
> > +++ b/src/node_device/node_device_udev.c
> > @@ -2318,6 +2318,10 @@ scheduleMdevctlUpdate(udevEventData *data)
> >          virEventRemoveTimeout(data->mdevctlTimeout);
> >      data->mdevctlTimeout = virEventAddTimeout(100, submitMdevctlUpdate,
> >                                                data, NULL);
> > +    if (data->mdevctlTimeout < 0) {
> > +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> > +                       _("Unable to add mdev update timer"));
> > +    }
> 
> This code path doesn't raise errors, so it'll likely only get logged.

Yep, guess I could  use VIR_WARN instead to make that more obvious.

> 
> 
> For the rest:
> 
> Reviewed-by: Peter Krempa <[email protected]>
> 

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 :|

Reply via email to