All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fam Zheng <famz@redhat.com>
To: Alex Bligh <alex@alex.org.uk>
Cc: Kevin Wolf <kwolf@redhat.com>,
	qemu-devel@nongnu.org, Alexandre Derumier <aderumier@odiso.com>
Subject: Re: [Qemu-devel] [PATCH] add qemu-img convert -C option (skip target volume creation)
Date: Mon, 12 Aug 2013 14:22:55 +0800	[thread overview]
Message-ID: <20130812062254.GA17682@localhost.localdomain> (raw)
In-Reply-To: <1376242292-8345-1-git-send-email-alex@alex.org.uk>

On Sun, 08/11 18:31, Alex Bligh wrote:
> Add a -C option to skip volume creation on qemu-img convert.
> This is useful for targets such as rbd / ceph, where the
> target volume may already exist; we cannot always rely on
> qemu-img convert to create the image, as dependent on the
> output format, there may be parameters which are not possible
> to specify through the qemu-img convert command line.
> 
> Code:
> 
> Author: Alexandre Derumier <aderumier@odiso.com>
> Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
> Signed-off-by: Alex Bligh <alex@alex.org.uk>
> 
> Documentaton:
> 
> Author: Alex Bligh <alex@alex.org.uk>
> Signed-off-by: Alex Bligh <alex@alex.org.uk>
> ---
>  qemu-img-cmds.hx |    4 ++--
>  qemu-img.c       |   37 ++++++++++++++++++++++---------------
>  qemu-img.texi    |   15 ++++++++++++++-
>  3 files changed, 38 insertions(+), 18 deletions(-)
> 
> diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
> index 4ca7e95..74ced81 100644
> --- a/qemu-img-cmds.hx
> +++ b/qemu-img-cmds.hx
> @@ -34,9 +34,9 @@ STEXI
>  ETEXI
>  
>  DEF("convert", img_convert,
> -    "convert [-c] [-p] [-q] [-f fmt] [-t cache] [-O output_fmt] [-o options] [-s snapshot_name] [-S sparse_size] filename [filename2 [...]] output_filename")
> +    "convert [-c] [-p] [-q] [-C] [-f fmt] [-t cache] [-O output_fmt] [-o options] [-s snapshot_name] [-S sparse_size] filename [filename2 [...]] output_filename")
>  STEXI
> -@item convert [-c] [-p] [-q] [-f @var{fmt}] [-t @var{cache}] [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S @var{sparse_size}] @var{filename} [@var{filename2} [...]] @var{output_filename}
> +@item convert [-c] [-p] [-q] [-C] [-f @var{fmt}] [-t @var{cache}] [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S @var{sparse_size}] @var{filename} [@var{filename2} [...]] @var{output_filename}
>  ETEXI
>  
>  DEF("info", img_info,
> diff --git a/qemu-img.c b/qemu-img.c
> index b9a848d..5b6ae15 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -103,6 +103,7 @@ static void help(void)
>             "  '-S' indicates the consecutive number of bytes that must contain only zeros\n"
>             "       for qemu-img to create a sparse image during conversion\n"
>             "  '--output' takes the format in which the output must be done (human or json)\n"
> +           "  '-C' skips the target volume creation (useful for rbd)\n"

The statement "useful for rbd" is not very informative, maybe you could
use "'-C' skips the target volume creation (assuming it already exists)".

>             "\n"
>             "Parameters to check subcommand:\n"
>             "  '-r' tries to repair any inconsistencies that are found during the check.\n"
> @@ -1116,7 +1117,7 @@ out3:
>  
>  static int img_convert(int argc, char **argv)
>  {
> -    int c, ret = 0, n, n1, bs_n, bs_i, compress, cluster_size, cluster_sectors;
> +    int c, ret = 0, n, n1, bs_n, bs_i, compress, cluster_size, cluster_sectors, skipcreate;

This line is too long, please break it.

>      int progress = 0, flags;
>      const char *fmt, *out_fmt, *cache, *out_baseimg, *out_filename;
>      BlockDriver *drv, *proto_drv;
> @@ -1139,8 +1140,9 @@ static int img_convert(int argc, char **argv)
>      cache = "unsafe";
>      out_baseimg = NULL;
>      compress = 0;
> +    skipcreate = 0;
>      for(;;) {
> -        c = getopt(argc, argv, "f:O:B:s:hce6o:pS:t:q");
> +        c = getopt(argc, argv, "f:O:B:s:hce6o:pS:t:qC");
>          if (c == -1) {
>              break;
>          }
> @@ -1161,6 +1163,9 @@ static int img_convert(int argc, char **argv)
>          case 'c':
>              compress = 1;
>              break;
> +        case 'C':
> +            skipcreate = 1;
> +            break;
>          case 'e':
>              error_report("option -e is deprecated, please use \'-o "
>                    "encryption\' instead!");
> @@ -1329,20 +1334,22 @@ static int img_convert(int argc, char **argv)
>          }
>      }
>  
> -    /* Create the new image */
> -    ret = bdrv_create(drv, out_filename, param);
> -    if (ret < 0) {
> -        if (ret == -ENOTSUP) {
> -            error_report("Formatting not supported for file format '%s'",
> -                         out_fmt);
> -        } else if (ret == -EFBIG) {
> -            error_report("The image size is too large for file format '%s'",
> -                         out_fmt);
> -        } else {
> -            error_report("%s: error while converting %s: %s",
> -                         out_filename, out_fmt, strerror(-ret));
> +    if (!skipcreate) {
> +        /* Create the new image */
> +        ret = bdrv_create(drv, out_filename, param);
> +        if (ret < 0) {
> +            if (ret == -ENOTSUP) {
> +                 error_report("Formatting not supported for file format '%s'",
> +                              out_fmt);
> +            } else if (ret == -EFBIG) {
> +                 error_report("The image size is too large for file format '%s'",
> +                              out_fmt);
> +            } else {
> +                error_report("%s: error while converting %s: %s",
> +                             out_filename, out_fmt, strerror(-ret));
> +            }
> +            goto out;
>          }
> -        goto out;
>      }
>  
>      flags = BDRV_O_RDWR;
> diff --git a/qemu-img.texi b/qemu-img.texi
> index 69f1bda..9e5ba36 100644
> --- a/qemu-img.texi
> +++ b/qemu-img.texi
> @@ -96,6 +96,14 @@ Second image format
>  Strict mode - fail on on different image size or sector allocation
>  @end table
>  
> +Parameters to convert subcommand:
> +
> +@table @option
> +
> +@item -C
> +Skip the creation of the target volume
> +@end table
> +
>  Command description:
>  
>  @table @option
> @@ -171,7 +179,7 @@ Error on reading data
>  
>  @end table
>  
> -@item convert [-c] [-p] [-f @var{fmt}] [-t @var{cache}] [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S @var{sparse_size}] @var{filename} [@var{filename2} [...]] @var{output_filename}
> +@item convert [-c] [-p] [-C] [-f @var{fmt}] [-t @var{cache}] [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S @var{sparse_size}] @var{filename} [@var{filename2} [...]] @var{output_filename}
>  
>  Convert the disk image @var{filename} or a snapshot @var{snapshot_name} to disk image @var{output_filename}
>  using format @var{output_fmt}. It can be optionally compressed (@code{-c}
> @@ -190,6 +198,11 @@ created as a copy on write image of the specified base image; the
>  @var{backing_file} should have the same content as the input's base image,
>  however the path, image format, etc may differ.
>  
> +If the @code{-C} option is specified, the target volume creation will be
> +skipped. This is useful for formats such as @code{rbd} if the target
> +volume has already been created with site specific options that cannot
> +be supplied through qemu-img.
> +
>  @item info [-f @var{fmt}] [--output=@var{ofmt}] [--backing-chain] @var{filename}
>  
>  Give information about the disk image @var{filename}. Use it in
> -- 
> 1.7.9.5
> 
> 

-- 
Fam

  reply	other threads:[~2013-08-12  6:23 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-11 17:31 [Qemu-devel] [PATCH] add qemu-img convert -C option (skip target volume creation) Alex Bligh
2013-08-12  6:22 ` Fam Zheng [this message]
2013-08-12  7:11   ` Alex Bligh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130812062254.GA17682@localhost.localdomain \
    --to=famz@redhat.com \
    --cc=aderumier@odiso.com \
    --cc=alex@alex.org.uk \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.