|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC V5 2/5] Libxl Domain Snapshot API Design
Libxl Domain Snapshot API Design
1. New Structures
Domain snapshot introduces two new structures:
- "libxl_domain_snapshot" store domain snapshot information, it contains
libxl_disk_snapshot array.
- "libxl_disk_snapshot" stores disk snapshot related information.
Both are defined in libxl_types.idl, which will generate the following
libxl-json helper functions:
char *libxl_domain_snapshot_to_json(libxl_ctx *ctx,
libxl_domain_snapshot *p);
int libxl_domain_snapshot_from_json(libxl_ctx *ctx,
libxl_domain_snapshot *p, const char
*s);
char *libxl_disk_snapshot_to_json(libxl_ctx *ctx,
libxl_disk_snapshot *p);
int libxl_disk_snapshot_from_json(libxl_ctx *ctx,
libxl_disk_snapshot *p, const char *s);
These functions will be used internally, and are very userful when
load/store
domain snapshot configuration file (libxl-json format).
Struct Details:
libxl_disk_snapshot = Struct("disk_snapshot",[
("device", string), /* The name of disk: hda, hdc */
("name", string), /* The name of disk snapshot.
* Usually it is inherited from
* libxl_domain_snapshot.
*/
("file", string), /* The new disk file after
* external snapshot. empty for
* internal snapshot.
*/
("format", libxl_disk_format), /* The format of external
* snapshot file. For the
* internal snapshot, it's
* ignored and it should be
* LIBXL_DISK_FORMAT_UNKNOWN
*/
("path", string), /* The path of current disk
* backend. It gets from
* libxl_device_disk_getinfo.
* It will be force-empty when
* store domain snapshot
* configuration in order to
* hide this from users.
*/
])
libxl_domain_snapshot = Struct("domain_snapshot",[
("name", string), /* The name of the domain
* snapshot. It should not be
* empty.
*/
("description", string), /* The description of snapshot.
* It could be empty.
*/
("creation_time", uint64), /* The creation time of domain
* snapshot which is the epoch
* second from 1, Jan 1970.
*/
("memory", string), /* The path to save domain
* memory image. 'empty' means
* it is a disk-only snapshot.
* note that "yes" or "no" is
* not allowed, this is
different
* from xl.snapshot.pod.5
*/
/* Following state represents the domain state in the beginning of
snapshot.
* These state gets from libxl_domain_info.
*/
("running", bool),
("blocked", bool),
("paused", bool),
("shutdown", bool),
("dying", bool),
/* The array of disk snapshot information belong to this domain
snapshot. */
("disks", Array(libxl_disk_snapshot, "num_disks")),
])
2. New Functions
2.1 Management functions for domain snapshot config file (libxl-json format).
/* There are two type of config file relative to domain snapshot: user
* config file and internal domain snapshot configuration file(libxl-json
* format). The relation of the two config files are like xl.cfg and
* libxl-json for domain configuration.
* The user visiable config file (KEY=VALUE format) is only used for
* creation. The internal domain snapshot config file is located at
* "/var/lib/xen/snapshots/<domain_uuid>"\
* snapshotdata-<snapshot_name>.libxl-json". This file is only for internal
* usage, not for users. user should not modify the libxl-json format file.
*
* Currently, libvirt use XML format snapshot configuration file for user
* both input(snapshot create) and output(snapshot-dumpxml). And libvirt
* qemu driver store with xml format as internal usage as well.
* For libxl, if libxl hope it is easy to migrate domain between different
* toolstack, then all the toolstack should use the same internal config
* file: libxl-json format. it will not affect the user experience. e.g. xl
* will use the KEY=VALUE format while libvirt will use the xml format.
*/
/*
* function: To retrieve domain snapshot configuration file contents from
* "/var/lib/xen/snapshots/<domain_uuid>/"snapshotdata-\
* <snapshot->name>.libxl-json", and store the information
* to @snapshot.
* @domid: The domain id. It is used to get the uuid of domain.
* @snapshot: The caller should provide valid @snapshot->name. On return,
* @snapshot will hold the domain snapshot information retrieved
* from the file.
* return value:
* 0: success
* <0: fail. Config file doesn't exist or the file format is
wrong.
*/
int libxl_load_dom_snapshot_conf(libxl_ctx *ctx, uint32_t domid,
libxl_domain_snapshot *snapshot);
/*
* function: To convert @snapshot to libxl-json format, and save at
* /var/lib/xen/snapshots/<domain_uuid>/"snapshotdata-\
* <snapshot->name>.libxl-json"
* @domid: The domain id. It is used to get the uuid of domain.
* @snapshot: @snapshot->name should be valid name in the caller's file
* system. Other strings in this strcut should not be NULL. For
* the empty item the caller should set as "".
* return value:
* 0: successful
* ERROR_INVAL: snapshot name is empty
* <0: fail. snapshot information invalid or write file fail.
*/
int libxl_store_dom_snapshot_conf(libxl_ctx *ctx, uint32_t domid,
libxl_domain_snapshot *snapshot);
/*
* function: To delete configuration file of indicated domain snapshot:
* /var/lib/xen/snapshots/<domain_uuid>/"snapshotdata-\
* <snapshot->name>.libxl-json"
* @domid: The domain id. It is used to get the uuid of domain.
* @snapshot: The caller should provide valid @snapshot->name. other value
* of this struct is ignored in this function.
* return value:
* 0: successful
* <0: fail. file delete fail.
*/
int libxl_delete_dom_snapshot_conf(libxl_ctx *ctx, uint32_t domid,
libxl_domain_snapshot *snapshot);
/*
* function: To retrieve all snapshot info of the speicfic domain from
* /var/lib/xen/snapshots/<domain_uuid>", and return the
* result to @libxl_domain_snapshot array. Put number of
* snapshot(s) to @num. The caller is responsible for free
* the libxl_domain_snapshot array.
* This is useful when toolstack want to get all the snapshot
* information relative to the specific domain. e.g. xl
* snapshot-list or libvirt libxl driver load/reload.
* @domid: domain id. will get domain_uuid from domid.
* @num: hold the number of snapshot(s) as part of the return result.
* return value:
* NULL: no valid snapshot configuration for such domain.
* non-NULL: successful
*/
libxl_domain_snapshot *
libxl_list_dom_snapshot(libxl_ctx *ctx, uint32_t domid, int *num);
2.2 functions for disk snapshot operations
/*
* function: To create disk(s) snapshot according to config in @snapshot
* array. Disk (one or more) snapshot in this operation is
* handled by qmp transaction. The transaction operation ensures
* that all disks are consistent. This function is used in
* 'domain snapshot create'.
* @domid: domain id
* @snapshot: array of disk snapshot
* @num: number of disk snapshot struct in above array
* return value:
* 0: successful
* <0: fail
*/
int libxl_disk_snapshot_create(libxl_ctx *ctx, int domid,
libxl_disk_snapshot *snapshot, int num);
/*
* function: To delete disk snapshot according to the config in @snapshot
* array. Only the internal snapshot is supported currently. It
* will call blockdev-snapshot-delete-internal-sync qmp
* command for each disk snapshot delete operation.
* @domid: domain id
* @snapshot: array of disk snapshot
* @num: number of disk snapshot struct in above array
* return value:
* 0: successful
* <0: fail.
*/
int libxl_disk_snapshot_delete(libxl_ctx *ctx, int domid,
libxl_disk_snapshot *snapshot, int num);
/*
* function: To revert the disk snapshot state according to @snapshot
* array. Since there is no qmp command to use and we cannot
* re-send paramters to inform it about the snapshot
* info when qemu running, so we will call "qemu-img snapshot\
* -a snapshot_name" to do revert operation. (better ideas??)
* @domid: domain id
* @snapshot: array of disk snapshot
* @num: number of disk snapshot struct in above array
* return value:
* 0: successful
* <0: fail
*/
int libxl_disk_snapshot_revert(libxl_ctx *ctx, int domid,
libxl_disk_snapshot *snapshot, int num);
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |