[Zope-dev] [CRITICAL] Conflict Errors, Transactions, Retries,OhMy....

Shane Hathaway shane@zope.com
Fri, 30 May 2003 11:01:20 -0400


Chris McDonough wrote:
> It interests me! ;-)  I haven't had time to look at the resources you
> posted, though... 

Oops, I didn't intend for you to analyze those links deeply.  I just 
wanted to see if there was interest in the idea.

The basic idea is that you track changes to session data in a replayable 
way.  If a conflict error happens, you roll back the session data, bring 
it in sync with the current state of the database, and replay the 
changes, all during transaction commit.  If a conflict happens again, 
you repeat the process, up to some user-defined limit.

To do this, you have to manage the session data as a single 
transactional entity.  This was hard to do until I convinced Jeremy to 
slip in a new register() method on Connection objects.  By overriding 
register(), you can get the Connection to manage all changes to its 
objects, and the Connection becomes that single transactional entity.

The "Shield" experiment proved this can work and doesn't require a lot 
of code, but it also uncovered some complexity you have to be aware of, 
like subtransactions.

> (We either need an internal project to fail miserably due to conflict
> errors, or I need to stop playing MechAssault on the Xbox so much after
> work and get back to coding after work. ;-)

Have you tried the commercial version of Tux Racer?  I quite enjoy that 
simple game.  I got a 3D card just so I could play it. ;-)

Shane