#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.

Change History (1)

comment:1 Changed at 2007-12-19T00:03:44Z by warner

  • Description modified (diff)

hrm, the exception got mangled during pasting..

Note: See TracTickets for help on using tickets.