]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: add implementation for virDomainSaveParams API
authorClaudio Fontana <cfontana@suse.de>
Fri, 6 May 2022 13:10:59 +0000 (15:10 +0200)
committerDaniel P. Berrangé <berrange@redhat.com>
Fri, 6 May 2022 14:34:30 +0000 (15:34 +0100)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Claudio Fontana <cfontana@suse.de>
src/qemu/qemu_driver.c

index 464c08040962c3802b842ef6d0fedba6893f0f2a..4a747137386a0fb0d47b8e6b80a17dc922f731fd 100644 (file)
@@ -2804,6 +2804,58 @@ qemuDomainSave(virDomainPtr dom, const char *path)
     return qemuDomainSaveFlags(dom, path, NULL, 0);
 }
 
+static int
+qemuDomainSaveParams(virDomainPtr dom,
+                     virTypedParameterPtr params, int nparams,
+                     unsigned int flags)
+{
+    const char *to = NULL;
+    const char *dxml = NULL;
+    virQEMUDriver *driver = dom->conn->privateData;
+    int compressed;
+    g_autoptr(virCommand) compressor = NULL;
+    int ret = -1;
+    virDomainObj *vm = NULL;
+    g_autoptr(virQEMUDriverConfig) cfg = NULL;
+
+    virCheckFlags(VIR_DOMAIN_SAVE_BYPASS_CACHE |
+                  VIR_DOMAIN_SAVE_RUNNING |
+                  VIR_DOMAIN_SAVE_PAUSED, -1);
+
+    if (virTypedParamsValidate(params, nparams,
+                               VIR_SAVE_PARAM_FILE, VIR_TYPED_PARAM_STRING,
+                               VIR_SAVE_PARAM_DXML, VIR_TYPED_PARAM_STRING,
+                               NULL) < 0)
+        return -1;
+
+    if (virTypedParamsGetString(params, nparams, VIR_SAVE_PARAM_FILE, &to) < 0)
+        return -1;
+    if (virTypedParamsGetString(params, nparams, VIR_SAVE_PARAM_DXML, &dxml) < 0)
+        return -1;
+
+    cfg = virQEMUDriverGetConfig(driver);
+    if ((compressed = qemuSaveImageGetCompressionProgram(cfg->saveImageFormat,
+                                                         &compressor,
+                                                         "save", false)) < 0)
+        goto cleanup;
+
+    if (!(vm = qemuDomainObjFromDomain(dom)))
+        goto cleanup;
+
+    if (virDomainSaveParamsEnsureACL(dom->conn, vm->def) < 0)
+        goto cleanup;
+
+    if (virDomainObjCheckActive(vm) < 0)
+        goto cleanup;
+
+    ret = qemuDomainSaveInternal(driver, vm, to, compressed,
+                                 compressor, dxml, flags);
+
+ cleanup:
+    virDomainObjEndAPI(&vm);
+    return ret;
+}
+
 static char *
 qemuDomainManagedSavePath(virQEMUDriver *driver, virDomainObj *vm)
 {
@@ -20829,6 +20881,7 @@ static virHypervisorDriver qemuHypervisorDriver = {
     .domainGetControlInfo = qemuDomainGetControlInfo, /* 0.9.3 */
     .domainSave = qemuDomainSave, /* 0.2.0 */
     .domainSaveFlags = qemuDomainSaveFlags, /* 0.9.4 */
+    .domainSaveParams = qemuDomainSaveParams, /* 8.4.0 */
     .domainRestore = qemuDomainRestore, /* 0.2.0 */
     .domainRestoreFlags = qemuDomainRestoreFlags, /* 0.9.4 */
     .domainSaveImageGetXMLDesc = qemuDomainSaveImageGetXMLDesc, /* 0.9.4 */