]> xenbits.xensource.com Git - libvirt.git/commitdiff
virsh: blockpull: Support --bytes and scaled integers
authorPeter Krempa <pkrempa@redhat.com>
Thu, 17 Mar 2016 12:41:00 +0000 (13:41 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 29 Mar 2016 13:59:19 +0000 (15:59 +0200)
Use vshBlockJobOptionBandwidth to parse the bandwidth value which will
allow users to specify bandwidth in bytes or as a scaled integer.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1288000

tools/virsh-domain.c
tools/virsh.pod

index 510f68128b18257c43b5efa8b422d61c440e473e..cda442db219092a86cfdd22fdd22439671ab4692 100644 (file)
@@ -2761,6 +2761,10 @@ static const vshCmdOptDef opts_block_pull[] = {
      .type = VSH_OT_BOOL,
      .help = N_("keep the backing chain relatively referenced")
     },
+    {.name = "bytes",
+     .type = VSH_OT_BOOL,
+     .help = N_("the bandwidth limit is in bytes/s rather than MiB/s")
+    },
     {.name = NULL}
 };
 
@@ -2772,6 +2776,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd)
     bool blocking = vshCommandOptBool(cmd, "wait");
     bool verbose = vshCommandOptBool(cmd, "verbose");
     bool async = vshCommandOptBool(cmd, "async");
+    bool bytes = vshCommandOptBool(cmd, "bytes");
     int timeout = 0;
     const char *path = NULL;
     const char *base = NULL;
@@ -2788,7 +2793,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd)
     if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0)
         return false;
 
-    if (vshCommandOptULWrap(ctl, cmd, "bandwidth", &bandwidth) < 0)
+    if (vshBlockJobOptionBandwidth(ctl, cmd, bytes, &bandwidth) < 0)
         return false;
 
     if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0)
@@ -2806,10 +2811,16 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd)
         goto cleanup;
 
     if (base || flags) {
+        if (bytes)
+            flags |= VIR_DOMAIN_BLOCK_REBASE_BANDWIDTH_BYTES;
+
         if (virDomainBlockRebase(dom, path, base, bandwidth, flags) < 0)
             goto cleanup;
     } else {
-        if (virDomainBlockPull(dom, path, bandwidth, 0) < 0)
+        if (bytes)
+            flags |= VIR_DOMAIN_BLOCK_PULL_BANDWIDTH_BYTES;
+
+        if (virDomainBlockPull(dom, path, bandwidth, flags) < 0)
             goto cleanup;
     }
 
index b1d859416f23d3efa8acdc31a6a6c8b6810a6a6a..0c02d7f4e356da939c22fc358c2b3ce730ca32bb 100644 (file)
@@ -1049,7 +1049,7 @@ within a certain range. Specifying I<buf-size> will control how much data can
 be simultaneously in-flight during the copy; larger values use more memory but
 may allow faster completion (the default value is usually correct).
 
-=item B<blockpull> I<domain> I<path> [I<bandwidth>] [I<base>]
+=item B<blockpull> I<domain> I<path> [I<bandwidth>] [I<--bytes>] [I<base>]
 [I<--wait> [I<--verbose>] [I<--timeout> B<seconds>] [I<--async>]]
 [I<--keep-relative>]
 
@@ -1078,10 +1078,9 @@ I<path> specifies fully-qualified path of the disk; it corresponds
 to a unique target name (<target dev='name'/>) or source file (<source
 file='name'/>) for one of the disk devices attached to I<domain> (see
 also B<domblklist> for listing these names).
-I<bandwidth> specifies copying bandwidth limit in MiB/s. Specifying a negative
-value is interpreted as an unsigned long long value or essentially
-unlimited. The hypervisor can choose whether to reject the value or
-convert it to the maximum value allowed.
+I<bandwidth> specifies copying bandwidth limit in MiB/s. For further information
+on the I<bandwidth> argument see the corresponding section for the B<blockjob>
+command.
 
 =item B<blkdeviotune> I<domain> I<device>
 [[I<--config>] [I<--live>] | [I<--current>]]