Hello,

I'm writing a custom data manager. The data manager should execute before  
the connection's data manager. So I provided the "sortKey" method. This  
works fine for the usual commit(). Once savepoints are involved however  
this fails, the connection's savepoint/rollback is executed before my  
custom data manager's savepoint/rollback.

This code in _transaction.py (in the _commitResources method) sorts the  
data managers:

L = list(self._resources)
L.sort(rm_cmp)

The problem is _commitResources is only executed from within commit().  
This means for a sequence such as

transaction.begin()
transaction.get().join( myDataManager )
transaction.savepoint()
transaction.rollback()
transaction.commit()

the data managers are not sorted unless commit is encountered. If I move  
the sorting code to the join() method instead, I get the proper search  
order.

Is this a bug?

-Matthias

P.S.: Thanks for this great writeup: http://repoze.org/tmdemo.html . It  
should be part of the official docs/the upcoming book.
_______________________________________________
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zodb-dev

Reply via email to