def release(self, conn): """ Release a connection back to the pool. :param gremlinclient.connection.Connection: The connection to be released """ future = self._future_class() if self.size <= self.maxsize: if conn.closed: # conn has been closed pool_logger.info("Released closed connection: {}".format(conn)) self._acquired.remove(conn) conn = None elif self._waiters: waiter = self._waiters.popleft() waiter.set_result(conn) pool_logger.debug( "Completeing future with connection: {}".format(conn)) else: self._pool.append(conn) self._acquired.remove(conn) future.set_result(None) else: future_conn = conn.close() future_conn.add_done_callback( lambda f: future.set_result(f.result())) return future
def release(self, conn): """ Release a connection back to the pool. :param gremlinclient.connection.Connection: The connection to be released """ future = self._future_class() if self.size <= self.maxsize: if conn.closed: # conn has been closed pool_logger.info( "Released closed connection: {}".format(conn)) self._acquired.remove(conn) conn = None elif self._waiters: waiter = self._waiters.popleft() waiter.set_result(conn) pool_logger.debug( "Completeing future with connection: {}".format(conn)) else: self._pool.append(conn) self._acquired.remove(conn) future.set_result(None) else: future_conn = conn.close() future_conn.add_done_callback( lambda f: future.set_result(f.result())) return future
def cb(f): try: conn = f.result() except Exception as e: future.set_exception(e) else: pool_logger.debug("Got new connection {}".format(conn)) self._acquired.add(conn) future.set_result(conn) finally: self._acquiring -= 1
def acquire(self): # maybe have max connection open time here """ Acquire a connection from the Pool :returns: Future - :py:class:`asyncio.Future`, :py:class:`trollius.Future`, or :py:class:`tornado.concurrent.Future` """ future = self._future_class() if self._pool: while self._pool: conn = self._pool.popleft() if not conn.closed: pool_logger.debug("Reusing connection: {}".format(conn)) future.set_result(conn) self._acquired.add(conn) break else: pool_logger.debug( "Discarded closed connection: {}".format(conn)) elif self.size < self.maxsize: self._acquiring += 1 conn_future = self.graph.connect(force_release=self._force_release, pool=self) def cb(f): try: conn = f.result() except Exception as e: future.set_exception(e) else: pool_logger.debug("Got new connection {}".format(conn)) self._acquired.add(conn) future.set_result(conn) finally: self._acquiring -= 1 conn_future.add_done_callback(cb) else: pool_logger.debug( "Waiting for available conn on future: {}...".format(future)) self._waiters.append(future) return future
def acquire(self): # maybe have max connection open time here """ Acquire a connection from the Pool :returns: Future - :py:class:`asyncio.Future`, :py:class:`trollius.Future`, or :py:class:`tornado.concurrent.Future` """ future = self._future_class() if self._pool: while self._pool: conn = self._pool.popleft() if not conn.closed: pool_logger.debug("Reusing connection: {}".format(conn)) future.set_result(conn) self._acquired.add(conn) break else: pool_logger.debug( "Discarded closed connection: {}".format(conn)) elif self.size < self.maxsize: self._acquiring += 1 conn_future = self.graph.connect( force_release=self._force_release, pool=self) def cb(f): try: conn = f.result() except Exception as e: future.set_exception(e) else: pool_logger.debug("Got new connection {}".format(conn)) self._acquired.add(conn) future.set_result(conn) finally: self._acquiring -= 1 conn_future.add_done_callback(cb) else: pool_logger.debug( "Waiting for available conn on future: {}...".format(future)) self._waiters.append(future) return future