Transactor does not retry DisconnectError ocurring on commit.

Bug #1868175 reported by Simon Poirier
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Storm
New
Undecided
Unassigned

Bug Description

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

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.