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
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
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