The regular save image code has the support to compress images using a
specified algorithm. This was not implemented for managed save although
it shares most of the backend code.
---
src/qemu/qemu.conf | 6 +++---
src/qemu/qemu_driver.c | 23 +++++++++++++++++++++--
2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/src/qemu/qemu.conf b/src/qemu/qemu.conf
index 5fd6263..cf82ffe 100644
--- a/src/qemu/qemu.conf
+++ b/src/qemu/qemu.conf
@@ -269,9 +269,9 @@
# saving a domain in order to save disk space; the list above is in descending
# order by performance and ascending order by compression ratio.
#
-# save_image_format is used when you use 'virsh save' at scheduled
-# saving, and it is an error if the specified save_image_format is
-# not valid, or the requested compression program can't be found.
+# save_image_format is used when you use 'virsh save' or 'virsh
managedsave'
+# at scheduled saving, and it is an error if the specified save_image_format
+# is not valid, or the requested compression program can't be found.
#
# dump_image_format is used when you use 'virsh dump' at emergency
# crashdump, and if the specified dump_image_format is not valid, or
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index cfdbb9a..6f15240 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -3232,6 +3232,8 @@ static int
qemuDomainManagedSave(virDomainPtr dom, unsigned int flags)
{
virQEMUDriverPtr driver = dom->conn->privateData;
+ virQEMUDriverConfigPtr cfg = NULL;
+ int compressed = QEMU_SAVE_FORMAT_RAW;
virDomainObjPtr vm;
char *name = NULL;
int ret = -1;
@@ -3257,13 +3259,29 @@ qemuDomainManagedSave(virDomainPtr dom, unsigned int flags)
goto cleanup;
}
+ cfg = virQEMUDriverGetConfig(driver);
+ if (cfg->saveImageFormat) {
+ compressed = qemuSaveCompressionTypeFromString(cfg->saveImageFormat);
+ if (compressed < 0) {
+ virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+ _("Invalid save image format specified "
+ "in configuration file"));
+ goto cleanup;
+ }
+ if (!qemuCompressProgramAvailable(compressed)) {
+ virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+ _("Compression program for image format "
+ "in configuration file isn't available"));
+ goto cleanup;
+ }
+ }
+
if (!(name = qemuDomainManagedSavePath(driver, vm)))
goto cleanup;
VIR_INFO("Saving state of domain '%s' to '%s'",
vm->def->name, name);
- if ((ret = qemuDomainSaveInternal(driver, dom, vm, name,
- QEMU_SAVE_FORMAT_RAW,
+ if ((ret = qemuDomainSaveInternal(driver, dom, vm, name, compressed,
NULL, flags)) == 0)
vm->hasManagedSave = true;
@@ -3273,6 +3291,7 @@ cleanup:
if (vm)
virObjectUnlock(vm);
VIR_FREE(name);
+ virObjectUnref(cfg);
return ret;
}
--
1.8.3.2