On Tue, Mar 04, 2025 at 03:20:56PM +0100, Peter Krempa wrote:
Couple notes before doing a proper review:
On Tue, Mar 04, 2025 at 14:03:56 +0000, Daniel P. Berrangé wrote:
> Contrary to most APIs returning typed parameters, there are no constants
> defined for the guest info data keys. This is was because many of the
> keys needs to be dynamically constructed using one or more array index
> values.
>
> It is possible to define constants while still supporting dynamic
> array indexes by simply defining the prefixes and suffixes as constants.
> The consuming code can then combine the constants with array index
> value.
>
> With this approach, it is practical to add constants for the guest info
> API keys.
>
> Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
> ---
> include/libvirt/libvirt-domain.h | 49 ++++++++++++++++++++++++++++++++
> src/libvirt-domain.c | 14 +++------
> src/qemu/qemu_agent.c | 12 +++++---
> 3 files changed, 61 insertions(+), 14 deletions(-)
>
> diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
> index f5420bca6e..cef8bd4dbe 100644
> --- a/include/libvirt/libvirt-domain.h
> +++ b/include/libvirt/libvirt-domain.h
> @@ -6442,6 +6442,55 @@ int virDomainSetLaunchSecurityState(virDomainPtr domain,
> int nparams,
> unsigned int flags);
>
> +/**
> + * VIR_DOMAIN_GUEST_INFO_USER_COUNT:
> + *
> + * The number of active users on this domain as an unsigned int.
> + *
> + * Since: 11.2.0
This makes it sound as if the field was available since the version
which is not exactly true. This is especially true as ...
> + */
> +#define VIR_DOMAIN_GUEST_INFO_USER_COUNT "user.count"
> +
> +/**
> + * VIR_DOMAIN_GUEST_INFO_USER_PREFIX:
> + *
> + * The parameter name prefix to access each user entry. Concatenate the
> + * prefix, the entry number formatted as an unsigned integer and one of the
> + * user suffix parameters to form a complete parameter name.
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_GUEST_INFO_USER_PREFIX "user."
> +
> +/**
> + * VIR_DOMAIN_GUEST_INFO_USER_SUFFIX_NAME:
> + *
> + * Username of the user as a string.
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_GUEST_INFO_USER_SUFFIX_NAME ".name"
> +
> +/**
> + * VIR_DOMAIN_GUEST_INFO_USER_SUFFIX_DOMAIN:
> + *
> + * Domain of the user as a string (may only be present on certain guest
> + * types).
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_GUEST_INFO_USER_SUFFIX_DOMAIN ".domain"
> +
> +/**
> + * VIR_DOMAIN_GUEST_INFO_USER_SUFFIX_LOGIN_TIME:
> + *
> + * The login time of a user in milliseconds since the epoch as unsigned long
> + * long.
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_GUEST_INFO_USER_SUFFIX_LOGIN_TIME ".login-time"
> +
> /**
> * virDomainGuestInfoTypes:
> *
> diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
> index 072cc32255..8485dad668 100644
> --- a/src/libvirt-domain.c
> +++ b/src/libvirt-domain.c
> @@ -13199,16 +13199,10 @@ virDomainSetVcpu(virDomainPtr domain,
> * (although not necessarily implemented for each hypervisor):
> *
> * VIR_DOMAIN_GUEST_INFO_USERS:
> - * returns information about users that are currently logged in within the
> - * guest domain. The typed parameter keys are in this format:
> - *
> - * "user.count" - the number of active users on this domain as an
> - * unsigned int
> - * "user.<num>.name" - username of the user as a string
> - * "user.<num>.domain" - domain of the user as a string (may
only be
> - * present on certain guest types)
> - * "user.<num>.login-time" - the login time of a user in
milliseconds
> - * since the epoch as unsigned long long
... you delete this ...
> + * Return information about users that are currently logged in within the
> + * guest domain.
> + * The VIR_DOMAIN_GUEST_INFO_USER_* constants define the known typed parameter
> + * keys.
... and replace it by the reference here.
I also understand the reason but honestly for human consumption the
existing format was more understandable. At least we keep that in virsh.
Yeah, its a double edged sword, as I really didn't want to
duplicate the information, nor encourage users to use the
hardcoded strings instead of the constants.
I guess we're effectively dumbing down guest info/stats to
the same level of docs "quality" as all the other typed
parameter APIs.
>
> - g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
"user.%zu.name", i);
> + g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
> + VIR_DOMAIN_GUEST_INFO_USER_PREFIX "%zu"
> + VIR_DOMAIN_GUEST_INFO_USER_SUFFIX_NAME, i);
> if (virTypedParamsAddString(params, nparams, maxparams,
> param_name, strvalue) < 0)
All of the above code was refactored recently to use
'virTypedParamListAdd*' so all of the patches dealing with guest agent
info will need to be rebased.
Doh, I missed that those changes merged now.
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 :|