Hi Jim, I've created a new branch for my savepoint release changes following the 1.1 release here:
svn+ssh://svn.zope.org/repos/main/transaction/branches/elro-savepoint-release-1.1 This does seem to be a real requirement, as I've had another request to provide this functionality for zope.sqlalchemy - when a large number of savepoints are used, the eventual commit can lead to a `RuntimeError: maximum recursion depth exceeded` in SQLAlchemy as it attempts to unroll its nested substransactions. Laurence On 17 January 2010 15:45, Laurence Rowe <l...@lrowe.co.uk> wrote: > 2010/1/17 Jim Fulton <j...@zope.com>: >> On Sat, Jan 16, 2010 at 1:03 PM, Laurence Rowe <l...@lrowe.co.uk> wrote: >>> I've had a request to add savepoint release support to zope.sqlalchemy >>> as some databases seem to limit the number of savepoints in a >>> transaction. >>> >>> I've added this in a branch of transaction here: >>> svn+ssh://svn.zope.org/repos/main/transaction/branches/elro-savepoint-release >>> >>> >From the changelog: >>> >>> * Add support for savepoint.release(). Some databases only support a limited >>> number of savepoints or subtransactions, this provides an opportunity for a >>> data manager to free those resources. >>> >>> * Rename InvalidSavepointRollbackError to InvalidSavepointError (BBB >>> provided.) >>> >>> If there are no objections, I shall merge this to trunk. >> >> I'll review and merge. > > Great, thanks! > >> What does it mean to "release" a savepoint? How is this different from >> aborting >> a save point? I ask particularly in light of: >> >> On Sat, Jan 16, 2010 at 2:26 PM, Laurence Rowe <l...@lrowe.co.uk> wrote: >>> 2010/1/16 Laurence Rowe <l...@lrowe.co.uk>: >>>> I'm still not sure this will allow me to add savepoint release support >>>> to zope.sqlalchemy, as SQLAlchemy has a concept of nested transactions >>>> rather than savepoints. >>>> http://groups.google.com/group/sqlalchemy/browse_thread/thread/7a4632587fd97724 >>> >>> Michael Bayer noted on the sqlalchemy group that on RELEASE SAVEPOINT >>> Postgresql destroys all subsequent savepoints. My branch now >>> implements this behaviour. > > For zope.sqlalchemy I commit the sqlalchemy substransaction on > savepoint.release(). This translates to a RELEASE SAVEPOINT on > postgresql, best described by their docs here: > > """ > RELEASE SAVEPOINT destroys a savepoint previously defined in the > current transaction. > > Destroying a savepoint makes it unavailable as a rollback point, but > it has no other user visible behavior. It does not undo the effects of > commands executed after the savepoint was established. (To do that, > see ROLLBACK TO SAVEPOINT.) Destroying a savepoint when it is no > longer needed allows the system to reclaim some resources earlier than > transaction end. > > RELEASE SAVEPOINT also destroys all savepoints that were established > after the named savepoint was established. > """ > http://developer.postgresql.org/pgdocs/postgres/sql-release-savepoint.html > > Laurence > _______________________________________________ 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