[libvirt RFC v3 04/19] libvirt: introduce virDomainRestoreParametersFlags public API

Jim Fehlig jfehlig at suse.com
Tue Apr 26 22:43:43 UTC 2022


On 4/26/22 10:47, Claudio Fontana wrote:
> add new API in order to be able to extend parameters to the domain
> restore operation. We will use it to fit the existing arguments of
> VirDomainRestoreFlags, and then add parallel restore functionality.
> 
> Signed-off-by: Claudio Fontana <cfontana at suse.de>
> ---
>   include/libvirt/libvirt-domain.h |  4 +++
>   src/driver-hypervisor.h          |  7 +++++
>   src/libvirt-domain.c             | 48 ++++++++++++++++++++++++++++++++
>   src/libvirt_public.syms          |  1 +
>   4 files changed, 60 insertions(+)
> 
> diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
> index 4beea34f93..3deaf78cd7 100644
> --- a/include/libvirt/libvirt-domain.h
> +++ b/include/libvirt/libvirt-domain.h
> @@ -1500,6 +1500,10 @@ int                     virDomainRestoreFlags   (virConnectPtr conn,
>                                                    const char *from,
>                                                    const char *dxml,
>                                                    unsigned int flags);
> +int                     virDomainRestoreParametersFlags (virConnectPtr conn,
> +                                                         virTypedParameterPtr params,
> +                                                         int nparams,
> +                                                         unsigned int flags);
>   
>   # define VIR_SAVE_PARAM_FILE                     "file"
>   # define VIR_SAVE_PARAM_DXML                     "dxml"
> diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h
> index a4e1d21e76..e62e4c8f74 100644
> --- a/src/driver-hypervisor.h
> +++ b/src/driver-hypervisor.h
> @@ -256,6 +256,12 @@ typedef int
>                               const char *dxml,
>                               unsigned int flags);
>   
> +typedef int
> +(*virDrvDomainRestoreParametersFlags)(virConnectPtr conn,
> +                                      virTypedParameterPtr params,
> +                                      int nparams,
> +                                      unsigned int flags);
> +
>   typedef char *
>   (*virDrvDomainSaveImageGetXMLDesc)(virConnectPtr conn,
>                                      const char *file,
> @@ -1498,6 +1504,7 @@ struct _virHypervisorDriver {
>       virDrvDomainSaveParametersFlags domainSaveParametersFlags;
>       virDrvDomainRestore domainRestore;
>       virDrvDomainRestoreFlags domainRestoreFlags;
> +    virDrvDomainRestoreParametersFlags domainRestoreParametersFlags;
>       virDrvDomainSaveImageGetXMLDesc domainSaveImageGetXMLDesc;
>       virDrvDomainSaveImageDefineXML domainSaveImageDefineXML;
>       virDrvDomainCoreDump domainCoreDump;
> diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
> index 9e4fcfd022..f967efa473 100644
> --- a/src/libvirt-domain.c
> +++ b/src/libvirt-domain.c
> @@ -1140,6 +1140,54 @@ virDomainRestoreFlags(virConnectPtr conn, const char *from, const char *dxml,
>   }
>   
>   
> +/**
> + * virDomainRestoreParametersFlags:
> + * @conn: pointer to the hypervisor connection
> + * @params: restore parameters
> + * @nparams: number of restore parameters
> + * @flags: bitwise-OR of virDomainSaveRestoreFlags
> + *
> + * This method extends virDomainRestoreFlags by adding parameters to Restore.
> + *
> + * If @flags includes VIR_DOMAIN_SAVE_PARALLEL, then libvirt will
> + * attempt to restore from multiple files in parallel,
> + * where the number of extra files is determined by the parameter
> + * VIR_SAVE_PARAM_PARALLEL_CONNECTIONS.
> + *
> + * Returns 0 in case of success and -1 in case of failure.
> + */

Same API doc build failure here due to missing 'Since:' tag.

Jim

> +int
> +virDomainRestoreParametersFlags(virConnectPtr conn,
> +                                virTypedParameterPtr params, int nparams,
> +                                unsigned int flags)
> +{
> +    VIR_DEBUG("conn=%p, params=%p, nparams=%d, flags=0x%x",
> +              conn, params, nparams, flags);
> +    VIR_TYPED_PARAMS_DEBUG(params, nparams);
> +
> +    virResetLastError();
> +
> +    virCheckConnectReturn(conn, -1);
> +    virCheckReadOnlyGoto(conn->flags, error);
> +
> +    VIR_EXCLUSIVE_FLAGS_GOTO(VIR_DOMAIN_SAVE_RUNNING,
> +                             VIR_DOMAIN_SAVE_PAUSED,
> +                             error);
> +
> +    if (conn->driver->domainRestoreParametersFlags) {
> +        if (conn->driver->domainRestoreParametersFlags(conn, params, nparams, flags) < 0)
> +            goto error;
> +        return 0;
> +    }
> +
> +    virReportUnsupportedError();
> +
> + error:
> +    virDispatchError(conn);
> +    return -1;
> +}
> +
> +
>   /**
>    * virDomainSaveImageGetXMLDesc:
>    * @conn: pointer to the hypervisor connection
> diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
> index eb3a7afb75..74c1464b38 100644
> --- a/src/libvirt_public.syms
> +++ b/src/libvirt_public.syms
> @@ -919,6 +919,7 @@ LIBVIRT_8.0.0 {
>   LIBVIRT_8.3.0 {
>       global:
>           virDomainSaveParametersFlags;
> +        virDomainRestoreParametersFlags;
>   } LIBVIRT_8.0.0;
>   
>   # .... define new API here using predicted next version number ....



More information about the libvir-list mailing list