[Libguestfs] [PATCH v2] v2v: rhv-upload-plugin: Defer imageio connection
Nir Soffer
nsoffer at redhat.com
Thu Jan 21 12:28:28 UTC 2021
On Thu, Jan 21, 2021 at 2:08 PM Richard W.M. Jones <rjones at redhat.com> wrote:
>
> On Thu, Jan 21, 2021 at 01:56:55PM +0200, Nir Soffer wrote:
> > This happens only when not using unix socket, for example when running
> > on non-ovirt host, or ovirt host from another data center, or when using
> > -oo rhv_direct=false
> >
> > When using unix socket, we close the initial HTTPSConnection, and
> > created a new UnixHTTPConnection. This connection is not connected to
> > the server yet. When qemu-img tries to access the server, the connection
> > is connected automatically.
> >
> > Fix the issue by closing the initial connection used to get server
> > options and initialize the handle, and storing a closed connection in
> > the handle.
>
> I think this description could be a bit clearer. If I'm understanding
> it correctly, this description could be better:
>
> "
> This happens only when not using unix socket, for example when running
> on non-ovirt host, or ovirt host from another data center, or when using
> -oo rhv_direct=false
>
> After this change, in the unix domain socket case:
>
> - We close the socket.
The tcp socket
> - We call optimize_http which immediately reopens the unix socket.
No, we create a connection object, but it does not create the underlying
socket until we send() is called:
HTTPConnection.__init__():
https://github.com/python/cpython/blob/34df10a9a16b38d54421eeeaf73ec89828563be7/Lib/http/client.py#L241
HTTPConnection.send():
https://github.com/python/cpython/blob/34df10a9a16b38d54421eeeaf73ec89828563be7/Lib/http/client.py#L972
> In the non-unix domain socket case:
>
> - We close the socket.
>
> - We call optimize_http which does nothing.
Right
> - Later when qemu-img starts to read or write to nbdkit,
> HTTPConnection transparently reconnects to the oVirt server.
> Doing it this way avoids keeping the TCP connection idle after the
> initial open(), avoiding the bug described above.
Right. I'll try to make this more clear before pushing.
> "
>
> > --- a/v2v/rhv-upload-plugin.py
> > +++ b/v2v/rhv-upload-plugin.py
> > @@ -117,6 +117,15 @@ def open(readonly):
> > destination_url = parse_transfer_url(transfer)
> > http = create_http(destination_url)
> > options = get_options(http, destination_url)
> > +
> > + # Close the initial connection to imageio server. When qemu-img will
> > + # try to access the server, HTTPConnection will reconnect
> > + # automatically. If we keep this connection idle and qemu-img is too
> > + # slow getting image extents, imageio server may close the connection,
> > + # and the import will fail on the first write.
> > + # See https://bugzilla.redhat.com/1916176.
> > + http.close()
> > +
> > http = optimize_http(http, host, options)
> > except:
> > cancel_transfer(connection, transfer)
>
> Anyway, please feel free to push it now if you want.
>
> Thanks,
>
> Rich.
>
> --
> Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
> Read my programming and virtualization blog: http://rwmj.wordpress.com
> Fedora Windows cross-compiler. Compile Windows programs, test, and
> build Windows installers. Over 100 libraries supported.
> http://fedoraproject.org/wiki/MinGW
>
More information about the Libguestfs
mailing list