fix(rfc-001): 解决小墨 review 的生产风险问题
- 删除 Guard 表达式(when),条件判断由 Workflow 自己处理 - Workflow queue 加 max_queue 上限(默认 100) - compute 超时改为两级:soft timeout + grace_period hard kill - 热更新加 drain_timeout,防止长 thread 阻塞 reload 小橘 <xiaoju@shazhou.work>
This commit is contained in:
@@ -139,7 +139,6 @@ reflexes:
|
||||
# Sense → Workflow(启动 thread)
|
||||
- workflow: cleanup
|
||||
on: ["disk-usage"]
|
||||
when: "signal.value > 90" # 条件守卫,可选
|
||||
```
|
||||
|
||||
两种触发条件:
|
||||
@@ -207,12 +206,14 @@ workflows:
|
||||
code-review:
|
||||
concurrency: 3
|
||||
overflow: queue
|
||||
max_queue: 20 # 队列上限,超出丢弃最旧请求
|
||||
```
|
||||
|
||||
- **concurrency**:同时允许的最大活跃 Thread 数
|
||||
- **overflow**:达到上限时的策略
|
||||
- `drop`:丢弃,适用于幂等操作(如 cleanup)
|
||||
- `queue`:排队等待,适用于每次都需要执行的操作(如 deploy)
|
||||
- **max_queue**(仅 `overflow: queue` 时生效):队列上限,默认 100。超出时丢弃最旧的请求
|
||||
|
||||
不需要 throttle——Workflow 的触发频率由上游 Sense 的 throttle 控制,Workflow 层只管并发。
|
||||
|
||||
@@ -336,7 +337,8 @@ Sense 的运行时属性(`group`、`throttle`、`timeout`)在 `nerve.yaml`
|
||||
|
||||
- **group**:隔离分组,同 group 共享 worker 进程
|
||||
- **throttle**:最小触发间隔,防止高频 signal 导致的无意义重算
|
||||
- **timeout**:compute 超时上限,超时不杀 worker,只记录错误 signal
|
||||
- **timeout**:compute 超时上限(soft timeout),超时后 abort 当前 compute,记录错误 signal
|
||||
- **grace_period**:soft timeout 后的宽限期(默认 timeout × 3),超过后 hard kill 整个 group worker 并 respawn。防止跑飞的 compute 堵住同 group
|
||||
|
||||
### 5.4 Thread 状态持久化与恢复
|
||||
|
||||
@@ -389,7 +391,7 @@ roles: [
|
||||
| 变化 | 处理 |
|
||||
|------|------|
|
||||
| sense ts 文件修改 | 等当前 compute 完成 → kill 对应 group worker → respawn |
|
||||
| workflow ts 文件修改 | 等所有活跃 thread 完成 → kill worker → respawn |
|
||||
| workflow ts 文件修改 | drain(等活跃 thread 完成,`drain_timeout` 后 force kill + 标记 crashed)→ respawn |
|
||||
| nerve.yaml 修改 | 主进程重新解析,diff 变更(见下) |
|
||||
|
||||
nerve.yaml diff 处理:
|
||||
@@ -409,7 +411,7 @@ nerve.yaml diff 处理:
|
||||
| 情况 | 处理 |
|
||||
|------|------|
|
||||
| compute 抛异常 | 记录错误 signal,下次触发重试 |
|
||||
| compute 超时 | abort,记录超时 signal |
|
||||
| compute 超时 | soft timeout → abort + 记录错误 signal;grace_period 后 hard kill worker + respawn |
|
||||
| 存储写入失败 | 记录错误,不发 signal(未成功产出) |
|
||||
| nerve.yaml 语法错误 | daemon 拒绝加载,保持当前配置 |
|
||||
| sense ts 语法错误 | 该 group worker 加载失败,其他 group 正常 |
|
||||
@@ -464,7 +466,7 @@ data ReflexCondition
|
||||
|
||||
data ReflexAction
|
||||
= TriggerCompute SenseId -- 触发 Sense 重算
|
||||
| StartWorkflow WorkflowId Guard -- 启动 Workflow Thread
|
||||
| StartWorkflow WorkflowId -- 启动 Workflow Thread
|
||||
-- Reflex 构成 Event Mesh:Signal → ReflexCondition → ReflexAction
|
||||
|
||||
-- Workflow 内部
|
||||
|
||||
Reference in New Issue
Block a user