You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Robert P. Thille (JIRA)" <ji...@apache.org> on 2014/12/10 01:49:12 UTC

[jira] [Updated] (THRIFT-2883) TTwisted.py, during ConnectionLost processing: exceptions.RuntimeError: dictionary changed size during iteration

     [ https://issues.apache.org/jira/browse/THRIFT-2883?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Robert P. Thille updated THRIFT-2883:
-------------------------------------
    Attachment: THRIFT-2883.patch

Code change shamelessly stolen from:
https://github.com/Metaswitch/crest/issues/105

> TTwisted.py, during ConnectionLost processing: exceptions.RuntimeError: dictionary changed size during iteration
> ----------------------------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-2883
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2883
>             Project: Thrift
>          Issue Type: Bug
>    Affects Versions: 0.9.2
>            Reporter: Robert P. Thille
>              Labels: easyfix, patch
>         Attachments: THRIFT-2883.patch
>
>   Original Estimate: 5m
>  Remaining Estimate: 5m
>
> If any of the errbacks called by the connectionLost routine attempt to make new requests over thrift (retries), the requests dictionary will change size and Python with throw the RuntimeError exception and the clients will not be properly notified of the connectionLost state change.
> 2014-12-06 02:22:16,808 ERROR    twisted      Unhandled Error
> Traceback (most recent call last):
>   File "/usr/lib/pymodules/python2.7/companyutils/service/__init__.py", line 292, in main
>     self.reactor.run()
>   File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1169, in run
>     self.mainLoop()
>   File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1181, in mainLoop
>     self.doIteration(t)
>   File "/usr/lib/python2.7/dist-packages/twisted/internet/epollreactor.py", line 379, in doPoll
>     log.callWithLogger(selectable, _drdw, selectable, fd, event)
> --- <exception caught here> ---
>   File "/usr/lib/python2.7/dist-packages/twisted/python/log.py", line 84, in callWithLogger
>     return callWithContext({"system": lp}, func, *args, **kw)
>   File "/usr/lib/python2.7/dist-packages/twisted/python/log.py", line 69, in callWithContext
>     return context.call({ILogContext: newCtx}, func, *args, **kw)
>   File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line 118, in callWithContext
>     return self.currentContext().callWithContext(ctx, func, *args, **kw)
>   File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line 81, in callWithContext
>     return func(*args,**kw)
>   File "/usr/lib/python2.7/dist-packages/twisted/internet/posixbase.py", line 627, in _doReadOrWrite
>     self._disconnectSelectable(selectable, why, inRead)
>   File "/usr/lib/python2.7/dist-packages/twisted/internet/posixbase.py", line 258, in _disconnectSelectable
>     selectable.readConnectionLost(f)
>   File "/usr/lib/python2.7/dist-packages/twisted/internet/tcp.py", line 267, in readConnectionLost
>     self.connectionLost(reason)
>   File "/usr/lib/python2.7/dist-packages/twisted/internet/tcp.py", line 473, in connectionLost
>     self._commonConnection.connectionLost(self, reason)
>   File "/usr/lib/python2.7/dist-packages/twisted/internet/tcp.py", line 287, in connectionLost
>     protocol.connectionLost(reason)
>   File "/usr/lib/pymodules/python2.7/telephus/protocol.py", line 63, in connectionLost
>     self._parent_protocol.connectionLost(self, reason)
>   File "/usr/lib/pymodules/python2.7/thrift/transport/TTwisted.py", line 84, in connectionLost
>     for k, v in self.client._reqs.iteritems():
> exceptions.RuntimeError: dictionary changed size during iteration



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)