--- a/hooks/integrity.py Mon Feb 08 12:25:15 2010 +0100
+++ b/hooks/integrity.py Mon Feb 08 13:05:19 2010 +0100
@@ -48,8 +48,6 @@
if _UNIQUE_CONSTRAINTS_HOLDER is session:
_UNIQUE_CONSTRAINTS_HOLDER = None
_UNIQUE_CONSTRAINTS_LOCK.release()
- else:
- assert _UNIQUE_CONSTRAINTS_HOLDER is None
class _ReleaseUniqueConstraintsOperation(hook.Operation):
def commit_event(self):
--- a/server/session.py Mon Feb 08 12:25:15 2010 +0100
+++ b/server/session.py Mon Feb 08 13:05:19 2010 +0100
@@ -471,9 +471,21 @@
self.debug('%s session %s done', trstate, self.id)
except:
self.exception('error while %sing', trstate)
+ # if error on [pre]commit:
+ #
+ # * set .failed = True on the operation causing the failure
+ # * call revert<event>_event on processed operations
+ # * call rollback_event on *all* operations
+ #
+ # that seems more natural than not calling rollback_event
+ # for processed operations, and allow generic rollback
+ # instead of having to implements rollback, revertprecommit
+ # and revertcommit, that will be enough in mont case.
operation.failed = True
for operation in processed:
operation.handle_event('revert%s_event' % trstate)
+ # res
+ self.pending_operations = processed + self.pending_operations
self.rollback(reset_pool)
raise
self.pool.commit()