[ZODB-Dev] Invalidations

Jim Fulton jim at zope.com
Thu May 5 16:53:13 EDT 2005


Tim Peters wrote:
> [Tim Peters]
> 
>>...
>>AFAICT, it would make more sense to move the logic for invoking callbacks
>>into TransactionManager.  Transaction() currently takes an optional
>>`sychronizers` argument that it never mutates, for which a
>>TransactionManager always passes its set of registered synchronizers.
>>Since ISynchronizer hooks are registered with a transaction manager
>>rather than with a transaction, it makes more sense to me for the
>>transaction manager to invoke them (as is, we're duplicating a TM
>>instance var inside every T).
> 
> 
> Oh, fudge -- that doesn't work.  The callbacks take a transaction object as
> an argument, so they pretty much have to be invoked by Transaction.  That
> also makes it problematic to invoke them from TransactionManager.begin()
> (what gets passed as the txn?

The transaction created by begin.

 > Passing a brand new txn to a method called
> "afterCompletion()" doesn't make a lot of sense on the face of it). 

Of course not. OTOH, it makes a lot of sense to pass the new
txn to a method named newTransaction. :)

 > OTOH,
> data managers don't have any other method to call with a "sync the
> underlying storage/data_source" meaning -- Connection.sync() certainly
> doesn't have that meaning, since it also aborts the current transaction, and
> wrt to all data managers, not just itself.
> 
> sync'ing via TM.begin() remains a puzzle.

ISynchronizer should grow a new method:

     def newTransaction(transaction):
         """Hook that is called at the start of a transaction.
	"""

The TM calls this method with the new transaction.

For Connections, this method will do what sync does now
sans the abort.

Jim

-- 
Jim Fulton           mailto:jim at zope.com       Python Powered!
CTO                  (540) 361-1714            http://www.python.org
Zope Corporation     http://www.zope.com       http://www.zope.org


More information about the ZODB-Dev mailing list