cubicweb/server/repository.py
changeset 12805 8cf02773a6b3
parent 12804 6de3af773073
child 12806 91e262556573
equal deleted inserted replaced
12804:6de3af773073 12805:8cf02773a6b3
   145 
   145 
   146 class _CnxSetPool:
   146 class _CnxSetPool:
   147 
   147 
   148     def __init__(self, source, size):
   148     def __init__(self, source, size):
   149         self._cnxsets = []
   149         self._cnxsets = []
       
   150 
   150         if size is not None:
   151         if size is not None:
   151             self._queue = queue.Queue()
   152             self._queue = queue.Queue()
       
   153 
   152             for i in range(size):
   154             for i in range(size):
   153                 cnxset = source.wrapped_connection()
   155                 cnxset = source.wrapped_connection()
   154                 self._cnxsets.append(cnxset)
   156                 self._cnxsets.append(cnxset)
   155                 self._queue.put_nowait(cnxset)
   157                 self._queue.put_nowait(cnxset)
       
   158 
   156         else:
   159         else:
   157             self._queue = None
   160             self._queue = None
   158             self._source = source
   161             self._source = source
   159 
   162 
   160     def qsize(self):
   163     def qsize(self):
   161         if self._queue is None:
   164         if self._queue is None:
   162             return None
   165             return None
       
   166 
   163         return self._queue.qsize()
   167         return self._queue.qsize()
   164 
   168 
   165     def get(self):
   169     def get(self):
   166         if self._queue is None:
   170         if self._queue is None:
   167             return self._source.wrapped_connection()
   171             return self._source.wrapped_connection()
       
   172 
   168         try:
   173         try:
   169             return self._queue.get(True, timeout=5)
   174             return self._queue.get(True, timeout=5)
   170         except queue.Empty:
   175         except queue.Empty:
   171             raise Exception('no connections set available after 5 secs, probably either a '
   176             raise Exception('no connections set available after 5 secs, probably either a '
   172                             'bug in code (too many uncommited/rolled back '
   177                             'bug in code (too many uncommited/rolled back '
   186 
   191 
   187     def close(self):
   192     def close(self):
   188         if self._queue is not None:
   193         if self._queue is not None:
   189             while not self._queue.empty():
   194             while not self._queue.empty():
   190                 cnxset = self._queue.get_nowait()
   195                 cnxset = self._queue.get_nowait()
       
   196 
   191                 try:
   197                 try:
   192                     cnxset.close(True)
   198                     cnxset.close(True)
   193                 except Exception:
   199                 except Exception:
   194                     self.exception('error while closing %s' % cnxset)
   200                     self.exception('error while closing %s' % cnxset)
   195 
   201