[libvirt] [PATCH v7 4/4] allow "virsh dump --memory-only" specify dump format

qiaonuohan at cn.fujitsu.com qiaonuohan at cn.fujitsu.com
Tue Mar 18 07:12:03 UTC 2014


This patch adds "[--compression-format] <string>" to "virsh dump --memory-only",
which is changed to use the new virDomainCoreDumpWithFormat API. And
"--compress" is added as an alias for "--compression-format zlib".

Signed-off-by: Qiao Nuohan <qiaonuohan at cn.fujitsu.com>
---
 tools/virsh-domain.c | 45 ++++++++++++++++++++++++++++++++++++++++++---
 tools/virsh.pod      |  5 +++++
 2 files changed, 47 insertions(+), 3 deletions(-)

diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 1d3c5f0..f7e2226 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -4486,6 +4486,14 @@ static const vshCmdOptDef opts_dump[] = {
      .type = VSH_OT_BOOL,
      .help = N_("dump domain's memory only")
     },
+    {.name = "compress",
+     .type = VSH_OT_ALIAS,
+     .help = "compression-format=zlib",
+    },
+    {.name = "compression-format",
+     .type = VSH_OT_DATA,
+     .help = N_("specify the compression format of kdump-compressed format")
+    },
     {.name = NULL}
 };
 
@@ -4501,6 +4509,8 @@ doDump(void *opaque)
     const char *name = NULL;
     const char *to = NULL;
     unsigned int flags = 0;
+    const char *compression_format = NULL;
+    unsigned int dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_RAW;
 
     sigemptyset(&sigmask);
     sigaddset(&sigmask, SIGINT);
@@ -4524,9 +4534,38 @@ doDump(void *opaque)
     if (vshCommandOptBool(cmd, "memory-only"))
         flags |= VIR_DUMP_MEMORY_ONLY;
 
-    if (virDomainCoreDump(dom, to, flags) < 0) {
-        vshError(ctl, _("Failed to core dump domain %s to %s"), name, to);
-        goto out;
+    if (vshCommandOptBool(cmd, "compression-format")) {
+        if (!(flags & VIR_DUMP_MEMORY_ONLY)) {
+            vshError(ctl, "%s",
+                     _("--compression-format only work with --memory-only"));
+            goto out;
+        }
+
+        if (vshCommandOptString(cmd, "compression-format",
+                                &compression_format)) {
+            if (STREQ(compression_format, "zlib"))
+                dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_ZLIB;
+            else if (STREQ(compression_format, "lzo"))
+                dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_LZO;
+            else if (STREQ(compression_format, "snappy"))
+                dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_SNAPPY;
+            else {
+                vshError(ctl, _("compression format '%s' is not supported, "
+                                "expecting 'zlib', 'lzo' or 'snappy'."),
+                         compression_format);
+                goto out;
+            }
+        }
+
+        if (virDomainCoreDumpWithFormat(dom, to, dumpformat, flags) < 0) {
+            vshError(ctl, _("Failed to core dump domain %s to %s"), name, to);
+            goto out;
+        }
+    } else {
+        if (virDomainCoreDump(dom, to, flags) < 0) {
+            vshError(ctl, _("Failed to core dump domain %s to %s"), name, to);
+            goto out;
+        }
     }
 
     ret = '0';
diff --git a/tools/virsh.pod b/tools/virsh.pod
index cafbb9a..e1d3dc2 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -995,6 +995,7 @@ I<format> argument may be B<xen-xm> or B<xen-sxpr>.
 
 =item B<dump> I<domain> I<corefilepath> [I<--bypass-cache>]
 { [I<--live>] | [I<--crash>] | [I<--reset>] } [I<--verbose>] [I<--memory-only>]
+[I<--compression-format> I<string>]
 
 Dumps the core of a domain to a file for analysis.
 If I<--live> is specified, the domain continues to run until the core
@@ -1008,6 +1009,10 @@ cache, although this may slow down the operation.
 If I<--memory-only> is specified, the file is elf file, and will only
 include domain's memory and cpu common register value. It is very
 useful if the domain uses host devices directly.
+I<--compression-format> I<string> can be used to specify that the
+output file should be in kdump-compressed format using the specified
+compression: zlib, lzo, snappy.
+I<--compress> is an alias for I<--compression-format> I<zlib>.
 
 The progress may be monitored using B<domjobinfo> virsh command and canceled
 with B<domjobabort> command (sent by another virsh instance). Another option
-- 
1.8.5.3




More information about the libvir-list mailing list