[libvirt] [PATCH 03/14] Introduce virDomainGetJobStats API

Peter Krempa pkrempa at redhat.com
Thu Feb 21 21:39:09 UTC 2013


On 02/19/13 13:35, Jiri Denemark wrote:
> This is an extensible version of virDomainGetJobInfo.
> ---
>   include/libvirt/libvirt.h.in | 205 +++++++++++++++++++++++++++++++++++++++++++
>   python/generator.py          |   1 +
>   src/driver.h                 |   7 ++
>   src/libvirt.c                |  58 ++++++++++++
>   src/libvirt_public.syms      |   1 +
>   5 files changed, 272 insertions(+)
>
> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index eda9e12..9d1c6ea 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -3945,9 +3945,214 @@ struct _virDomainJobInfo {

...

> +/**
> + * VIR_DOMAIN_JOB_DISK_PROCESSED:
> + *
> + * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_PROCESSED but only
> + * tracking guest memory progress, as VIR_TYPED_PARAM_ULLONG.

s/memory/disk/

> + *
> + * This field corresponds to fileProcessed field in virDomainJobInfo.
> + */
> +#define VIR_DOMAIN_JOB_DISK_PROCESSED           "disk_processed"
> +
> +/**
> + * VIR_DOMAIN_JOB_DISK_REMAINING:
> + *
> + * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_REMAINING but only
> + * tracking guest memory progress, as VIR_TYPED_PARAM_ULLONG.

s/memory/disk/

> + *
> + * This field corresponds to fileRemaining field in virDomainJobInfo.
> + */
> +#define VIR_DOMAIN_JOB_DISK_REMAINING           "disk_remaining"
> +
> +/**
> + * VIR_DOMAIN_JOB_COMPRESSION_CACHE:
> + *
> + * virDomainGetJobStats field: size of the cache (in bytes) used for
> + * compressing repeatedly transferred memory pages during live migration,
> + * as VIR_TYPED_PARAM_ULLONG.
> + */
> +#define VIR_DOMAIN_JOB_COMPRESSION_CACHE        "compression_cache"
> +
> +/**
> + * VIR_DOMAIN_JOB_COMPRESSION_BYTES:
> + *
> + * virDomainGetJobStats field: number of compressed bytes transferred
> + * since the beginning of migration, as VIR_TYPED_PARAM_ULLONG.
> + */
> +#define VIR_DOMAIN_JOB_COMPRESSION_BYTES        "compression_bytes"
> +
> +/**
> + * VIR_DOMAIN_JOB_COMPRESSION_PAGES:
> + *
> + * virDomainGetJobStats field: number of compressed pages transferred
> + * since the beginning of migration, as VIR_TYPED_PARAM_ULLONG.
> + */
> +#define VIR_DOMAIN_JOB_COMPRESSION_PAGES        "compression_pages"
> +
> +/**
> + * VIR_DOMAIN_JOB_COMPRESSION_CACHE_MISSES:
> + *
> + * virDomainGetJobStats field: number of repeatedly changing pages that
> + * were not found in compression cache and thus could not be compressed,
> + * as VIR_TYPED_PARAM_ULLONG.
> + */

This field and those above are a bit too XBZRLE specific although try to 
be general. But it doesn't bother me more than writing this.

> +#define VIR_DOMAIN_JOB_COMPRESSION_CACHE_MISSES "compression_cache_misses"
> +
> +/**
> + * VIR_DOMAIN_JOB_COMPRESSION_OVERFLOW:
> + *
> + * virDomainGetJobStats field: number of repeatedly changing pages that
> + * were found in compression cache but were sent uncompressed because
> + * the result of compression was larger than the original page as a whole,
> + * as VIR_TYPED_PARAM_ULLONG.
> + */
> +#define VIR_DOMAIN_JOB_COMPRESSION_OVERFLOW     "compression_overflow"
> +
> +
> +/**
>    * virDomainSnapshot:
>    *
>    * a virDomainSnapshot is a private structure representing a snapshot of

...

> diff --git a/src/libvirt.c b/src/libvirt.c
> index 1e78500..3611839 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c
> @@ -17399,6 +17399,64 @@ error:
>
>
>   /**
> + * virDomainGetJobStats:
> + * @domain: a domain object
> + * @type: where to store the job type (one of virDomainJobType)
> + * @params: where to store job statistics
> + * @nparams: number of items in @params
> + * @flags: extra flags; not used yet, so callers should always pass 0
> + *
> + * Extract information about progress of a background job on a domain.
> + * Will return an error if the domain is not active. The function returns
> + * a superset of progress information provided by virDomainGetJobInfo.
> + * Possible fields returned in @params are defined by VIR_DOMAIN_JOB_*
> + * macros.

Possibly worth mentioning that newer daemon when used with older client 
may return some fields unknown by the client.

> + *
> + * Returns 0 in case of success and -1 in case of failure.
> + */
> +int
> +virDomainGetJobStats(virDomainPtr domain,
> +                     int *type,
> +                     virTypedParameterPtr *params,
> +                     int *nparams,
> +                     unsigned int flags)

...

> diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
> index 3bdfd57..361408f 100644
> --- a/src/libvirt_public.syms
> +++ b/src/libvirt_public.syms
> @@ -605,6 +605,7 @@ LIBVIRT_1.0.2 {
>
>   LIBVIRT_1.0.3 {

Hopefully you won't need to change this.

>       global:
> +        virDomainGetJobStats;
>           virNodeDeviceLookupSCSIHostByWWN;
>   } LIBVIRT_1.0.2;
>
>

ACK with the comments fixed.

Peter




More information about the libvir-list mailing list