[tahoe-lafs-trac-stream] [Tahoe-LAFS] #2787: intermittent "Address Already In Use" error during tests
Tahoe-LAFS
trac at tahoe-lafs.org
Wed May 11 00:16:55 UTC 2016
#2787: intermittent "Address Already In Use" error during tests
--------------------------+------------------------
Reporter: warner | Owner: warner
Type: defect | Status: new
Priority: normal | Milestone: soon
Component: code-network | Version: 1.11.0
Keywords: | Launchpad Bug:
--------------------------+------------------------
I'm seeing occasional errors during tests like this:
{{{
File
"/Users/warner/stuff/tahoe/tahoe/src/allmydata/test/test_introducer.py",
line 662, in test_system_v2_server
return self.do_system_test()
File
"/Users/warner/stuff/tahoe/tahoe/src/allmydata/test/test_introducer.py",
line 378, in do_system_test
self.create_tub()
File
"/Users/warner/stuff/tahoe/tahoe/src/allmydata/test/test_introducer.py",
line 321, in create_tub
tub.listenOn("tcp:%d" % portnum)
File "/Users/warner/stuff/tahoe/tahoe/.tox/py27/lib/python2.7/site-
packages/foolscap/pb.py", line 514, in listenOn
l.setServiceParent(self)
File "/Users/warner/stuff/tahoe/tahoe/.tox/py27/lib/python2.7/site-
packages/twisted/application/service.py", line 188, in setServiceParent
self.parent.addService(self)
File "/Users/warner/stuff/tahoe/tahoe/.tox/py27/lib/python2.7/site-
packages/twisted/application/service.py", line 309, in addService
service.privilegedStartService()
File "/Users/warner/stuff/tahoe/tahoe/.tox/py27/lib/python2.7/site-
packages/twisted/application/service.py", line 278, in
privilegedStartService
service.privilegedStartService()
File "/Users/warner/stuff/tahoe/tahoe/.tox/py27/lib/python2.7/site-
packages/twisted/application/internet.py", line 113, in
privilegedStartService
self._port = self._getPort()
File "/Users/warner/stuff/tahoe/tahoe/.tox/py27/lib/python2.7/site-
packages/twisted/application/internet.py", line 141, in _getPort
'listen%s' % (self.method,))(*self.args, **self.kwargs)
File "/Users/warner/stuff/tahoe/tahoe/.tox/py27/lib/python2.7/site-
packages/twisted/internet/posixbase.py", line 478, in listenTCP
p.startListening()
File "/Users/warner/stuff/tahoe/tahoe/.tox/py27/lib/python2.7/site-
packages/twisted/internet/tcp.py", line 984, in startListening
raise CannotListenError(self.interface, self.port, le)
twisted.internet.error.CannotListenError: Couldn't listen on any:49299:
[Errno 48] Address already in use.
[ERROR]
}}}
I'm still tracing this down, but it looks like iputil.py
`allocate_tcp_port()` (which I wrote for Foolscap and copied over a few
months ago) is sometimes giving us port numbers that are actually already
in use. Those ports are coming from the kernel (we do a bind(port=0) and
then ask what port got allocated).
One problem that I know about is that we're binding the test port to
127.0.0.1, and using SO_REUSEADDR, and the combination of those two might
make the kernel think it's ok to give us a port that's already bound to
something *other* than 127.0.0.1. But in some tests, replacing that with
0.0.0.0 didn't help: I was still given ports that are already in use.
I have to experiment some more to figure out what's going on. I think in
the long run, `allocate_tcp_port()` might need to actually try to listen
on the port, and if that fails, grab a different one.
--
Ticket URL: <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2787>
Tahoe-LAFS <https://Tahoe-LAFS.org>
secure decentralized storage
More information about the tahoe-lafs-trac-stream
mailing list