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

[libvirt] [PATCH] managedsave: prohibit use on transient domains



Transient domains reject attempts to set autostart, and using
virDomainCreate to restart a domain only works on persistent
domains.  Therefore, managed save makes no sense on transient
domains, and should be rejected up front rather than creating
an otherwise unrecoverable managed save file.

* src/libvirt.c: Document that transient domains are incompatible
with managed save.
* src/qemu/qemu_driver.c (qemuDomainManagedSave): Enforce it.
* src/libxl/libxl_driver.c (libxlDomainManagedSave): Likewise.
---

As evidence to my bias towards prohibiting managed save on
transient domains...

 src/libvirt.c            |    3 +++
 src/libxl/libxl_driver.c |    5 +++++
 src/qemu/qemu_driver.c   |    5 +++++
 3 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/src/libvirt.c b/src/libvirt.c
index c154c7d..c8af3e1 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -15285,6 +15285,9 @@ error:
  * the saved state itself, and will reuse it once the domain is being
  * restarted (automatically or via an explicit libvirt call).
  * As a result any running domain is sure to not have a managed saved image.
+ * This also implies that managed save only works on persistent domains,
+ * since the domain must still exist in order to use virDomainCreate() to
+ * restart it.
  *
  * If @flags includes VIR_DOMAIN_SAVE_BYPASS_CACHE, then libvirt will
  * attempt to bypass the file system cache while creating the file, or
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 7cb3620..516148f 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -2132,6 +2132,11 @@ libxlDomainManagedSave(virDomainPtr dom, unsigned int flags)
         libxlError(VIR_ERR_OPERATION_INVALID, "%s", _("Domain is not running"));
         goto cleanup;
     }
+    if (!vm->persistent) {
+        libxlError(VIR_ERR_OPERATION_INVALID, "%s",
+                   _("cannot do managed save for transient domain"));
+        goto cleanup;
+    }

     name = libxlDomainManagedSavePath(driver, vm);
     if (name == NULL)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index ac323b6..c6c3901 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -2582,6 +2582,11 @@ qemuDomainManagedSave(virDomainPtr dom, unsigned int flags)
                         "%s", _("domain is not running"));
         goto cleanup;
     }
+    if (!vm->persistent) {
+        qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                        _("cannot do managed save for transient domain"));
+        goto cleanup;
+    }

     name = qemuDomainManagedSavePath(driver, vm);
     if (name == NULL)
-- 
1.7.4.4


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