From a2ee42763a9f0d98fa124ef30190c821ba6f6110 Mon Sep 17 00:00:00 2001 From: Manohar Reddy Date: Fri, 30 Jan 2026 11:42:02 +0530 Subject: [PATCH 1/2] catch log TimeoutError in branch list api --- src/api/organization/project/branch/__init__.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/api/organization/project/branch/__init__.py b/src/api/organization/project/branch/__init__.py index e92568809..c540db96a 100644 --- a/src/api/organization/project/branch/__init__.py +++ b/src/api/organization/project/branch/__init__.py @@ -971,6 +971,15 @@ async def _get_node_port( service = await kube_service.get_service(namespace, svc_name) ports = service.spec.ports return ports[0].node_port if ports else None + except TimeoutError as exc: + logger.error( + "Timed out while retrieving service %s in namespace %s for branch %s", + svc_name, + namespace, + branch_id, + exc_info=exc, + ) + return None except (VelaKubernetesError, AttributeError, IndexError): return None From 530e59c8f746d04283509763e3e3afbf67df755b Mon Sep 17 00:00:00 2001 From: Manohar Reddy Date: Fri, 30 Jan 2026 11:51:22 +0530 Subject: [PATCH 2/2] move TimeoutError to kubernetes module and raise VelaKubernetesError --- src/api/organization/project/branch/__init__.py | 9 --------- src/deployment/kubernetes/_util.py | 13 +++++++++++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/api/organization/project/branch/__init__.py b/src/api/organization/project/branch/__init__.py index c540db96a..e92568809 100644 --- a/src/api/organization/project/branch/__init__.py +++ b/src/api/organization/project/branch/__init__.py @@ -971,15 +971,6 @@ async def _get_node_port( service = await kube_service.get_service(namespace, svc_name) ports = service.spec.ports return ports[0].node_port if ports else None - except TimeoutError as exc: - logger.error( - "Timed out while retrieving service %s in namespace %s for branch %s", - svc_name, - namespace, - branch_id, - exc_info=exc, - ) - return None except (VelaKubernetesError, AttributeError, IndexError): return None diff --git a/src/deployment/kubernetes/_util.py b/src/deployment/kubernetes/_util.py index b7f6c4a9f..2954fc9a3 100644 --- a/src/deployment/kubernetes/_util.py +++ b/src/deployment/kubernetes/_util.py @@ -1,6 +1,7 @@ +import logging from contextlib import asynccontextmanager -from aiohttp import ClientTimeout +from aiohttp import ClientError, ClientTimeout from kubernetes_asyncio.client import ApiClient, CoreV1Api, CustomObjectsApi, DiscoveryV1Api, StorageV1Api from kubernetes_asyncio.config import load_incluster_config, load_kube_config from kubernetes_asyncio.config.config_exception import ConfigException @@ -8,6 +9,7 @@ from ...exceptions import VelaKubernetesError KUBE_API_SERVER_TIMEOUT = 10 +logger = logging.getLogger(__name__) class ApiClientWithTimeout(ApiClient): @@ -20,7 +22,14 @@ async def call_api(self, *args, _request_timeout=None, **kwargs): _request_timeout = self.default_timeout if "_request_timeout" not in kwargs: kwargs["_request_timeout"] = _request_timeout - return await super().call_api(*args, **kwargs) + try: + return await super().call_api(*args, **kwargs) + except TimeoutError as exc: + logger.error("Kubernetes API request timed out (timeout=%ss)", _request_timeout, exc_info=exc) + raise VelaKubernetesError("Kubernetes API request timed out") from exc + except ClientError as exc: + logger.error("Kubernetes API request failed with client error", exc_info=exc) + raise VelaKubernetesError("Kubernetes API client error") from exc async def _ensure_kubeconfig() -> None: