[Libguestfs] [PATCH] v2v: rhv-upload-plugin: Defer imageio connection
Nir Soffer
nsoffer at redhat.com
Tue Jan 19 23:44:47 UTC 2021
On Wed, Jan 20, 2021 at 12:44 AM Nir Soffer <nirsof at gmail.com> wrote:
>
> When using vddk input with certain vmware version, qemu-img may spend
> lot of time getting source image extents. If getting image extents takes
> more than 60 seconds, imageio server closes the idle connection, and the
> transfer will fail on the first write with:
>
> nbdkit: python[1]: error: /var/tmp/rhvupload.0OKqWA/rhv-upload-plugin.py: pwrite: error:
> Traceback (most recent call last):
> File "/var/tmp/rhvupload.0OKqWA/rhv-upload-plugin.py", line 94, in wrapper
> return func(h, *args)
> File "/var/tmp/rhvupload.0OKqWA/rhv-upload-plugin.py", line 230, in pwrite
> r = http.getresponse()
> File "/usr/lib64/python3.6/http/client.py", line 1361, in getresponse
> response.begin()
> File "/usr/lib64/python3.6/http/client.py", line 311, in begin
> version, status, reason = self._read_status()
> File "/usr/lib64/python3.6/http/client.py", line 280, in _read_status
> raise RemoteDisconnected("Remote end closed connection without"
> http.client.RemoteDisconnected: Remote end closed connection without response
>
> Fix the issue by deferring the actual connection used for the transfer
> until qemu try to write to the server:
>
> - The first connection is created in open(). This connection is used to
> query imageio server options and initialize the handle.
>
> - The second connection is created on the first call of the nbd
> callbacks (pwrite, zero, ...). We store it in the handle and reuse it
> for the rest of the transfer.
>
> Since we set inactivity_timeout to 3600 seconds, oVirt will keep the
> transfer alive for one hour. If more time is needed to get image
> extents, we need to increase the inactivity timeout.
>
> I did not test this change yet, but I tested the approach using oVirt
> upload_disk.py example script. Posting early to get feedback on this
> approach.
I cannot test this change, since building virt-v2v on Fedora 32 fails.
I tried:
git clean -dxf
./autogen.sh
make
Make fails with:
...
OCAMLCMI cmdline.cmi
OCAMLOPT cmdline.cmx
OCAMLCMI v2v.cmi
OCAMLOPT v2v.cmx
File "v2v.ml", line 94, characters 20-48:
94 | g#set_smp (min 8 (Sysconf.nr_processors_online ()));
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error: Unbound module Sysconf
Hint: Did you mean Scanf?
make[3]: *** [Makefile:2753: v2v.cmx] Error 2
make[3]: Leaving directory '/home/nsoffer/src/virt-v2v/v2v'
make[2]: *** [Makefile:2069: all] Error 2
make[2]: Leaving directory '/home/nsoffer/src/virt-v2v/v2v'
make[1]: *** [Makefile:1841: all-recursive] Error 1
make[1]: Leaving directory '/home/nsoffer/src/virt-v2v'
make: *** [Makefile:1759: all] Error 2
I could not find any build instructions in virt-v2v project.
Richard, any tips on building virt-v2v?
Nir
More information about the Libguestfs
mailing list