[libvirt] [PATCH] Compressed save image format for Qemu.
Daniel P. Berrange
berrange at redhat.com
Tue Aug 11 10:06:49 UTC 2009
On Fri, Aug 07, 2009 at 03:56:29PM +0200, Chris Lalancette wrote:
> diff --git a/src/qemu_driver.c b/src/qemu_driver.c
> index 3c92635..b146330 100644
> --- a/src/qemu_driver.c
> +++ b/src/qemu_driver.c
Is part of the change missing ? Nothing is added
the 'compressed' field to the struct qemud_save_header
that appears just before qemudDomainSave(), nor incrementing
the save version to '2'.
> @@ -3437,11 +3437,26 @@ static int qemudDomainSave(virDomainPtr dom,
> struct qemud_save_header header;
> int ret = -1;
> virDomainEventPtr event = NULL;
> + int internalret;
>
> memset(&header, 0, sizeof(header));
> memcpy(header.magic, QEMUD_SAVE_MAGIC, sizeof(header.magic));
> header.version = QEMUD_SAVE_VERSION;
>
> + if (driver->saveImageFormat == NULL)
> + header.compressed = QEMUD_SAVE_FORMAT_RAW;
> + else if (STREQ(driver->saveImageFormat, "raw"))
> + header.compressed = QEMUD_SAVE_FORMAT_RAW;
> + else if (STREQ(driver->saveImageFormat, "gzip"))
> + header.compressed = QEMUD_SAVE_FORMAT_GZIP;
> + else if (STREQ(driver->saveImageFormat, "bzip2"))
> + header.compressed = QEMUD_SAVE_FORMAT_BZIP2;
> + else {
> + qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
> + "%s", _("Invalid save image format specified in configuration file"));
> + return -1;
> + }
> +
> qemuDriverLock(driver);
> vm = virDomainFindByUUID(&driver->domains, dom->uuid);
>
> @@ -3514,11 +3529,25 @@ static int qemudDomainSave(virDomainPtr dom,
> virReportOOMError(dom->conn);
> goto cleanup;
> }
> - if (virAsprintf(&command, "migrate \"exec:"
> - "dd of='%s' oflag=append conv=notrunc 2>/dev/null"
> - "\"", safe_path) == -1) {
> +
> + if (header.compressed == QEMUD_SAVE_FORMAT_RAW)
> + internalret = virAsprintf(&command, "migrate \"exec:"
> + "dd of='%s' oflag=append conv=notrunc 2>/dev/null"
> + "\"", safe_path);
> + else if (header.compressed == QEMUD_SAVE_FORMAT_GZIP)
> + internalret = virAsprintf(&command, "migrate \"exec:"
> + "gzip -c >> '%s' 2>/dev/null\"", safe_path);
> + else if (header.compressed == QEMUD_SAVE_FORMAT_BZIP2)
> + internalret = virAsprintf(&command, "migrate \"exec:"
> + "bzip2 -c >> '%s' 2>/dev/null\"", safe_path);
> + else {
> + qemudReportError(dom->conn, dom, NULL, VIR_ERR_INTERNAL_ERROR,
> + _("Invalid compress format %d"),
> + header.compressed);
> + goto cleanup;
> + }
> + if (internalret < 0) {
> virReportOOMError(dom->conn);
> - command = NULL;
> goto cleanup;
> }
>
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.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