[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