[libvirt] [PATCH 4/5] save domain status during vm creation and remove it on shutdown.

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

 



This patch does the actual saving and removal of the vm status. It does
so only at vm creation time at the moment. We need to update the config
every time the life config changes later.

---
 src/qemu_driver.c |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 7804094..d8b87e4 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -182,6 +182,44 @@ qemudAutostartConfigs(struct qemud_driver *driver) {
     virConnectClose(conn);
 }
 
+
+/**
+ * qemudRemoveDomainStatus
+ *
+ * remove all state files of a domain from statedir
+ *
+ * Returns 0 on success
+ */
+static int
+qemudRemoveDomainStatus(virConnectPtr conn,
+                        struct qemud_driver *driver,
+                        virDomainObjPtr vm) 
+{
+    int rc = -1;
+    char *file = NULL;
+
+    if (asprintf(&file, "%s/%s.xml", driver->stateDir, vm->def->name) < 0) {
+        qemudReportError(conn, vm, NULL, VIR_ERR_NO_MEMORY,
+                         "%s", _("failed to allocate space for status file"));
+        goto cleanup;
+    }
+
+    if (unlink(file) < 0 && errno != ENOENT && errno != ENOTDIR) {
+        qemudReportError(conn, vm, NULL, VIR_ERR_INTERNAL_ERROR,
+                         _("Failed to unlink status file %s"), file);
+        goto cleanup;
+    }
+
+    if(virFileDeletePid(driver->stateDir, vm->def->name))
+        goto cleanup;
+
+    rc = 0;
+cleanup:
+    VIR_FREE(file);
+    return rc;
+}
+
+
 /**
  * qemudStartup:
  *
@@ -532,6 +570,12 @@ static int qemudOpenMonitor(virConnectPtr conn,
                                  qemudCheckMonitorPrompt,
                                  "monitor", 10000);
 
+    if (!(vm->monitorpath = strdup(monitor))) {
+        qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY,
+                         "%s", _("failed to allocate space for monitor path"));
+        goto error;
+    }
+
     /* Keep monitor open upon success */
     if (ret == 0)
         return ret;
@@ -1046,6 +1090,7 @@ static int qemudStartVMDaemon(virConnectPtr conn,
             return -1;
         }
     }
+    qemudSaveDomainStatus(conn, qemu_driver, vm);
 
     return ret;
 }
@@ -1108,6 +1153,7 @@ static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,
 
     /* shut it off for sure */
     kill(vm->pid, SIGKILL);
+    qemudRemoveDomainStatus(conn, driver, vm);
 
     vm->pid = -1;
     vm->def->id = -1;
-- 
1.6.0.2

--
Libvir-list mailing list
Libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[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]