Skip to content

Commit b153002

Browse files
committed
fix: 全局变量放到schedulis props中#AI Commit#
1 parent ffdab10 commit b153002

5 files changed

Lines changed: 371 additions & 127 deletions

File tree

Lines changed: 120 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,125 @@
1-
# 工作流分支节点设计文档
1+
# 工作流分支节点设计文档
22

33
## 1. 文档信息
44
- 版本:1.21.0
55
- 状态:已更新
6-
- 设计范围:DSS 发布层分支适配 + 语义对齐要求
6+
- 设计范围:DSS 分支节点运行态、发布层分支适配与语义对齐
77

88
## 2. 设计结论
9-
本版本采用“DSS 规则配置 + 发布为 decision + 语义对齐 DSS FlowExecution”的方案:
9+
本版本采用“DSS 规则配置统一为编号属性 + DSS 运行态直接选路 + 发布为 decision + 语义对齐 DSS FlowExecution”的方案:
1010
- DSS 节点类型保持 `workflow.branch`
1111
- 规则配置保持 `branch.rules`
12-
- 发布到 Schedulis 时分支节点 `.job` 转换为 `type=decision`
12+
- `branch.rules` 格式统一为 `condition.N / on.success.N / on.failure.N`
13+
- DSS 运行态直接解析该格式并完成分支选路。
14+
- 发布到 Schedulis 时分支节点 `.job` 转换为 `type=decision`,沿用相同编号属性。
1315
- Schedulis 运行期必须按 DSS FlowExecution 语义判定分支下游。
1416

1517
## 3. 总体架构
1618

1719
### 3.1 关键模块
20+
- `BranchExpressionUtils`
21+
- DSS 运行态解析 `branch.rules`
22+
- 按编号聚合 `condition.N / on.success.N / on.failure.N`
23+
- 提供条件表达式求值能力。
24+
- `BranchNodeRunner`
25+
- DSS 运行态分支节点执行器。
26+
- 按编号顺序评估规则。
27+
- 条件为真时选择 `on.success.N`,条件为假时选择 `on.failure.N`
28+
- `DSSFlowServiceImpl`
29+
- 保存/校验阶段解析分支规则。
30+
- 校验 success/failure 目标是否属于当前分支节点的真实下游。
1831
- `BranchWorkflowRewriteConverter`
1932
- 提取分支规则并补充 route 元数据。
33+
- `LinkisJobConverter`
34+
- 将统一后的 `branch.rules` 转换为 `decision` 节点属性:`condition.N/on.success.N/on.failure.N`
2035
- `BranchRouteJobTuning`
2136
- 将分支节点类型调优为 `decision`
22-
- `LinkisJobConverter`
23-
- 生成 decision 节点属性:`condition.N/on.success.N/on.failure.N`
2437
- `AzkabanDssJobType`
2538
- 仅保留动态变量提取与 props 输出,不承担 guard/route 分支裁剪。
2639

2740
### 3.2 架构示意图
2841
```mermaid
2942
flowchart LR
30-
A[workflow.branch + branch.rules] --> B[BranchWorkflowRewriteConverter]
31-
B --> C[LinkisJobConverter]
32-
C --> D[BranchRouteJobTuning]
33-
D --> E[type=decision .job]
34-
E --> F[Schedulis]
35-
F --> G[按 DSS FlowExecution 语义调度]
43+
A[workflow.branch + branch.rules] --> B[BranchExpressionUtils]
44+
B --> C[BranchNodeRunner]
45+
B --> D[DSSFlowServiceImpl]
46+
C --> E[DSS 运行态按编号规则选路]
47+
A --> F[BranchWorkflowRewriteConverter]
48+
F --> G[LinkisJobConverter]
49+
G --> H[BranchRouteJobTuning]
50+
H --> I[type=decision .job]
51+
I --> J[Schedulis]
52+
J --> K[按 DSS FlowExecution 语义调度]
3653
```
3754

3855
## 4. 核心设计
3956

40-
### 4.1 决策节点发布设计
57+
### 4.1 规则格式统一设计
58+
统一后的 `branch.rules` 使用如下形式:
59+
```properties
60+
condition.1=amount == 101
61+
on.success.1=sql_2762
62+
on.failure.1=sql_1358
63+
condition.2=amount > 200
64+
on.success.2=sql_8277
65+
on.failure.2=sql_7655
66+
```
67+
68+
约束:
69+
1. 支持多个 `condition.N`,规则数量不限制。
70+
2. 规则之间支持换行或 `;` 分隔。
71+
3. 同一编号下,`condition.N` 必填。
72+
4. 同一编号下,`on.success.N``on.failure.N` 至少一个非空。
73+
5. 不支持 `default``else``*` 默认分支关键字。
74+
75+
### 4.2 DSS 运行态解析与选路设计
76+
DSS 运行态读取 `branch.rules` 后,处理流程如下:
77+
1. 按换行或 `;` 切分原始文本。
78+
2. 按 key 前缀识别 `condition.``on.success.``on.failure.`
79+
3. 依据编号 `N` 聚合同一组规则。
80+
4. 按编号升序逐条求值:
81+
- 条件成立,取 `on.success.N`
82+
- 条件不成立,取 `on.failure.N`
83+
5. 若当前选出的目标为空,或目标不是当前分支节点真实下游,则继续评估下一条规则。
84+
6. 若全部规则均未选中有效下游,则分支节点执行失败。
85+
86+
### 4.3 DSS 运行态流程图
87+
```mermaid
88+
flowchart TD
89+
A[读取 branch.rules] --> B[按换行或分号切分]
90+
B --> C[按编号聚合规则]
91+
C --> D[按编号顺序评估 condition.N]
92+
D --> E{condition.N 是否成立}
93+
E -->|是| F[选择 on.success.N]
94+
E -->|否| G[选择 on.failure.N]
95+
F --> H{目标是否非空且为真实下游}
96+
G --> H
97+
H -->|是| I[选中该下游节点]
98+
H -->|否| J[继续评估下一条规则]
99+
J --> D
100+
```
101+
102+
### 4.4 决策节点发布设计
41103
分支节点发布规则:
42-
1. 读取 `wds.branch.route.rule.text`
43-
2. `;` 切分规则
44-
3. 每条规则按最后一个 `=` 切分条件与目标
45-
4. 输出
104+
1. 读取统一后的 `branch.rules`
105+
2. 按换行或 `;` 切分规则条目
106+
3. 识别 `condition.N``on.success.N``on.failure.N`
107+
4. 按编号聚合并输出
46108
- `condition.N`
47109
- `on.success.N`
48-
- `on.failure.N=`
49-
5. `default=xxx` 转换为 `condition.N=true`
110+
- `on.failure.N`
111+
5. 发布后的 `.job` 使用:
112+
- `type=decision`
113+
- 连续编号 decision 属性
50114

