コード例 #1
0
    def get_connection(self):
        """get available connection

        :return: Connection
        """
        with self._lock:
            if self._close:
                logging.error('The pool is closed')
                raise NotValidConnectionException()

            try:
                ok_num = self.get_ok_servers_num()
                if ok_num == 0:
                    return None
                max_con_per_address = int(
                    self._configs.max_connection_pool_size / ok_num)
                try_count = 0
                while try_count <= len(self._addresses):
                    self._pos = (self._pos + 1) % len(self._addresses)
                    addr = self._addresses[self._pos]
                    if self._addresses_status[addr] == self.S_OK:
                        for connection in self._connections[addr]:
                            if not connection.is_used:
                                if connection.ping():
                                    connection.is_used = True
                                    logging.info(
                                        'Get connection to {}'.format(addr))
                                    return connection

                        if len(self._connections[addr]) < max_con_per_address:
                            connection = Connection()
                            if self._ssl_configs is None:
                                connection.open(addr[0], addr[1],
                                                self._configs.timeout)
                            else:
                                connection.open_SSL(addr[0], addr[1],
                                                    self._configs.timeout,
                                                    self._ssl_configs)
                            connection.is_used = True
                            self._connections[addr].append(connection)
                            logging.info('Get connection to {}'.format(addr))
                            return connection
                    else:
                        for connection in list(self._connections[addr]):
                            if not connection.is_used:
                                self._connections[addr].remove(connection)
                    try_count = try_count + 1
                return None
            except Exception as ex:
                logging.error('Get connection failed: {}'.format(ex))
                return None
コード例 #2
0
 def get_session(self, user_name, password, retry_connect=True):
     """
     get session
     :param user_name:
     :param password:
     :param retry_connect: if auto retry connect
     :return: void
     """
     connection = self.get_connection()
     if connection is None:
         raise NotValidConnectionException()
     try:
         auth_result = connection.authenticate(user_name, password)
         return Session(connection, auth_result, self, retry_connect)
     except Exception:
         raise
コード例 #3
0
    def get_session(self, user_name, password, retry_connect=True):
        """get session

        :param user_name: the user name to authenticate graphd
        :param password: the password to authenticate graphd
        :param retry_connect:
        :return: Session
        """
        connection = self.get_connection()
        if connection is None:
            raise NotValidConnectionException()
        try:
            auth_result = connection.authenticate(user_name, password)
            return Session(connection, auth_result, self, retry_connect)
        except Exception:
            raise