[libvirt] [PATCH v2 07/11] domain: Add VIR_DOMAIN_XML_SNAPSHOTS flag

John Ferlan jferlan at redhat.com
Wed Feb 27 16:32:34 UTC 2019



On 2/23/19 4:24 PM, Eric Blake wrote:
> Right now, copying the state of a transient domain with snapshots
> from one host to another requires multiple API calls on both
> machines - on the host: get the domain XML, get a list of the
> snapshots, and then for each snapshot get the snapshot's XML;
> then on the destination: create the domain, then multiple
> domain snapshot create calls with the REDEFINE flag.  This
> patch aims to make the process use fewer APIs by making it
> possible to grab the XML for all snapshots at the same time as
> grabbing the domain XML.  Note that we had to do the modification
> to virDomainGetXMLDesc(), rather than virDomainSnapshotGetXMLDesc(),
> since the latter requires a single non-NULL snapshot object,
> whereas we want the list of all snapshots for the domain (even
> if the list has 0 elements).
> 
> Once wired up in drivers in later patches, the new information
> is provided as:
> 
> <domain ...>
>   ...
>   </devices>
>   <snapshots current='name'>
>     <domainsnapshot>
>       ...
>     </domainsnapshot>
>     <domainsnapshot>
>       ...
>     </domainsnapshot>
>   </snapshots>
> </domain>
> 
> For now, I did not modify the schema to permit this information
> during virDomainDefineXML; it is still necessary to use
> virDomainSnapshotCreateXML with VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE
> multiple times to recreate the added state output here.
> 
> Unfortunately, libvirt versions between 1.2.12 and 5.0.0 will
> silently ignore the new flag, rather than diagnosing that they
> don't support it; but at least silent lack of snapshots from
> an older server is not a security hole.
> 
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>  include/libvirt/libvirt-domain.h |  1 +
>  src/conf/domain_conf.c           | 13 ++++++++-----
>  src/libvirt-domain.c             |  5 +++++
>  3 files changed, 14 insertions(+), 5 deletions(-)
> 

[...]

> diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
> index 072b92b717..2691698bd5 100644
> --- a/src/libvirt-domain.c
> +++ b/src/libvirt-domain.c
> @@ -2570,6 +2570,11 @@ virDomainGetControlInfo(virDomainPtr domain,
>   * XML might not validate against the schema, so it is mainly for
>   * internal use.
>   *
> + * If @flags contains VIR_DOMAIN_XML_SNAPSHOTS, the XML will include

Should we even try to say that "and supported by the target libvirt
system with the appropriate version of the software installed" ;-)... I
know implied somewhat - but perhaps notable in this (and future) cases
because of the issue mentioned in the commit message that outward facing
docs consumers may never read.

> + * an additional <snapshots> child element describing all snapshots
> + * belonging to the domain, including an attribute current='name' if
> + * one of those snapshots is current.
> + *
>   * Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of error.
>   *         the caller must free() the returned value.
>   */
> 

Reviewed-by: John Ferlan <jferlan at redhat.com>

John




More information about the libvir-list mailing list