From acf17c752bf9154c78b96ac6634610307e52f027 Mon Sep 17 00:00:00 2001 From: Gao Hanxiang Date: Thu, 22 Jul 2021 08:11:14 -0400 Subject: [PATCH] fix: Add timeout to keystone session When a network failure occurs, the openstack client will be blocked for a long time. Set a timeout on the session to feedback network problem as soon as possible. Change-Id: I2eec95b18241b0bf2103ad3dfa1efd2774f2bd77 --- libs/skyline-apiserver/skyline_apiserver/api/v1/login.py | 5 +++-- .../skyline_apiserver/client/openstack/system.py | 3 ++- libs/skyline-apiserver/skyline_apiserver/client/utils.py | 4 ++-- libs/skyline-apiserver/skyline_apiserver/types/constants.py | 2 ++ 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/libs/skyline-apiserver/skyline_apiserver/api/v1/login.py b/libs/skyline-apiserver/skyline_apiserver/api/v1/login.py index 108201a..9684937 100644 --- a/libs/skyline-apiserver/skyline_apiserver/api/v1/login.py +++ b/libs/skyline-apiserver/skyline_apiserver/api/v1/login.py @@ -16,7 +16,7 @@ from __future__ import annotations from fastapi import APIRouter, Depends, HTTPException, Request, Response, status from keystoneauth1.identity.v3 import Password -from keystoneauth1.session import Session as osSession +from keystoneauth1.session import Session from keystoneclient.client import Client as KeystoneClient from skyline_log import LOG @@ -36,6 +36,7 @@ from skyline_apiserver.core.security import ( generate_profile_by_token, parse_access_token, ) +from skyline_apiserver.types import constants from skyline_apiserver.db import api as db_api router = APIRouter() @@ -78,7 +79,7 @@ async def login(credential: schemas.Credential, response: Response): password=credential.password, reauthenticate=False, ) - session = osSession(auth=unscope_auth, verify=False) + session = Session(auth=unscope_auth, verify=False, timeout=constants.DEFAULT_TIMEOUT) unscope_client = KeystoneClient(session=session, endpoint=auth_url) project_scope = unscope_client.auth.projects() # we must get the project_scope with enabled project diff --git a/libs/skyline-apiserver/skyline_apiserver/client/openstack/system.py b/libs/skyline-apiserver/skyline_apiserver/client/openstack/system.py index 6617e27..10c4a1f 100644 --- a/libs/skyline-apiserver/skyline_apiserver/client/openstack/system.py +++ b/libs/skyline-apiserver/skyline_apiserver/client/openstack/system.py @@ -25,6 +25,7 @@ from starlette.concurrency import run_in_threadpool from skyline_apiserver.client import utils from skyline_apiserver.client.utils import get_system_session from skyline_apiserver.config import CONF +from skyline_apiserver.types import constants async def get_project_scope_token( @@ -40,7 +41,7 @@ async def get_project_scope_token( kwargs = {"project_id": project_id} scope_auth = Token(auth_url=auth_url, token=keystone_token, **kwargs) - session = Session(auth=scope_auth, verify=False) + session = Session(auth=scope_auth, verify=False, timeout=constants.DEFAULT_TIMEOUT) keystone_token = session.get_token() return keystone_token diff --git a/libs/skyline-apiserver/skyline_apiserver/client/utils.py b/libs/skyline-apiserver/skyline_apiserver/client/utils.py index 61870ec..0abb333 100644 --- a/libs/skyline-apiserver/skyline_apiserver/client/utils.py +++ b/libs/skyline-apiserver/skyline_apiserver/client/utils.py @@ -47,7 +47,7 @@ async def generate_session(profile: schemas.Profile) -> Any: "project_id": profile.project.id, } auth = Token(**kwargs) - session = Session(auth=auth, verify=False) + session = Session(auth=auth, verify=False, timeout=constants.DEFAULT_TIMEOUT) session.auth.auth_ref = await run_in_threadpool(session.auth.get_auth_ref, session) return session @@ -66,7 +66,7 @@ def get_system_session() -> Session: project_domain_name=CONF.openstack.system_project_domain, reauthenticate=True, ) - SESSION = Session(auth=auth, verify=False) + SESSION = Session(auth=auth, verify=False, timeout=constants.DEFAULT_TIMEOUT) return SESSION diff --git a/libs/skyline-apiserver/skyline_apiserver/types/constants.py b/libs/skyline-apiserver/skyline_apiserver/types/constants.py index 4ab4919..900b515 100644 --- a/libs/skyline-apiserver/skyline_apiserver/types/constants.py +++ b/libs/skyline-apiserver/skyline_apiserver/types/constants.py @@ -35,3 +35,5 @@ ID_UUID_RANGE_STEP = 100 SETTINGS_HIDDEN_SET = set() SETTINGS_RESTART_SET = set() + +DEFAULT_TIMEOUT = 30