server/session.py
branchstable
changeset 4497 593386221aa7
parent 4488 e8e7f6a0e7b6
child 4498 ee6362b4618d
child 4500 81021d62138f
equal deleted inserted replaced
4496:14cbf2570ce8 4497:593386221aa7
   459                         operation.handle_event('%s_event' % trstate)
   459                         operation.handle_event('%s_event' % trstate)
   460                     self.pending_operations[:] = processed
   460                     self.pending_operations[:] = processed
   461                     self.debug('%s session %s done', trstate, self.id)
   461                     self.debug('%s session %s done', trstate, self.id)
   462                 except:
   462                 except:
   463                     self.exception('error while %sing', trstate)
   463                     self.exception('error while %sing', trstate)
       
   464                     # if error on [pre]commit:
       
   465                     #
       
   466                     # * set .failed = True on the operation causing the failure
       
   467                     # * call revert<event>_event on processed operations
       
   468                     # * call rollback_event on *all* operations
       
   469                     #
       
   470                     # that seems more natural than not calling rollback_event
       
   471                     # for processed operations, and allow generic rollback
       
   472                     # instead of having to implements rollback, revertprecommit
       
   473                     # and revertcommit, that will be enough in mont case.
   464                     operation.failed = True
   474                     operation.failed = True
   465                     for operation in processed:
   475                     for operation in processed:
   466                         operation.handle_event('revert%s_event' % trstate)
   476                         operation.handle_event('revert%s_event' % trstate)
       
   477                     # res
       
   478                     self.pending_operations = processed + self.pending_operations
   467                     self.rollback(reset_pool)
   479                     self.rollback(reset_pool)
   468                     raise
   480                     raise
   469             self.pool.commit()
   481             self.pool.commit()
   470             self.commit_state = trstate = 'postcommit'
   482             self.commit_state = trstate = 'postcommit'
   471             while self.pending_operations:
   483             while self.pending_operations: