[tahoe-lafs-trac-stream] [Tahoe-LAFS] #2862: introducers.yaml causes foolscap assertion
Tahoe-LAFS
trac at tahoe-lafs.org
Sun Jan 8 22:01:56 UTC 2017
#2862: introducers.yaml causes foolscap assertion
----------------------------+------------------------
Reporter: warner | Owner:
Type: defect | Status: new
Priority: major | Milestone: 1.12.1
Component: code-nodeadmin | Version: 1.12.0
Keywords: | Launchpad Bug:
----------------------------+------------------------
User "lazygravy" on IRC reported a node-startup exception that happens
when `private/introducers.yaml` is used. The problem appears to be that
the FURL given to foolscap is a unicode string, and there is code inside
foolscap which asserts that the connection hints it sees are normal
strings (not unicode). The exception (as recorded in twistd.log) looks
like:
{{{
Unhandled error in Deferred:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/foolscap/pb.py", line
856, in connectTo
rc.startConnecting(self)
File "/usr/local/lib/python2.7/site-packages/foolscap/reconnector.py",
line 78, in startConnecting
self._connect()
File "/usr/local/lib/python2.7/site-packages/foolscap/reconnector.py",
line 110, in _connect
d = self._tub.getReference(self._url)
File "/usr/local/lib/python2.7/site-packages/foolscap/pb.py", line
794, in getReference
return defer.maybeDeferred(self._getReference, sturdyOrURL)
--- <exception caught here> ---
File "/usr/local/lib/python2.7/site-
packages/twisted/internet/defer.py", line 150, in maybeDeferred
result = f(*args, **kw)
File "/usr/local/lib/python2.7/site-packages/foolscap/pb.py", line
811, in _getReference
d = self.getBrokerForTubRef(sturdy.getTubRef())
File "/usr/local/lib/python2.7/site-
packages/foolscap/referenceable.py", line 804, in getTubRef
return TubRef(self.tubID, self.locationHints)
File "/usr/local/lib/python2.7/site-
packages/foolscap/referenceable.py", line 837, in __init__
locationHints
exceptions.AssertionError:
[u'cz3uevcjrgwszq4ytvgisdw2nsdzgaxfan4nvh7uy5bxcbr7qv4q.b32.i2p']
}}}
I think the code that loads the YAML file needs to do an
`.encode("ascii")` on any of the FURLs it extracts, before passing them to
foolscap.
In addition, docs/configuration.rst had an invalid example for the
`private/introducers.yaml` section (around line 920). It said:
{{{
introducers:
petname2: furl = FURL2
}}}
but that will result in a data structure like `introducers = {"petname2":
"furl = FURL2"}`, which causes an exception at node startup time like
this:
{{{
File "/usr/local/lib/python2.7/site-packages/allmydata/client.py", line
189, in __init__
self.init_introducer_clients()
File "/usr/local/lib/python2.7/site-packages/allmydata/client.py", line
268, in init_introducer_clients
ic = IntroducerClient(self.tub, introducer['furl'],
exceptions.TypeError: string indices must be integers
}}}
Instead, the docs should recommend:
{{{
introducers:
petname2:
furl: FURL2
}}}
--
Ticket URL: <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2862>
Tahoe-LAFS <https://Tahoe-LAFS.org>
secure decentralized storage
More information about the tahoe-lafs-trac-stream
mailing list