[Checkins] SVN: z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/ createi
transaction only if necessary (and as late as possible)
Andreas Jung
andreas at andreas-jung.com
Thu Jun 28 04:50:16 EDT 2007
Log message for revision 77166:
createi transaction only if necessary (and as late as possible)
Changed:
U z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/CHANGES.txt
U z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/base.py
U z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/version.txt
-=-
Modified: z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/CHANGES.txt
===================================================================
--- z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/CHANGES.txt 2007-06-28 06:03:09 UTC (rev 77165)
+++ z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/CHANGES.txt 2007-06-28 08:50:14 UTC (rev 77166)
@@ -1,3 +1,9 @@
+1.0.8 (unreleased)
+
+ - SessionDataManager: create a session transaction as late
+ as possible and only if necessary in order to minimize deadlocks
+
+
1.0.7 (27.06.2007)
- SessionDataManager: moved commit code from tpc_vote()
Modified: z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/base.py
===================================================================
--- z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/base.py 2007-06-28 06:03:09 UTC (rev 77165)
+++ z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/base.py 2007-06-28 08:50:14 UTC (rev 77166)
@@ -151,30 +151,38 @@
def __init__(self, session, id):
self.session = session
self._id = id
- self.transaction = session.create_transaction()
+ self.transaction = None
def abort(self, trans):
self.transaction.rollback()
self.session.clear()
session_cache.set(**{'last_session_%s' % self._id : None})
+ def _flush(self):
+ if self.session.new or self.session.deleted or self.session.dirty:
+ if self.transaction is None:
+ self.transaction = session.create_transaction()
+ self.session.flush()
+
def commit(self, trans):
- self.session.flush()
+ self._flush()
def tpc_begin(self, trans):
pass
def tpc_vote(self, trans):
- self.session.flush()
+ self._flush()
def tpc_finish(self, trans):
- self.transaction.commit()
+ if self.transaction is not None:
+ self.transaction.commit()
self.session.clear()
session_cache.set(**{'last_session_%s' % self._id : None})
def tpc_abort(self, trans):
- self.transaction.rollback()
+ if self.transaction is not None:
+ self.transaction.rollback()
self.session.clear()
session_cache.set(**{'last_session_%s' % self._id : None})
Modified: z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/version.txt
===================================================================
--- z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/version.txt 2007-06-28 06:03:09 UTC (rev 77165)
+++ z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/version.txt 2007-06-28 08:50:14 UTC (rev 77166)
@@ -1 +1 @@
-1.0.7
+1.0.8
More information about the Checkins
mailing list