cubicweb/server/repository.py
changeset 12803 bf940d5416e5
parent 12749 ff63319a1730
child 12804 6de3af773073
equal deleted inserted replaced
12802:f6662c603730 12803:bf940d5416e5
   157             self._queue = None
   157             self._queue = None
   158             self._source = source
   158             self._source = source
   159         super(_CnxSetPool, self).__init__()
   159         super(_CnxSetPool, self).__init__()
   160 
   160 
   161     def qsize(self):
   161     def qsize(self):
   162         q = self._queue
   162         if self._queue is None:
   163         if q is None:
       
   164             return None
   163             return None
   165         return q.qsize()
   164         return self._queue.qsize()
   166 
   165 
   167     def get(self):
   166     def get(self):
   168         q = self._queue
   167         if self._queue is None:
   169         if q is None:
       
   170             return self._source.wrapped_connection()
   168             return self._source.wrapped_connection()
   171         try:
   169         try:
   172             return self._queue.get(True, timeout=5)
   170             return self._queue.get(True, timeout=5)
   173         except queue.Empty:
   171         except queue.Empty:
   174             raise Exception('no connections set available after 5 secs, probably either a '
   172             raise Exception('no connections set available after 5 secs, probably either a '
   176                             'connections) or too much load on the server (in '
   174                             'connections) or too much load on the server (in '
   177                             'which case you can try to set a bigger '
   175                             'which case you can try to set a bigger '
   178                             'connections pool size)')
   176                             'connections pool size)')
   179 
   177 
   180     def release(self, cnxset):
   178     def release(self, cnxset):
   181         q = self._queue
   179         if self._queue is None:
   182         if q is None:
       
   183             cnxset.close(True)
   180             cnxset.close(True)
   184         else:
   181         else:
   185             self._queue.put_nowait(cnxset)
   182             self._queue.put_nowait(cnxset)
   186 
   183 
   187     def __iter__(self):
   184     def __iter__(self):
   188         for cnxset in self._cnxsets:
   185         for cnxset in self._cnxsets:
   189             yield cnxset
   186             yield cnxset
   190 
   187 
   191     def close(self):
   188     def close(self):
   192         q = self._queue
   189         if self._queue is not None:
   193         if q is not None:
   190             while not self._queue.empty():
   194             while not q.empty():
   191                 cnxset = self._queue.get_nowait()
   195                 cnxset = q.get_nowait()
       
   196                 try:
   192                 try:
   197                     cnxset.close(True)
   193                     cnxset.close(True)
   198                 except Exception:
   194                 except Exception:
   199                     self.exception('error while closing %s' % cnxset)
   195                     self.exception('error while closing %s' % cnxset)
   200 
   196