[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