server/session.py
changeset 4498 ee6362b4618d
parent 4490 d45cde54d464
parent 4497 593386221aa7
child 4506 5b99f4a9f8ef
equal deleted inserted replaced
4495:99c18d3f9542 4498:ee6362b4618d
   469                         operation.handle_event('%s_event' % trstate)
   469                         operation.handle_event('%s_event' % trstate)
   470                     self.pending_operations[:] = processed
   470                     self.pending_operations[:] = processed
   471                     self.debug('%s session %s done', trstate, self.id)
   471                     self.debug('%s session %s done', trstate, self.id)
   472                 except:
   472                 except:
   473                     self.exception('error while %sing', trstate)
   473                     self.exception('error while %sing', trstate)
       
   474                     # if error on [pre]commit:
       
   475                     #
       
   476                     # * set .failed = True on the operation causing the failure
       
   477                     # * call revert<event>_event on processed operations
       
   478                     # * call rollback_event on *all* operations
       
   479                     #
       
   480                     # that seems more natural than not calling rollback_event
       
   481                     # for processed operations, and allow generic rollback
       
   482                     # instead of having to implements rollback, revertprecommit
       
   483                     # and revertcommit, that will be enough in mont case.
   474                     operation.failed = True
   484                     operation.failed = True
   475                     for operation in processed:
   485                     for operation in processed:
   476                         operation.handle_event('revert%s_event' % trstate)
   486                         operation.handle_event('revert%s_event' % trstate)
       
   487                     # res
       
   488                     self.pending_operations = processed + self.pending_operations
   477                     self.rollback(reset_pool)
   489                     self.rollback(reset_pool)
   478                     raise
   490                     raise
   479             self.pool.commit()
   491             self.pool.commit()
   480             self.commit_state = trstate = 'postcommit'
   492             self.commit_state = trstate = 'postcommit'
   481             while self.pending_operations:
   493             while self.pending_operations: