storm.twisted.transact.Transactor fails to retry on DisconnectionError which occurs during transaction commit phase.
Before attempting retry, the transactor queries all stores to force detect connection drops.
A transaction.interfaces.TransactionFailedError gets raised at that point, as transactions have been marked as failed.
Here's a stack trace of what it actually looks like
Traceback (most recent call last):
File \"/usr/lib/python2.7/threading.py\", line 810, in __bootstrap_inner
self.run()
File \"/usr/lib/python2.7/threading.py\", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File \"/usr/lib/python2.7/dist-packages/twisted/_threads/_threadworker.py\", line 46, in work
task()
File \"/usr/lib/python2.7/dist-packages/twisted/_threads/_team.py\", line 190, in doWork
task()
--- <exception caught here> ---
File \"/usr/lib/python2.7/dist-packages/twisted/python/threadpool.py\", line 246, in inContext
result = inContext.theWork()
File \"/usr/lib/python2.7/dist-packages/twisted/python/threadpool.py\", line 262, in <lambda>
inContext.theWork = lambda: context.call(ctx, 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/storm/twisted/transact.py\", line 87, in _wrap
store.execute(\"SELECT 1\")
File \"/usr/lib/python2.7/dist-packages/storm/store.py\", line 109, in execute
return self._connection.execute(statement, params, noresult)
File \"/usr/lib/python2.7/dist-packages/storm/databases/postgres.py\", line 306, in execute
return Connection.execute(self, statement, params, noresult)
File \"/usr/lib/python2.7/dist-packages/storm/database.py\", line 232, in execute
self._event.emit(\"register-transaction\")
File \"/usr/lib/python2.7/dist-packages/storm/zope/zstorm.py\", line 252, in register_store_with_transaction
txn.join(data_manager)
File \"/usr/lib/python2.7/dist-packages/transaction/_transaction.py\", line 213, in join
self._prior_operation_failed() # doesn't return
File \"/usr/lib/python2.7/dist-packages/transaction/_transaction.py\", line 209, in _prior_operation_failed
self._failure_traceback.getvalue())
transaction.interfaces.TransactionFailedError: An operation previously failed, with traceback:
File \"/usr/lib/python2.7/threading.py\", line 783, in __bootstrap
self.__bootstrap_inner()
File \"/usr/lib/python2.7/threading.py\", line 810, in __bootstrap_inner
self.run()
File \"/usr/lib/python2.7/threading.py\", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File \"/usr/lib/python2.7/dist-packages/twisted/_threads/_threadworker.py\", line 46, in work
task()
File \"/usr/lib/python2.7/dist-packages/twisted/_threads/_team.py\", line 190, in doWork
task()
File \"/usr/lib/python2.7/dist-packages/twisted/python/threadpool.py\", line 246, in inContext
result = inContext.theWork()
File \"/usr/lib/python2.7/dist-packages/twisted/python/threadpool.py\", line 262, in <lambda>
inContext.theWork = lambda: context.call(ctx, 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/storm/twisted/transact.py\", line 77, in _wrap
self._transaction.commit()
File \"/usr/lib/python2.7/dist-packages/transaction/_manager.py\", line 89, in commit
return self.get().commit()
File \"/usr/lib/python2.7/dist-packages/transaction/_transaction.py\", line 336, in commit
t, v, tb = self._saveAndGetCommitishError()
File \"/usr/lib/python2.7/dist-packages/transaction/_transaction.py\", line 329, in commit
self._commitResources()
File \"/usr/lib/python2.7/dist-packages/transaction/_transaction.py\", line 451, in _commitResources
rm.tpc_finish(self)
File \"/usr/lib/python2.7/dist-packages/storm/zope/zstorm.py\", line 310, in tpc_finish
self._store.commit()
File \"/usr/lib/python2.7/dist-packages/storm/store.py\", line 139, in commit
self._connection.commit()
File \"/usr/lib/python2.7/dist-packages/storm/database.py\", line 293, in commit
self._check_disconnect(self._raw_connection.commit)
File \"/usr/lib/python2.7/dist-packages/storm/database.py\", line 459, in _check_disconnect
raise DisconnectionError(str(exc))
DisconnectionError: server closed the connection unexpectedly