[libvirt] [RFC PATCH 5/8] Snapshot QEMU driver.
Matthias Bolte
matthias.bolte at googlemail.com
Fri Apr 2 13:25:40 UTC 2010
2010/4/2 Chris Lalancette <clalance at redhat.com>:
> Signed-off-by: Chris Lalancette <clalance at redhat.com>
> ---
> src/qemu/qemu_conf.c | 9 +-
> src/qemu/qemu_conf.h | 4 +-
> src/qemu/qemu_driver.c | 757 ++++++++++++++++++++++++++++++++++++++++-
> src/qemu/qemu_monitor.c | 39 +++
> src/qemu/qemu_monitor.h | 4 +
> src/qemu/qemu_monitor_json.c | 24 ++
> src/qemu/qemu_monitor_json.h | 4 +
> src/qemu/qemu_monitor_text.c | 126 +++++++
> src/qemu/qemu_monitor_text.h | 4 +
> tests/qemuxml2argvtest.c | 2 +-
> 10 files changed, 951 insertions(+), 22 deletions(-)
>
> diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
> index 5d0b211..1ebb29a 100644
> --- a/src/qemu/qemu_conf.c
> +++ b/src/qemu/qemu_conf.c
> +
> +static int qemuDomainSnapshotWriteSnapshotMetadata(virDomainObjPtr vm,
> + virDomainSnapshotDefPtr def,
> + char *snapshotDir)
> +{
> + int fd = -1;
> + char *newxml = NULL;
> + int ret = -1;
> + char *snapDir = NULL;
> + char *snapFile = NULL;
> + int err;
> + char uuidstr[VIR_UUID_STRING_BUFLEN];
> +
> + virUUIDFormat(vm->def->uuid, uuidstr);
> + newxml = virDomainSnapshotDefFormat(uuidstr, def);
> + if (newxml == NULL) {
> + virReportOOMError();
> + return -1;
> + }
> +
> + if (virAsprintf(&snapDir, "%s/%s", snapshotDir, vm->def->name) < 0) {
> + virReportOOMError();
> + goto cleanup;
> + }
> + err = virFileMakePath(snapDir);
> + if (err < 0) {
> + virReportSystemError(err, _("cannot create snapshot directory '%s'"),
> + snapDir);
> + goto cleanup;
> + }
> +
> + if (virAsprintf(&snapFile, "%s/%s.snap", snapDir, def->name) < 0) {
Maybe use .xml instead of .snap, because the file will contain XML.
> + virReportOOMError();
> + goto cleanup;
> + }
> + fd = open(snapFile, O_CREAT|O_TRUNC|O_WRONLY, S_IRUSR|S_IWUSR);
> + if (fd < 0) {
> + qemuReportError(VIR_ERR_OPERATION_FAILED,
> + _("failed to create snapshot file '%s'"), snapFile);
> + goto cleanup;
> + }
> + if (safewrite(fd, newxml, strlen(newxml)) != strlen(newxml)) {
> + virReportSystemError(errno, _("Failed to write snapshot data to %s"),
> + snapFile);
> + goto cleanup;
> + }
> +
> + ret = 0;
> +
> +cleanup:
> + VIR_FREE(snapFile);
> + VIR_FREE(snapDir);
> + VIR_FREE(newxml);
> + if (fd != -1)
> + close(fd);
> + return ret;
> +}
> +
ACK.
Matthias
More information about the libvir-list
mailing list