[Debian-med-packaging] Bug#997059: Bug#997059: intake FTBFS on IPV6-only buildds
Étienne Mollier
emollier at emlwks999.eu
Sat Oct 23 17:44:55 BST 2021
Control: tags -1 confirmed ipv6 patch
Control: reassign -1 python3-tornado
Control: retitle -1 python3-tornado: hardcodes ipv4 binding in testing.py
Control: affects -1 src:intake
Hello,
Étienne Mollier, on 2021-10-23:
> Adrian Bunk, on 2021-10-23:
> > Note that while the IPV6-only nature of x86-conova-01 is the most likely explanation
> > why it only fails there, it is not 100% confirmed that this is the problem.
>
> Thanks for that data point, it would explain why I failed to
> reproduce this issue on my end. Also this:
> > ---------------------------- Captured stderr setup -----------------------------
> > 127.0.0.1 - - [16/Oct/2021 16:33:00] "GET / HTTP/1.1" 200 -
> is suspiciously close to be bound to fail on ipv6 only hosts.
After setting up an ipv6 only build machine and some head
scratching, I could consistenly reproduce the test failure.
I traced the root cause of the issue into the python3-tornado
package, which hardcodes ipv4 settings for the test environment
in a couple of locations:
$ grep -C3 '127\.0\.0\.1' /usr/lib/python3/dist-packages/tornado/testing.py
Returns a tuple (socket, port).
.. versionchanged:: 4.4
Always binds to ``127.0.0.1`` without resolving the name
``localhost``.
"""
sock = netutil.bind_sockets(
0, "127.0.0.1", family=socket.AF_INET, reuse_port=reuse_port
)[0]
port = sock.getsockname()[1]
return sock, port
--
def get_url(self, path: str) -> str:
"""Returns an absolute url for the given path on the test server."""
return "%s://127.0.0.1:%s%s" % (self.get_protocol(), self.get_http_port(), path)
def tearDown(self) -> None:
self.http_server.stop()
If I replace the occurrences of 127.0.0.1 by localhost, and ask
for unspecified socket family using AF_UNSPEC like below, then
the test suite goes back to working conditions on my ipv6 only
host (hence the patch tag):
sock = netutil.bind_sockets(
0, "localhost", family=socket.AF_UNSPEC, reuse_port=reuse_port
)[0]
--
def get_url(self, path: str) -> str:
"""Returns an absolute url for the given path on the test server."""
return "%s://localhost:%s%s" % (self.get_protocol(), self.get_http_port(), path)
I don't believe I can do much on intake side to improve the
situation, past cleaning up the few occurrences of ipv4
addresses in d/rules; the http_proxy definitions seem unused
anyway. Other packages may be affected by this issue.
Kind Regards,
--
Étienne Mollier <emollier at emlwks999.eu>
Fingerprint: 8f91 b227 c7d6 f2b1 948c 8236 793c f67e 8f0d 11da
Sent from /dev/pts/6, please excuse my verbosity.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/debian-med-packaging/attachments/20211023/536b0a88/attachment-0001.sig>
More information about the Debian-med-packaging
mailing list