51-
### 4.2 字段过滤设计
115+
### 4.5 字段过滤设计
52116
`type=decision` 时,不输出 linkis 专属字段:
53117
- `linkis.version`
54118
- `linkistype`
55119
- `command`
56120

57-
### 4.3 分支语义对齐设计(重点)
58-
对齐依据:DSS `FlowDependencyResolverImpl`
121+
### 4.6 分支语义对齐设计(重点)
122+
对齐依据:DSS FlowExecution 语义
59123

60124
关键语义:
61125
1. 父节点未全部完成 -> 等待。
@@ -66,8 +130,9 @@ flowchart LR
66130
特别说明:
67131
- 混合上游场景(分支未命中 + 普通父成功)必须 `skip`
68132
- 该语义优先于“任一父成功即可执行”。
133+
- DSS 运行态的 `on.failure.N` 仅决定分支节点本身选中的下游目标,不改变下游节点的依赖判定矩阵。
69134

70-
### 4.4 状态判定流程图
135+
### 4.7 状态判定流程图
71136
```mermaid
72137
flowchart TD
73138
A[候选节点X] --> B{父节点是否全部完成?}
@@ -86,35 +151,49 @@ flowchart TD
86151
- 结果:X 必须 `skip`
87152
- 原因:分支未命中判定优先,严格对齐 DSS FlowExecution。
88153

89-
### 5.2 示例
154+
### 5.2 编号规则示例
90155
输入:
91-
```text
92-
branch.rules = b==200=sql_1345;b<50=sql_9000
156+
```properties
157+
condition.1=amount == 101
158+
on.success.1=sql_2762
159+
on.failure.1=sql_1358
160+
condition.2=amount > 200
161+
on.success.2=sql_8277
162+
on.failure.2=sql_7655
93163
```
94164

95-
输出:
165+
DSS 运行态语义:
166+
-`amount == 101`,优先选择 `sql_2762`
167+
-`amount != 101`,优先选择 `sql_1358`
168+
- 若第一组规则未落到真实下游,再继续评估第 2 组规则
169+
170+
发布输出:
96171
```properties
97172
type=decision
98-
condition.1=b==200
99-
on.success.1=sql_1345
100-
on.failure.1=
101-
condition.2=b<50
102-
on.success.2=sql_9000
103-
on.failure.2=
173+
condition.1=amount == 101
174+
on.success.1=sql_2762
175+
on.failure.1=sql_1358
176+
condition.2=amount > 200
177+
on.success.2=sql_8277
178+
on.failure.2=sql_7655
104179
```
105180

106181
## 6. 实现约束
107-
1. 不再依赖 DSS `guard` 运行时裁剪语义来决定下游执行。
108-
2. 不允许 Schedulis 语义偏离 DSS 矩阵规则。
109-
3. jobtype 仅负责动态变量进入 props,供 decision 条件使用。
182+
1. DSS 与 Schedulis 使用统一的编号规则格式。
183+
2. 不再使用旧的 `条件=目标节点名` 分支规则格式。
184+
3. 不再依赖 DSS `guard` 运行时裁剪语义来决定下游执行。
185+
4. 不允许 Schedulis 语义偏离 DSS 矩阵规则。
186+
5. jobtype 仅负责动态变量进入 props,供 decision 条件使用。
110187

111188
## 7. 验证要点
112-
1. 分支节点发布后是 `type=decision`
113-
2. decision 属性展开正确。
114-
3. 混合上游编号10场景验证为 `skip`
115-
4. 与 DSS FlowExecution 语义逐条对齐通过。
189+
1. DSS 运行态能够正确解析多个 `condition.N`
190+
2. DSS 运行态能够在条件不成立时走 `on.failure.N`
191+
3. 分支节点发布后是 `type=decision`
192+
4. decision 属性展开正确。
193+
5. 混合上游编号10场景验证为 `skip`
194+
6. 与 DSS FlowExecution 语义逐条对齐通过。
116195

117196
## 8. 非目标
118197
- 不引入新的分支 DSL。
119198
- 不新增分支数据库模型。
120-
- 不改动分支节点前端配置入口。
199+
- 不改动分支节点前端配置入口。

0 commit comments

Comments
 (0)