[libvirt] [RFC]: Snapshot API
Daniel P. Berrange
berrange at redhat.com
Wed Mar 24 11:02:54 UTC 2010
On Wed, Mar 24, 2010 at 09:52:51AM +0100, Paolo Bonzini wrote:
> >> > /* Return the number of snapshots for this domain */
> >> > int virDomainSnapshotNum(virDomainPtr domain, unsigned int flags);
> >>
> >> Shouldn't this be called virDomainNumOfSnapshots to be consistent with
> >> the naming or other num-of functions?
> >
> >Gah. I struggled with this; I like the fact that all of the rest of them
> >start with virDomainSnapshot; this one doesn't fit the mold. I don't care
> >too much either way.
>
> virDomain*Snapshots for APIs that take a virDomainPtr seems consistent too.
>
> >> > /* Deactivate a snapshot - with no flags, the snapshot is not used
> >anymore,
> >> > * but also not removed. With a MERGE flag, it merges the snapshot
> >into
> >> > * the base image. With a DISCARD flag, it deletes the snapshot.
> >MERGE
> >> > * and DISCARD are mutually-exclusive. Note that this operation can
> >> > * generally only happen when the domain is shut down, though this is
> >> > * hypervisor-specific */
> >> > typedef enum {
> >> > VIR_DOMAIN_SNAPSHOT_DEACTIVATE_MERGE,
> >> > VIR_DOMAIN_SNAPSHOT_DEACTIVATE_DISCARD,
> >> > } virDomainSnapshotDeactivate;
> >> > int virDomainSnapshotDeactivate(virDomainSnapshotPtr snapshot,
> >> > unsigned int flags);
> >>
> >> I'm not sure if virDomainSnapshotDeactivate is a good name.
> >
> >I agree it's not a great name. I didn't like Dan's original
> >proposal of "virDomainSnapshotDelete", though, since it doesn't
> >exactly seem to fit the situation either. Any more suggestions for
> >a name?
>
> Several things are not clear about this API to me too. :-)
>
> 1) Would discarding also discard all the snapshots depending on the
> discarded one. If so, what about a --force flag that you need to pass
> if the delete operation would delete other snapshots recursively?
Yes, if there were children of this snapshot they would be killed.
Agreed, that we could use a flag to allow that behaviour to be controlled,
either refusing to discard children, or forcing discard.
> 2) Likewise, merging would invalidate all the other snapshots depending
> on the base image (and discard them). The same --force option then
> could apply as well.
It would only discard snapshots depending on the snapshot being merge
onto, eg in
+-> F
|
A -> B -> C -> D
|
+-> G
If you merged D onto C, then A, B, F & G would all still be valid:
+-> F
|
A -> B -> C
|
+-> G
If you merged C onto B, then F & G would be invalid, but D would
still be valid
A -> B ------> D
> However, I think there is a fundamental difference between the two
> cases; only one of them modifies the base image I'm not sure that
> something that modifies the base image rightfully belongs into the
> virDomainSnapshot* namespace. So my proposal would be
>
> /* Start using the base image again. If snapshot != NULL, merge
> the given snapshot in the base image again. */
> virDomainDisableSnapshots(virDomainPtr domain,
> virDomainSnapshotPtr snapshot, int flags);
>
> /* Discard the given snapshot and, if --force is given, all that
> depend on it. Fail if it is active. */
> virDomainSnapshotDiscard(virDomainSnapshotPtr snapshot, int flags);
I don't see any need to special case the base image here. The main
virDOmainSnapshotDelete() API already lets you discard all snapshots
until you get to the base image - VMWare/VirtualBox already demonstrate
this is sufficient.
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list