[ZODB-Dev] RelStorage: ConflictError causes deadlock without RELSTORAGE_ABORT_EARLY

Shane Hathaway shane at hathawaymix.org
Fri Sep 5 07:46:03 CEST 2014


On 07/19/2014 05:22 PM, Sean Upton wrote:
> Folks,
>
> I have been dealing with locking issues and RelStorage for the past
> few days, and want to verify what I believe is a bug:  without
> RELSTORAGE_ABORT_EARLY set in environment, tpc_vote() could
> potentially leave an ILocker adapter setting an RDBMS table lock
> (originally set in either tpc_begin() or in _prepare_tid()) that does
> not get removed.

Hi Sean,

Sorry to take so long to reply. Life is busy!

That variable only has an effect on transactions that fail inside 
tpc_vote().  When tpc_vote() fails, the code expects something to call 
tpc_abort() later, releasing the commit lock.  However, I wonder whether 
there are cases where the transaction package will only call abort(), 
not tpc_abort().  If so, RelStorage probably needs to release the lock 
in abort().

Shane



More information about the ZODB-Dev mailing list