server/repository.py
branchstable
changeset 1939 67e7379edd96
parent 1883 011e13d74cfc
child 1954 9b20f3504af8
equal deleted inserted replaced
1937:fc702ea02b25 1939:67e7379edd96
   634             self._get_session(sessionid).rollback()
   634             self._get_session(sessionid).rollback()
   635         except:
   635         except:
   636             self.exception('unexpected error')
   636             self.exception('unexpected error')
   637             raise
   637             raise
   638 
   638 
   639     def close(self, sessionid):
   639     def close(self, sessionid, checkshuttingdown=True):
   640         """close the session with the given id"""
   640         """close the session with the given id"""
   641         session = self._get_session(sessionid, setpool=True)
   641         session = self._get_session(sessionid, setpool=True,
       
   642                                     checkshuttingdown=checkshuttingdown)
   642         # operation uncommited before close are rollbacked before hook is called
   643         # operation uncommited before close are rollbacked before hook is called
   643         session.rollback()
   644         session.rollback()
   644         self.hm.call_hooks('session_close', session=session)
   645         self.hm.call_hooks('session_close', session=session)
   645         # commit session at this point in case write operation has been done
   646         # commit session at this point in case write operation has been done
   646         # during `session_close` hooks
   647         # during `session_close` hooks
   689 
   690 
   690     def close_sessions(self):
   691     def close_sessions(self):
   691         """close every opened sessions"""
   692         """close every opened sessions"""
   692         for sessionid in self._sessions.keys():
   693         for sessionid in self._sessions.keys():
   693             try:
   694             try:
   694                 self.close(sessionid)
   695                 self.close(sessionid, checkshuttingdown=False)
   695             except:
   696             except:
   696                 self.exception('error while closing session %s' % sessionid)
   697                 self.exception('error while closing session %s' % sessionid)
   697 
   698 
   698     def clean_sessions(self):
   699     def clean_sessions(self):
   699         """close sessions not used since an amount of time specified in the
   700         """close sessions not used since an amount of time specified in the
   718         """
   719         """
   719         session = InternalSession(self, cnxprops)
   720         session = InternalSession(self, cnxprops)
   720         session.set_pool()
   721         session.set_pool()
   721         return session
   722         return session
   722 
   723 
   723     def _get_session(self, sessionid, setpool=False):
   724     def _get_session(self, sessionid, setpool=False, checkshuttingdown=True):
   724         """return the user associated to the given session identifier"""
   725         """return the user associated to the given session identifier"""
   725         if self._shutting_down:
   726         if checkshuttingdown and self._shutting_down:
   726             raise Exception('Repository is shutting down')
   727             raise Exception('Repository is shutting down')
   727         try:
   728         try:
   728             session = self._sessions[sessionid]
   729             session = self._sessions[sessionid]
   729         except KeyError:
   730         except KeyError:
   730             raise BadConnectionId('No such session %s' % sessionid)
   731             raise BadConnectionId('No such session %s' % sessionid)