[libvirt] [PATCH] error: add new error type for reflecting partial API support

Michal Privoznik mprivozn at redhat.com
Thu Jul 21 19:26:45 UTC 2011


On 21.07.2011 20:46, Eric Blake wrote:
> VIR_ERR_INVALID_ARG implies that an argument cannot possibly
> be correct, given the current state of the API.
> VIR_ERR_CONFIG_UNSUPPORTED implies that a configuration is
> wrong, but arguments aren't configuration.
> VIR_ERR_NO_SUPPORT implies that a function is completely
> unimplemented.
>
> But in the case of a function that is partially implemented,
> yet the full power of the API is not available for that
> driver, none of the above messages make sense.  Hence a new
> error message, implying that the argument is known to comply
> with the current state of the API, and that while the driver
> supports aspects of the function, it does not support that
> particular use of the argument.
>
> A good use case for this is a driver that supports
> virDomainSaveFlags, but not the dxml argument of that API.
>
> It might be feasible to also use this new error for all functions
> that check flags, and which accept fewer flags than what is possible
> in the public API.  But doing so would get complicated, since
> neither libvirt.c nor the remote driver may do flag filtering,
> and every other driver would have to do a two-part check, first
> using virCheckFlags on all public flags (which gives
> VIR_ERR_INVALID_ARG for an impossible flag), followed by a
> particular mask check for VIR_ERR_ARGUMENT_UNSUPPORTED (for a
> possible public flag but unsupported by this driver).
>
> * include/libvirt/virterror.h (VIR_ERR_ARGUMENT_UNSUPPORTED): New
> error.
> * src/util/virterror.c (virErrorMsg): Give it a message.
> Suggested by Daniel P. Berrange.
> ---
>
> Needed before v3 of 7/16 of the bypass-cache series:
> https://www.redhat.com/archives/libvir-list/2011-July/msg01470.html
>
>   include/libvirt/virterror.h |    4 +++-
>   src/util/virterror.c        |    6 ++++++
>   2 files changed, 9 insertions(+), 1 deletions(-)
>
> diff --git a/include/libvirt/virterror.h b/include/libvirt/virterror.h
> index efa4796..9cac437 100644
> --- a/include/libvirt/virterror.h
> +++ b/include/libvirt/virterror.h
> @@ -4,7 +4,7 @@
>    * Description: Provides the interfaces of the libvirt library to handle
>    *              errors raised while using the library.
>    *
> - * Copy:  Copyright (C) 2006, 2010 Red Hat, Inc.
> + * Copy:  Copyright (C) 2006, 2010-2011 Red Hat, Inc.
>    *
>    * See COPYING.LIB for the License of this software
>    *
> @@ -232,6 +232,8 @@ typedef enum {
>       VIR_ERR_INVALID_DOMAIN_SNAPSHOT = 71,/* invalid domain snapshot */
>       VIR_ERR_NO_DOMAIN_SNAPSHOT = 72,	/* domain snapshot not found */
>       VIR_ERR_INVALID_STREAM = 73,        /* stream pointer not valid */
> +    VIR_ERR_ARGUMENT_UNSUPPORTED = 74,  /* valid API use but unsupported by
> +                                           the given driver */
>   } virErrorNumber;
>
>   /**
> diff --git a/src/util/virterror.c b/src/util/virterror.c
> index 07f8b45..9a27feb 100644
> --- a/src/util/virterror.c
> +++ b/src/util/virterror.c
> @@ -1183,6 +1183,12 @@ virErrorMsg(virErrorNumber error, const char *info)
>               else
>                   errmsg = _("invalid stream pointer in %s");
>               break;
> +        case VIR_ERR_ARGUMENT_UNSUPPORTED:
> +            if (info == NULL)
> +                errmsg = _("argument unsupported");
> +            else
> +                errmsg = _("argument unsupported: %s");
> +            break;
>       }
>       return (errmsg);
>   }
ACK.

I like patches where commit message is longer than actual diff :)

Michal




More information about the libvir-list mailing list