[Libguestfs] [PATCH] v2v: -o rhv-upload: Fix emulated zero

Richard W.M. Jones rjones at redhat.com
Fri Dec 7 18:50:39 UTC 2018


On Fri, Dec 07, 2018 at 07:55:28PM +0200, Nir Soffer wrote:
> Replace python 2 only "buffer" with "memoryview".
> 
> Falling back to emulated zero would fail with:
> 
>     NameError: name 'buffer' is not defined
> 
> I did not test the changed code but it was not tested before so it is
> unlikely to be worse.
> 
> Detected by pylint.

Thanks - I pushed both.

I wonder how the pread method worked before?  That's on the main path
I think.

Rich.

>  v2v/rhv-upload-plugin.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/v2v/rhv-upload-plugin.py b/v2v/rhv-upload-plugin.py
> index 3272c3ce3..12d4e68f7 100644
> --- a/v2v/rhv-upload-plugin.py
> +++ b/v2v/rhv-upload-plugin.py
> @@ -416,41 +416,41 @@ def emulate_zero(h, count, offset):
>      transfer = h['transfer']
>  
>      # qemu-img convert starts by trying to zero/trim the whole device.
>      # Since we've just created a new disk it's safe to ignore these
>      # requests as long as they are smaller than the highest write seen.
>      # After that we must emulate them with writes.
>      if offset+count < h['highestwrite']:
>          http.putrequest("PUT", h['path'])
>          if h['needs_auth']:
>              http.putheader("Authorization", transfer.signed_ticket)
>          http.putheader("Content-Range",
>                         "bytes %d-%d/*" % (offset, offset+count-1))
>          http.putheader("Content-Length", str(count))
>          http.endheaders()
>  
>          try:
>              buf = bytearray(128*1024)
>              while count > len(buf):
>                  http.send(buf)
>                  count -= len(buf)
> -            http.send(buffer(buf, 0, count))
> +            http.send(memoryview(buf)[:count])
>          except BrokenPipeError:
>              pass
>  
>          r = http.getresponse()
>          if r.status != 200:
>              request_failed(h, r,
>                             "could not write zeroes offset %d size %d" %
>                             (offset, count))
>  
>          r.read()
>  
>  def trim(h, count, offset):
>      http = h['http']
>  
>      # Construct the JSON request for trimming.
>      buf = json.dumps({'op': "trim",
>                        'offset': offset,
>                        'size': count,
>                        'flush': False}).encode()
>  
> -- 
> 2.17.2

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top




More information about the Libguestfs mailing list