[PATCH 2/3] qemu: Move special handling of invalid dump format to only caller

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The 'use_raw_on_fail' logic in qemuSaveImageGetCompressionProgram is only
used by doCoreDump in qemu_driver.c. Move the logic to the single call site
and remove the parameter from qemuSaveImageGetCompressionProgram.

Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxx>
---
 src/qemu/qemu_driver.c    | 29 ++++++++++++++++++++---------
 src/qemu/qemu_saveimage.c | 38 ++++++++++----------------------------
 src/qemu/qemu_saveimage.h |  3 +--
 src/qemu/qemu_snapshot.c  |  2 +-
 4 files changed, 32 insertions(+), 40 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 78bfaa5b3a..0a1bcc0ed5 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -2766,7 +2766,7 @@ qemuDomainManagedSaveHelper(virQEMUDriver *driver,
     cfg = virQEMUDriverGetConfig(driver);
     if ((format = qemuSaveImageGetCompressionProgram(cfg->saveImageFormat,
                                                      &compressor,
-                                                     "save", false)) < 0)
+                                                     "save")) < 0)
         return -1;
 
     path = qemuDomainManagedSavePath(driver, vm);
@@ -2800,7 +2800,7 @@ qemuDomainSaveFlags(virDomainPtr dom, const char *path, const char *dxml,
     cfg = virQEMUDriverGetConfig(driver);
     if ((format = qemuSaveImageGetCompressionProgram(cfg->saveImageFormat,
                                                      &compressor,
-                                                     "save", false)) < 0)
+                                                     "save")) < 0)
         goto cleanup;
 
     if (!(vm = qemuDomainObjFromDomain(dom)))
@@ -2874,7 +2874,7 @@ qemuDomainSaveParams(virDomainPtr dom,
     cfg = virQEMUDriverGetConfig(driver);
     if ((format = qemuSaveImageGetCompressionProgram(cfg->saveImageFormat,
                                                      &compressor,
-                                                     "save", false)) < 0)
+                                                     "save")) < 0)
         goto cleanup;
 
     if (virDomainObjCheckActive(vm) < 0)
