From 29c8edf78b6a6b54dac8ac7ad3b6410ff1c07ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E9=B8=BF=E5=AE=87?= Date: Tue, 25 Feb 2025 21:10:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A2=9E=E5=BC=BA=20OpenAPILoader=20?= =?UTF-8?q?=E5=92=8C=20ServiceLoader=20=E7=9A=84=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 史鸿宇 --- apps/scheduler/pool/loader/openapi.py | 7 ++++++- apps/scheduler/pool/loader/service.py | 12 ++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/apps/scheduler/pool/loader/openapi.py b/apps/scheduler/pool/loader/openapi.py index 9aa23fde..2fd0ad53 100644 --- a/apps/scheduler/pool/loader/openapi.py +++ b/apps/scheduler/pool/loader/openapi.py @@ -151,7 +151,12 @@ class OpenAPILoader: raise RuntimeError(err) from e yaml_filename = yaml_path.name - return await self._process_spec(service_id, yaml_filename, spec, service_metadata) + try: + return await self._process_spec(service_id, yaml_filename, spec, service_metadata) + except Exception as e: + err = f"处理OpenAPI文档{yaml_filename}失败:{e}" + LOGGER.error(msg=err) + raise RuntimeError(err) from e async def save_one(self, yaml_path: Path, yaml_dict: dict[str, Any]) -> None: """保存单个OpenAPI文档""" diff --git a/apps/scheduler/pool/loader/service.py b/apps/scheduler/pool/loader/service.py index 51392b82..803ebe0e 100644 --- a/apps/scheduler/pool/loader/service.py +++ b/apps/scheduler/pool/loader/service.py @@ -40,10 +40,14 @@ class ServiceLoader: # 载入OpenAPI文档,获取Node列表 openapi_loader = OpenAPILoader.remote() - nodes = [ - openapi_loader.load_one.remote(service_id, yaml_path, metadata) # type: ignore[arg-type] - async for yaml_path in (service_path / "openapi").rglob("*.yaml") - ] + try: + nodes = [ + openapi_loader.load_one.remote(service_id, yaml_path, metadata) # type: ignore[arg-type] + async for yaml_path in (service_path / "openapi").rglob("*.yaml") + ] + except Exception as e: + LOGGER.error(f"[ServiceLoader] 服务 {service_id} 文件损坏: {e}") + return data = await asyncio.gather(*nodes) try: nodes = data[0] -- Gitee