From 0a39ba6efacce0fd1fe08c6a68f30191424569a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E5=8D=9A?= <1016318004@qq.com> Date: Fri, 28 Feb 2025 10:22:47 +0800 Subject: [PATCH 1/5] =?UTF-8?q?fix(flow):=20=E4=BF=AE=E5=A4=8D=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E5=8A=A0=E8=BD=BD=E9=97=AE=E9=A2=98=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=8A=82=E7=82=B9=E7=B1=BB=E5=9E=8B=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复工作流文件不存在时的加载问题,增加日志警告并返回 None - 优化节点类型设置,将 NodeType 枚举改为 --- apps/entities/flow_topology.py | 4 ++-- apps/scheduler/pool/loader/flow.py | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/entities/flow_topology.py b/apps/entities/flow_topology.py index 469ee3f8..3d9fe2de 100644 --- a/apps/entities/flow_topology.py +++ b/apps/entities/flow_topology.py @@ -6,7 +6,7 @@ from typing import Any, Optional from pydantic import BaseModel, Field -from apps.entities.enum_var import EdgeType, NodeType +from apps.entities.enum_var import EdgeType class NodeMetaDataItem(BaseModel): @@ -52,7 +52,7 @@ class NodeItem(BaseModel): service_id: str = Field(alias="serviceId", default="") node_meta_data_id: str = Field(alias="nodeMetaDataId", default="") name: str = Field(default="") - type: str = Field(default=NodeType.NORMAL.value) + type: str = Field(default="normal") description: str = Field(default="") enable: bool = Field(default=True) parameters: dict[str, Any] = Field(default={}) diff --git a/apps/scheduler/pool/loader/flow.py b/apps/scheduler/pool/loader/flow.py index 42dad6d3..f9b27c01 100644 --- a/apps/scheduler/pool/loader/flow.py +++ b/apps/scheduler/pool/loader/flow.py @@ -23,6 +23,9 @@ class FlowLoader: """从文件系统中加载【单个】工作流""" LOGGER.info(f"[FlowLoader] Loading flow {flow_id} for app {app_id}...") flow_path = Path(config["SEMANTICS_DIR"]) / "app" / app_id / "flow" / f"{flow_id}.yaml" + if not await flow_path.exists(): + LOGGER.warning(f"[FlowLoader] Flow file {flow_path} does not exist.") + return None async with aiofiles.open(flow_path, encoding="utf-8") as f: flow_yaml = yaml.safe_load(await f.read()) @@ -55,7 +58,7 @@ class FlowLoader: LOGGER.error(err) raise ValueError(err) from e - LOGGER.info(f"[FlowLoader] Parsing steps of flow {flow_id} for app {app_id}...") + LOGGER.info(f"[FlowLoader] Parsing steps of flow {flow_id } for app {app_id}...") for key, step in flow_yaml["steps"].items(): if key == "start": step["name"] = "开始" -- Gitee From dd1c5790ceed3e9070aa500538c83847e8012ca3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E5=8D=9A?= <1016318004@qq.com> Date: Fri, 28 Feb 2025 10:53:43 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix(scheduler):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81=E5=8A=A0=E8=BD=BD=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 - 将 ValueError 异常改为返回 None,避免在解析工作流时因键错误导致的异常 - 优化了错误日志的记录,提高了日志的可读性 --- apps/scheduler/pool/loader/flow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/scheduler/pool/loader/flow.py b/apps/scheduler/pool/loader/flow.py index 969cdacc..de722273 100644 --- a/apps/scheduler/pool/loader/flow.py +++ b/apps/scheduler/pool/loader/flow.py @@ -60,7 +60,7 @@ class FlowLoader: except KeyError as e: err = f"Invalid edge type {edge['type']}" logger.exception(err) - raise ValueError(err) from e + return None logger.info("[FlowLoader] 解析工作流 %s 应用 %s 的步骤...", flow_id, app_id) for key, step in flow_yaml["steps"].items(): -- Gitee From 77e6c0eb36d833277a154039a2f0536dc4caac44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E5=8D=9A?= <1016318004@qq.com> Date: Fri, 28 Feb 2025 10:54:09 +0800 Subject: [PATCH 3/5] =?UTF-8?q?refactor(scheduler):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81=E5=8A=A0=E8=BD=BD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 FlowLoader 类中的逻辑,用返回 None 替代抛出 ValueError 异常 - 这种改动使得工作流加载过程更加健壮,避免了不必要的异常抛出 --- apps/scheduler/pool/loader/flow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/scheduler/pool/loader/flow.py b/apps/scheduler/pool/loader/flow.py index de722273..200feaf6 100644 --- a/apps/scheduler/pool/loader/flow.py +++ b/apps/scheduler/pool/loader/flow.py @@ -44,7 +44,7 @@ class FlowLoader: if "start" not in flow_yaml["steps"] or "end" not in flow_yaml["steps"]: err = f"工作流必须包含开始和结束节点:{flow_path!s}" logger.error(err) - raise ValueError(err) + return None logger.info("[FlowLoader] 解析工作流 %s 应用 %s 的边...", flow_id, app_id) for edge in flow_yaml["edges"]: -- Gitee From a8d034090b3c6e06d220ce74e192596edbd67bb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E5=8D=9A?= <1016318004@qq.com> Date: Fri, 28 Feb 2025 11:02:39 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat(flow=5Ftopology):=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=20NodeItem=20=E7=B1=BB=E4=B8=AD=20type=20=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E7=9A=84=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 NodeItem 类中的 type 字段默认值从 "normal" --- apps/entities/flow_topology.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/entities/flow_topology.py b/apps/entities/flow_topology.py index 3d9fe2de..d97a2a57 100644 --- a/apps/entities/flow_topology.py +++ b/apps/entities/flow_topology.py @@ -52,7 +52,7 @@ class NodeItem(BaseModel): service_id: str = Field(alias="serviceId", default="") node_meta_data_id: str = Field(alias="nodeMetaDataId", default="") name: str = Field(default="") - type: str = Field(default="normal") + type: str = Field(default="empty") description: str = Field(default="") enable: bool = Field(default=True) parameters: dict[str, Any] = Field(default={}) -- Gitee From 9f656fc6686008b4b34c35c55f69d7dd080ff172 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E5=8D=9A?= <1016318004@qq.com> Date: Fri, 28 Feb 2025 11:49:14 +0800 Subject: [PATCH 5/5] =?UTF-8?q?refactor:=20=E9=A6=96=E5=AD=97=E6=AF=8D?= =?UTF-8?q?=E5=A4=A7=E5=86=99=20NodeItem=20=E7=B1=BB=E7=9A=84=20type=20?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 NodeItem 类中 type 字段的默认值从 "empty" 修改为 "Empty" - 这个修改是为了统一命名规范,使默认值更加一致和可读 --- apps/entities/flow_topology.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/entities/flow_topology.py b/apps/entities/flow_topology.py index d97a2a57..f223c2c4 100644 --- a/apps/entities/flow_topology.py +++ b/apps/entities/flow_topology.py @@ -52,7 +52,7 @@ class NodeItem(BaseModel): service_id: str = Field(alias="serviceId", default="") node_meta_data_id: str = Field(alias="nodeMetaDataId", default="") name: str = Field(default="") - type: str = Field(default="empty") + type: str = Field(default="Empty") description: str = Field(default="") enable: bool = Field(default=True) parameters: dict[str, Any] = Field(default={}) -- Gitee