[libvirt] [RFC]: Snapshot API

Daniel Veillard veillard at redhat.com
Wed Mar 24 09:51:40 UTC 2010

On Tue, Mar 23, 2010 at 07:35:22PM +0100, Matthias Bolte wrote:
> 2010/3/23 Chris Lalancette <clalance at redhat.com>:
> > /* 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?

  Yeah that would be a bit nicer, not fundamental though :-)

> >
> > /* Get the names of all snapshots for this domain */
> > int virDomainListSnapshotNames(virDomainPtr domain, char **names, int nameslen,
> >                               unsigned int flags);
> >
> > /* Get a handle to a named snapshot */
> > virDomainSnapshotPtr virDomainSnapshotLookupByName(virDomainPtr domain,
> >                                                   const char *name,
> >                                                   unsigned int flags);
> >
> > /* Set this snapshot as the current one for a domain, to be
> >  * used next time domain is started */
> > int virDomainSnapshotActivate(virDomainSnapshotPtr snapshot,
> >                              unsigned int flags);
> This delayed semantic cannot be implemented for ESX. ESX can revert to
> a snapshot immediately only. I think the same holds true for
> VirtualBox.
> Maybe I misunterstand this. What should happen if you call activate on
> a running domain?

  I guess we really need to use the flags there, and check for the flag
semantic in the driver.
  In ESX we will need a VIR_DOMAIN_SNAPSHOT_ACTIVATE_NOW flag to be passed
  In QEmu we will need a VIR_DOMAIN_SNAPSHOT_ACTIVATE_RESTART to be passed

 Or we split that as two different entry points as the semantic is
fairly different. This may be a bit cleaner, for example if you think of
a virsh command,
  virsh snap_activate --now foo snap1
  virsh snap_activate --restart foo snap1

where the command without flags would be rejected because there is no
common semantic, versus something like

  virsh snap_use foo snap1
  virsh snap_restart foo snap1

where using snap_use on qemu would raise a unsupported or snap_restart
on ESX.

  Semantic is so different, we can't use it without some flags or
  virsh snap_activate foo snap1
fail while
  virsh snap_activate --restart foo snap1
would work, that's disturbing.

  So I really think we need 2 different entry point



for example (and still with flags)

> > int virDomainSnapshotFree(virDomainSnapshotPtr snapshot);

  Shouldn't we add something like virDomainSnapshotDestroy() too
assuming the semantic of Free is just to discard the libvirt object
but not remove the actual data.


Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/

More information about the libvir-list mailing list