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

[libvirt] [PATCH 2/2] add --live support to "virsh dump"



This is trivial for QEMU since you just have to not stop the vm before
starting the dump.

In Xen it is buggy, so I chose to not support it.

* src/qemu/qemu_driver.c (qemudDomainCoreDump): Support live dumping.
---
 include/libvirt/libvirt.h.in |    1 +
 src/qemu/qemu_driver.c       |    7 +++----
 tools/virsh.c                |    3 +++
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index c04b552..b4a7ef1 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -337,6 +337,7 @@ typedef virDomainInterfaceStatsStruct *virDomainInterfaceStatsPtr;
 /* Domain core dump flags. */
 typedef enum {
     VIR_DUMP_CRASH   = (1 << 0), /* crash after dump */
+    VIR_DUMP_LIVE    = (1 << 1), /* live dump */
 } virDomainCoreDumpFlags;
 
 /* Domain migration flags. */
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 8e80144..7de3c45 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -3597,15 +3597,14 @@ static int qemudDomainCoreDump(virDomainPtr dom,
         driver->securityDriver->domainSetSavedStateLabel(dom->conn, vm, path) == -1)
         goto endjob;
 
-    /* Migrate will always stop the VM, so once we support live dumping
-       the resume condition will stay the same, independent of whether
-       the stop command is issued.  */
+    /* Migrate will always stop the VM, so the resume condition is
+       independent of whether the stop command is issued.  */
     resume = (vm->state == VIR_DOMAIN_RUNNING);
 
     qemuDomainObjPrivatePtr priv = vm->privateData;
 
     /* Pause domain for non-live dump */
-    if (vm->state == VIR_DOMAIN_RUNNING) {
+    if (!(flags & VIR_DUMP_LIVE) && vm->state == VIR_DOMAIN_RUNNING) {
         qemuDomainObjEnterMonitor(vm);
         if (qemuMonitorStopCPUs(priv->mon) < 0) {
             qemuDomainObjExitMonitor(vm);
diff --git a/tools/virsh.c b/tools/virsh.c
index 65eaa3b..fcbd4e6 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -1431,6 +1431,7 @@ static const vshCmdInfo info_dump[] = {
 };
 
 static const vshCmdOptDef opts_dump[] = {
+    {"live", VSH_OT_BOOL, 0, gettext_noop("perform a live core dump if supported")},
     {"crash", VSH_OT_BOOL, 0, gettext_noop("crash the domain after core dump")},
     {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("domain name, id or uuid")},
     {"file", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("where to dump the core")},
@@ -1455,6 +1456,8 @@ cmdDump(vshControl *ctl, const vshCmd *cmd)
     if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
         return FALSE;
 
+    if (vshCommandOptBool (cmd, "live"))
+        flags |= VIR_DUMP_LIVE;
     if (vshCommandOptBool (cmd, "crash"))
         flags |= VIR_DUMP_CRASH;
 
-- 
1.6.5.2


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