@@ -3077,6 +3077,7 @@ doCoreDump(virQEMUDriver *driver,
 {
     int fd = -1;
     int ret = -1;
+    int format = QEMU_SAVE_FORMAT_RAW;
     virFileWrapperFd *wrapperFd = NULL;
     int directFlag = 0;
     bool needUnlink = false;
@@ -3085,13 +3086,23 @@ doCoreDump(virQEMUDriver *driver,
     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
     g_autoptr(virCommand) compressor = NULL;
 
+    if (cfg->dumpImageFormat) {
+        if ((format = qemuSaveFormatTypeFromString(cfg->dumpImageFormat)) < 0) {
+            VIR_WARN("Invalid dump image format specified in configuration file, using raw");
+            format = QEMU_SAVE_FORMAT_RAW;
+        }
+    }
+
     /* We reuse "save" flag for "dump" here. Then, we can support the same
-     * format in "save" and "dump". This path doesn't need the compression
-     * program to exist and can ignore the return value - it only cares to
-     * get the compressor */
-    ignore_value(qemuSaveImageGetCompressionProgram(cfg->dumpImageFormat,
-                                                    &compressor,
-                                                    "dump", true));
+     * format in "save" and "dump". If the compression program doesn't exist,
+     * reset any errors and continue on using the raw format.
+     */
+    if (qemuSaveImageGetCompressionProgram(cfg->dumpImageFormat,
+                                           &compressor, "dump") < 0) {
+        virResetLastError();
+        VIR_WARN("Compression program for dump image format in "
+                 "configuration file isn't available, using raw");
+    }
 
     /* Create an empty file with appropriate ownership.  */
     if (dump_flags & VIR_DUMP_BYPASS_CACHE) {
diff --git a/src/qemu/qemu_saveimage.c b/src/qemu/qemu_saveimage.c
index 403e4c9679..eea35df175 100644
--- a/src/qemu/qemu_saveimage.c
+++ b/src/qemu/qemu_saveimage.c
@@ -513,10 +513,6 @@ qemuSaveImageCreate(virQEMUDriver *driver,
  * @compresspath: Pointer to a character string to store the fully qualified
  *                path from virFindFileInPath.
  * @styleFormat: String representing the style of format (dump, save, snapshot)
- * @use_raw_on_fail: Boolean indicating how to handle the error path. For
- *                   callers that are OK with invalid data or inability to
- *                   find the compression program, just return a raw format
- *                   and let the path remain as NULL.
  *
  * Returns:
  *    virQEMUSaveFormat    - Integer representation of the save image
@@ -529,8 +525,7 @@ qemuSaveImageCreate(virQEMUDriver *driver,
 int
 qemuSaveImageGetCompressionProgram(const char *imageFormat,
                                    virCommand **compressor,
-                                   const char *styleFormat,
-                                   bool use_raw_on_fail)
+                                   const char *styleFormat)
 {
     int ret;
     const char *prog;
@@ -549,6 +544,7 @@ qemuSaveImageGetCompressionProgram(const char *imageFormat,
     if (!(prog = virFindFileInPath(imageFormat)))
         goto error;
 
+
     *compressor = virCommandNew(prog);
     virCommandAddArg(*compressor, "-c");
     if (ret == QEMU_SAVE_FORMAT_XZ)
@@ -558,31 +554,17 @@ qemuSaveImageGetCompressionProgram(const char *imageFormat,
 
  error:
     if (ret < 0) {
-        if (use_raw_on_fail)
-            VIR_WARN("Invalid %s image format specified in "
-                     "configuration file, using raw",
-                     styleFormat);
-        else
-            virReportError(VIR_ERR_OPERATION_FAILED,
-                           _("Invalid %1$s image format specified in configuration file"),
-                           styleFormat);
+        ret = QEMU_SAVE_FORMAT_RAW;
+        virReportError(VIR_ERR_OPERATION_FAILED,
+                       _("Invalid %1$s image format specified in configuration file"),
+                       styleFormat);
     } else {
-        if (use_raw_on_fail)
-            VIR_WARN("Compression program for %s image format in "
-                     "configuration file isn't available, using raw",
-                     styleFormat);
-        else
-            virReportError(VIR_ERR_OPERATION_FAILED,
-                           _("Compression program for %1$s image format in configuration file isn't available"),
-                           styleFormat);
+        virReportError(VIR_ERR_OPERATION_FAILED,
+                       _("Compression program for %1$s image format in configuration file isn't available"),
+                       styleFormat);
     }
 
-    /* Use "raw" as the format if the specified format is not valid,
-     * or the compress program is not available. */
-    if (use_raw_on_fail)
-        return QEMU_SAVE_FORMAT_RAW;
-
-    return -1;
+    return ret;
 }
 
 
diff --git a/src/qemu/qemu_saveimage.h b/src/qemu/qemu_saveimage.h
index 8e755e1eb5..aa905768de 100644
--- a/src/qemu/qemu_saveimage.h
+++ b/src/qemu/qemu_saveimage.h
@@ -112,8 +112,7 @@ qemuSaveImageOpen(virQEMUDriver *driver,
 int
 qemuSaveImageGetCompressionProgram(const char *imageFormat,
                                    virCommand **compressor,
-                                   const char *styleFormat,
-                                   bool use_raw_on_fail)
+                                   const char *styleFormat)
     ATTRIBUTE_NONNULL(2);
 
 int
diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
index ed140dd41c..4ff7e09bd4 100644
--- a/src/qemu/qemu_snapshot.c
+++ b/src/qemu/qemu_snapshot.c
@@ -1658,7 +1658,7 @@ qemuSnapshotCreateActiveExternal(virQEMUDriver *driver,
 
         if ((format = qemuSaveImageGetCompressionProgram(cfg->snapshotImageFormat,
                                                          &compressor,
-                                                         "snapshot", false)) < 0)
+                                                         "snapshot")) < 0)
             goto cleanup;
 
         if (!(xml = qemuDomainDefFormatLive(driver, priv->qemuCaps,
-- 
2.43.0



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux