server/session.py
changeset 9091 4a39f3f1f1d9
parent 9090 e33ff287f082
child 9092 48d488dd3c51
equal deleted inserted replaced
9090:e33ff287f082 9091:4a39f3f1f1d9
   894                  DeprecationWarning, stacklevel=2)
   894                  DeprecationWarning, stacklevel=2)
   895         rset = self._execute(self, rql, kwargs, build_descr)
   895         rset = self._execute(self, rql, kwargs, build_descr)
   896         rset.req = self
   896         rset.req = self
   897         self._session_timestamp.touch()
   897         self._session_timestamp.touch()
   898         return rset
   898         return rset
       
   899 
       
   900     def rollback(self, free_cnxset=True, reset_pool=None):
       
   901         """rollback the current transaction"""
       
   902         if reset_pool is not None:
       
   903             warn('[3.13] use free_cnxset argument instead for reset_pool',
       
   904                  DeprecationWarning, stacklevel=2)
       
   905             free_cnxset = reset_pool
       
   906         cnxset = self.cnxset
       
   907         if cnxset is None:
       
   908             self.clear()
       
   909             self._session_timestamp.touch()
       
   910             self.debug('rollback transaction %s done (no db activity)', self.connectionid)
       
   911             return
       
   912         try:
       
   913             # by default, operations are executed with security turned off
       
   914             with self.security_enabled(False, False):
       
   915                 while self.pending_operations:
       
   916                     try:
       
   917                         operation = self.pending_operations.pop(0)
       
   918                         operation.handle_event('rollback_event')
       
   919                     except BaseException:
       
   920                         self.critical('rollback error', exc_info=sys.exc_info())
       
   921                         continue
       
   922                 cnxset.rollback()
       
   923                 self.debug('rollback for connectionid %s done', self.connectionid)
       
   924         finally:
       
   925             self._session_timestamp.touch()
       
   926             if free_cnxset:
       
   927                 self.free_cnxset(ignoremode=True)
       
   928             self.clear()
   899 
   929 
   900     # resource accessors ######################################################
   930     # resource accessors ######################################################
   901 
   931 
   902     def system_sql(self, sql, args=None, rollback_on_failure=True):
   932     def system_sql(self, sql, args=None, rollback_on_failure=True):
   903         """return a sql cursor on the system database"""
   933         """return a sql cursor on the system database"""
  1436             self._touch()
  1466             self._touch()
  1437             if free_cnxset:
  1467             if free_cnxset:
  1438                 self.free_cnxset(ignoremode=True)
  1468                 self.free_cnxset(ignoremode=True)
  1439             self._clear_thread_data(free_cnxset)
  1469             self._clear_thread_data(free_cnxset)
  1440 
  1470 
  1441     def rollback(self, free_cnxset=True, reset_pool=None):
  1471     def rollback(self, free_cnxset=True, **kwargs):
  1442         """rollback the current session's transaction"""
  1472         """rollback the current session's transaction"""
  1443         if reset_pool is not None:
       
  1444             warn('[3.13] use free_cnxset argument instead for reset_pool',
       
  1445                  DeprecationWarning, stacklevel=2)
       
  1446             free_cnxset = reset_pool
       
  1447         # don't use self.cnxset, rollback may be called with _closed == True
       
  1448         cnxset = self._cnx.cnxset
       
  1449         if cnxset is None:
       
  1450             self._clear_thread_data()
       
  1451             self._touch()
       
  1452             self.debug('rollback session %s done (no db activity)', self.id)
       
  1453             return
       
  1454         try:
  1473         try:
  1455             # by default, operations are executed with security turned off
  1474             return self._cnx.rollback(free_cnxset, **kwargs)
  1456             with self.security_enabled(False, False):
       
  1457                 while self.pending_operations:
       
  1458                     try:
       
  1459                         operation = self.pending_operations.pop(0)
       
  1460                         operation.handle_event('rollback_event')
       
  1461                     except BaseException:
       
  1462                         self.critical('rollback error', exc_info=sys.exc_info())
       
  1463                         continue
       
  1464                 cnxset.rollback()
       
  1465                 self.debug('rollback for session %s done', self.id)
       
  1466         finally:
  1475         finally:
  1467             self._touch()
       
  1468             if free_cnxset:
       
  1469                 self.free_cnxset(ignoremode=True)
       
  1470             self._clear_thread_data(free_cnxset)
  1476             self._clear_thread_data(free_cnxset)
  1471 
  1477 
  1472     def close(self):
  1478     def close(self):
  1473         # do not close connections set on session close, since they are shared now
  1479         # do not close connections set on session close, since they are shared now
  1474         tracker = self._cnxset_tracker
  1480         tracker = self._cnxset_tracker