[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