Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    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