[libvirt] [PATCH v7 4/4] allow "virsh dump --memory-only" specify dump format
Daniel P. Berrange
berrange at redhat.com
Thu Mar 20 15:10:22 UTC 2014
On Tue, Mar 18, 2014 at 07:12:03AM +0000, qiaonuohan at cn.fujitsu.com wrote:
> 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;
This is missing handling of FORMAT_RAW, and if that format is
requested, we should call virDomainCoreDump instead.
IOW, don't do
if (vshCommandOptBool(cmd, "compression-format")) {
...
} else {
...
}
Do
....get format...
if (format != VIR_DOMAIN_CORE_DUMP_FORMAT_RAW)
...virDomainCoreDumpWithFormat
} else {
...virDomainCoreDump
}
> + 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;
> + }
> }
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list