Opened at 2007-12-18T23:58:37Z
Last modified at 2010-11-30T16:24:36Z
#237 closed defect
webish directory page can't display more than 192 children — at Version 1
| Reported by: | warner | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | 0.8.0 (Allmydata 3.0 Beta) |
| Component: | code-frontend-web | Version: | 0.7.0 |
| Keywords: | twisted deferred | Cc: | |
| Launchpad Bug: |
Description (last modified by warner)
While doing some load testing (which involves writing lots and lots of files into a few directories), I discovered an exception when using the webish interface to list one of these large directories. The exception came out of nevow as it attempted to render the 193rd child of the directory:
2007-12-18 23:48:36.611Z [-] Unhandled Error
Traceback (most recent call last):
File "/usr/lib/python2.5/site-packages/twisted/internet/defer.py", line 191, in addCallback
callbackKeywords=kw)
File "/usr/lib/python2.5/site-packages/twisted/internet/defer.py", line 182, in addCallbacks
self._runCallbacks()
File "/usr/lib/python2.5/site-packages/twisted/internet/defer.py", line 317, in _runCallbacks
self.result = callback(self.result, *args, **kw)
File "/home/amduser/tahoe-loadnet/source/support/lib/python2.5/site-packages/Nevow-0.9.0-py2.5.egg/nevow/flat/twist.py", line 41, in cb
_drive(iterable, finished)
--- <exception caught here> ---
File "/home/amduser/tahoe-loadnet/source/support/lib/python2.5/site-packages/Nevow-0.9.0-py2.5.egg/nevow/flat/twist.py", line 23, in _drive
next = iterable.next()
File "/home/amduser/tahoe-loadnet/source/support/lib/python2.5/site-packages/Nevow-0.9.0-py2.5.egg/nevow/flat/ten.py", line 83, in iterflatten
for item in gen:
File "/home/amduser/tahoe-loadnet/source/support/lib/python2.5/site-packages/Nevow-0.9.0-py2.5.egg/nevow/flat/flatstan.py", line 103, in TagSerializer
yield serialize(toBeRenderedBy, context)
File "/home/amduser/tahoe-loadnet/source/support/lib/python2.5/site-packages/Nevow-0.9.0-py2.5.egg/nevow/flat/ten.py", line 70, in serialize
return partialflatten(context, obj)
File "/home/amduser/tahoe-loadnet/source/support/lib/python2.5/site-packages/Nevow-0.9.0-py2.5.egg/nevow/flat/ten.py", line 61, in partialflatten
return flattener(obj, context)
File "/home/amduser/tahoe-loadnet/source/support/lib/python2.5/site-packages/Nevow-0.9.0-py2.5.egg/nevow/flat/flatstan.py", line 262, in DirectiveSerializer
return serialize(renderer, context)
File "/home/amduser/tahoe-loadnet/source/support/lib/python2.5/site-packages/Nevow-0.9.0-py2.5.egg/nevow/flat/ten.py", line 70, in serialize
return partialflatten(context, obj)
File "/home/amduser/tahoe-loadnet/source/support/lib/python2.5/site-packages/Nevow-0.9.0-py2.5.egg/nevow/flat/ten.py", line 61, in partialflatten
return flattener(obj, context)
File "/home/amduser/tahoe-loadnet/source/support/lib/python2.5/site-packages/Nevow-0.9.0-py2.5.egg/nevow/flat/flatstan.py", line 245, in MethodSerializer
return FunctionSerializer(original, context, nocontext)
File "/home/amduser/tahoe-loadnet/source/support/lib/python2.5/site-packages/Nevow-0.9.0-py2.5.egg/nevow/flat/flatstan.py", line 234, in FunctionSerializer
result = original(context, data)
File "/home/amduser/tahoe-loadnet/source/src/allmydata/webish.py", line 227, in render_row
ctx.fillSlots("size", target.get_size())
File "/home/amduser/tahoe-loadnet/source/src/allmydata/filenode.py", line 25, in get_size
return IFileURI(self.uri).get_size()
File "/usr/lib/python2.5/site-packages/twisted/python/components.py", line 113, in _hook
return factory(ob)
File "/home/amduser/tahoe-loadnet/source/src/allmydata/uri.py", line 428, in from_string_filenode
u = from_string(s)
File "/home/amduser/tahoe-loadnet/source/src/allmydata/uri.py", line 391, in from_string
return CHKFileURI().init_from_string(s)
File "/home/amduser/tahoe-loadnet/source/src/allmydata/uri.py", line 52, in init_from_string
self.key = idlib.a2b(key_s)
File "/home/amduser/tahoe-loadnet/source/src/allmydata/util/idlib.py", line 190, in a2b
precondition(could_be_base32_encoded(cs), "cs is required to be possibly base32 encoded data.", cs=cs)
exceptions.RuntimeError: maximum recursion depth exceeded
I'm not sure if there is actual recursion taking place.. it may just be a function that's returning defer.succeed(result) and this basically surprises some other piece of code that doesn't expect the Deferred to fire so quickly.
Note: See
TracTickets for help on using
tickets.

hrm, the exception got mangled during pasting..