On 3/7/19 10:13 AM, Ján Tomko wrote: > On Mon, Mar 04, 2019 at 09:34:40PM -0600, Eric Blake wrote: >> Continue the work of the previous patch in making it possible >> to copy the state of a transient domain with snapshots from one >> host to another, by allowing the destination to perform bulk >> redefines. Note that the destination still has to do separate >> calls for creating/defining the domain first, and then redefining >> the snapshots (that is, there is intentional asymmetry between >> dumping the list in virDomainGetXMLDesc() but redefining it via >> virDomainSnapshotCreateXML()), but this is better than the >> previous state of having to make multiple REDEFINE calls. > > What is the intention behind the assymetry?
virDomainSnapshotGetXMLDesc won't work - you can't pass in NULL because
that function requires a snapshot (in order to get at the virDomain and
virConnection) to even make the call.
On the flip side, I did NOT want virDomainDefine/virDomainCreate to take
the <snapshots> argument, even with the presence of a flag, because
there are scenarios where you want the domain defined before you add in
the snapshots; virDomainSnapshotCreateXML with new flag fit that purpose
well.
I could, however, add a new API instead of a new flag overloading to the
existing API. Naming is hard, maybe:
virDomainGetSnapshotsXMLDesc
since it would be a new virDomain function, but returns the new
<snapshots> XML element.
>
> It feels odd to request the list by a flag to virDomainGetXMLDesc
> (because we're not going to reuse the whole <domain>, just the
> <snapshots> sub-element here). Having a counterpart to the API doing the
> redefine would only mean two calls (GetXMLDesc, GetSnapshots) instead of
> getting every snapshot separately.
One call (virDomainGetXMLDesc with flag) is even better than two
(virDomainGetXMLDesc, virDomainGetSnapshotsXMLDesc), but a new API has
the benefit of not suffering from the recently-fixed bug about unknown
new flags being rejected by buggy old servers.
>
> Also, virDomainSnapshotCreateXML is designed for a single snapshot,
> using a flag to turn it into a different API
> ('virDomainSnapshotsCreateXML'?
> 'virDomainSnapshotsRedefine'?) leads to strangeness like returning
> a single snapshot while making no guarantees on which one it is
> or a repetition of this pattern:
> if (flags & REDEFINE_LIST) {
> /* ... */
> goto cleanup; /* <- no fallthrough here */
> }
If I add a new API for getting the XML, then it is not a stretch to
require a new API for redefining all snapshots at once. And now that
I've typed this up, the suggestion for a separate API is starting to be
more appealing.
Looks like I'll be posting a v4 shortly.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
