]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
allow "virsh dump --memory-only" specify dump format
authorQiao Nuohan <qiaonuohan@cn.fujitsu.com>
Sun, 23 Mar 2014 03:51:15 +0000 (11:51 +0800)
committerEric Blake <eblake@redhat.com>
Mon, 24 Mar 2014 20:14:14 +0000 (14:14 -0600)
This patch adds "[--format] <string>" to "virsh dump --memory-only", which is
changed to use the new virDomainCoreDumpWithFormat API.

Signed-off-by: Qiao Nuohan <qiaonuohan@cn.fujitsu.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
tools/virsh-domain.c
tools/virsh.pod

index 06647743415fd840b8138c922ab5003169d1f4da..f2856a5eda9ed9c481987c8c2284a3ed243992f5 100644 (file)
@@ -4490,6 +4490,10 @@ static const vshCmdOptDef opts_dump[] = {
      .type = VSH_OT_BOOL,
      .help = N_("dump domain's memory only")
     },
+    {.name = "format",
+     .type = VSH_OT_DATA,
+     .help = N_("specify the format of memory-only dump")
+    },
     {.name = NULL}
 };
 
@@ -4505,6 +4509,8 @@ doDump(void *opaque)
     const char *name = NULL;
     const char *to = NULL;
     unsigned int flags = 0;
+    const char *format = NULL;
+    unsigned int dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_RAW;
 
     sigemptyset(&sigmask);
     sigaddset(&sigmask, SIGINT);
@@ -4528,9 +4534,40 @@ 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, "format")) {
+        if (!(flags & VIR_DUMP_MEMORY_ONLY)) {
+            vshError(ctl, "%s", _("--format only works with --memory-only"));
+            goto out;
+        }
+
+        if (vshCommandOptString(cmd, "format", &format)) {
+            if (STREQ(format, "kdump-zlib")) {
+                dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_ZLIB;
+            } else if (STREQ(format, "kdump-lzo")) {
+                dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_LZO;
+            } else if (STREQ(format, "kdump-snappy")) {
+                dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_SNAPPY;
+            } else if (STREQ(format, "elf")) {
+                dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_RAW;
+            } else {
+                vshError(ctl, _("format '%s' is not supported, expecting "
+                                "'kdump-zlib', 'kdump-lzo', 'kdump-snappy' "
+                                "or 'elf'"), format);
+                goto out;
+            }
+        }
+    }
+
+    if (dumpformat != VIR_DOMAIN_CORE_DUMP_FORMAT_RAW) {
+        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';
index 4645be5c4606a8db23d1d123b231cfc9daaa8c79..20352cb440d208e6c67964c9407ad11546e1511a 100644 (file)
@@ -1010,6 +1010,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<--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
@@ -1023,6 +1024,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<--format> I<string> is used to specify the format of 'memory-only'
+dump, and I<string> can be one of them: elf, kdump-zlib(kdump-compressed
+format with zlib-compressed), kdump-lzo(kdump-compressed format with
+lzo-compressed), kdump-snappy(kdump-compressed format with snappy-compressed).
 
 The progress may be monitored using B<domjobinfo> virsh command and canceled
 with B<domjobabort> command (sent by another virsh instance). Another option