[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC V9 4/4] domain snapshot design: libxl/libxlu
On Tue, Dec 16, 2014 at 02:32:57PM +0800, Chunyan Liu wrote: > Changes to V8: > * remove libxl_domain_snapshot_create/delete/revert API > * export disk snapshot functionality for both xl and libvirt usage > > =========================================================================== > Libxl/libxlu Design > > 1. New Structures > > libxl_disk_snapshot = Struct("disk_snapshot",[ > # target disk > ("disk", libxl_device_disk), > > # disk snapshot name > ("name", string), > > # internal/external disk snapshot? > ("external", bool), > > # for external disk snapshot, specify following two field > ("external_format", string), > ("external_path", string), > ]) > So you don't propose making libxl to have knowledge of the snapshot chains? And in libvirt (or other toolstack that's interested in snapshot management) you represent a snapshot as chains (or trees) of libxl_disk_snapshot? (Not suggesting you do things the other way around, just to confirm) > > 2. New Functions > > Since there're already APIs for saving memory (libxl_domain_suspend) > and restoring domain from saved memory (libxl_domain_create_restore), to > xl domain snapshot tasks, the missing part is disk snapshot functionality. > And the disk snapshot functionality would be used by libvirt too. > > Considering there is qmp handling in creating/deleting disk snapshot, > will add following new functions to libxl (?): > > int libxl_disk_snapshot_create(libxl_ctx *ctx, uint32_t domid, > libxl_disk_snapshot *snapshot, int nb); > > Taking disk snapshots to a group of domain disks according to > configuration. For qcow2 disk backend type, it will call qmp > "transaction" command to do the work. For other disk backend types, > might call other external commands. > > Parameters: > ctx (INPUT): > context > domid (INPUT): > domain id > snapshot (INPUT): > array of disk snapshot configuration. Has "nb" members. > > libxl_device_disk: > structure to represent which disk. > name: > snapshot name. > external: > internal snapshot or external snapshot. > 'false' means internal disk snapshot. external_format and > external_path will be ignored. > 'true' means external disk snapshot, then external_format > and external_path should be provided. > external_format: > Should be provided when 'external' is true. If not provided, > will use default format proper to the backend file. > Ignored when 'external' is false. > external_path: > Must be provided when 'external' is true. > Ignored when 'external' is false. > nb (INPUT): > number of disks that need to take disk snapshot. > > Return: > 0 on success, -1 on error. > It should return appropriate libxl error code (ERROR_*) on error. > > /* This API might not be used by xl, since xl won't take care of deleting > * snapshots. But for libvirt, since libvirt manages snapshots and will > * delete snapshot, this API will be used. > */ > int libxl_disk_snapshot_delete(libxl_ctx *ctx, uint32_t domid, > libxl_disk_snapshot *snapshot, int nb); > > Delete disk snapshot of a group of domain disks according to > configuration. For qcow2 disk backend type, it will call qmp command > to delete internal disk snapshot. For other disk backend types, might > call other external commands. > > Parameters: > ctx (INPUT): > context > domid (INPUT): > domain id > snapshot (INPUT): > array of disk snapshot configuration. Has "nb" members. > nb (INPUT): > number of disks that need to take disk snapshot. > > Return: > 0 on success, -1 on error. > > > int libxl_disk_to_snapshot(libxl_ctx *ctx, uint32_t domid, > libxl_disk_snapshot **snapshot, int *num); > > This is for domain snapshot create. If user doesn't specify disks, > then by default it will take internal disk snapshot to each domain > disk. This function will fill libxl_disk_snapshot according to domain > disks info. > > Parameters: > ctx (INPUT): > context > domid (INPUT): > domain id > snapshot (OUTPUT): > array of disk snapshot configuration. > num (OUTPUT): > number of disks. > > Return: > 0 on success, -1 on error. > > > > For disk snapshot revert, no qmp command for that, it always calls > external commands to finish the work, so put in libxlu (?): > > int xlu_disk_snapshot_revert(libxl_disk_snapshot *snapshot, int nb); > IMHO it's fine for this to be in libxl. Calling out to other programs is fine. Wei. > Apply disk snapshot for a group of disks according to configuration. To > different disk backend types, call different external commands to do > the work. > > Parameters: > snapshot (INPUT): > array of disk snapshot configuration. Has "nb" members. > nb (INPUT): > number of disks that need to take disk snapshot. > > Return: > 0 on success, -1 on error. > > > > 3. Simple Architecture View > > Creating domain snapshot: > (* means new functions we will need in libxl/libxlu) > > "xl snapshot-create" > | > parse configuration ----> libxl_disk_to_snapshot (*) > | > saving memory ----> libxl_domain_suspend > | > taking disk snapshot ----> libxl_disk_snapshot_create (*) > | | > | --> libxl_qmp_disk_snapshot_transaction (*) > | > unpause domain ---->libxl_domain_unpause > | > End > > > Reverting to a snapshot: > (* means new functions we will need in libxl/libxlu) > > "xl snapshot-revert" > | > parse configuration > | > destroy domain ---->libxl_domain_destroy > | > reverting disk snapshot ----> xlu_disk_snapshot_revert (*) > | | > | --> call 'qemu-img' to apply disk snapshot > | > restore domain from saved memory ----> libxl_domain_create_restore > | > End _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |