修复: B-03b-R10③工作流事件补execution_id治本并发串扰(emit填+消费exec_id守卫)

This commit is contained in:
2026-06-17 03:36:38 +08:00
parent cf829a1933
commit bac3c76fa2
3 changed files with 31 additions and 3 deletions

View File

@@ -73,11 +73,23 @@ pub enum WorkflowEvent {
waiting_node: NodeId,
},
/// 工作流执行完成
///
/// B-03b-R10 ③(波17 治本): execution_id 字段标识本次终态事件归属的工作流执行。
/// 此前该变体不带 execution_id,AppState.event_bus 全局单例下并发工作流的终态事件
/// 会被 forward 循环的 matches! 完成判定(workflow.rs:159-163 只看变体不看 exec_id)误判,
/// 致任一工作流终态触发所有 forward 循环 break(过早断他人链)。
/// #[serde(default)] 向后兼容: 老事件/老 DB 反序列化(无 execution_id)填空串不炸。
WorkflowCompleted {
#[serde(default)]
execution_id: String,
total_duration_ms: u64,
},
/// 工作流执行失败
///
/// B-03b-R10 ③(波17 治本): execution_id 字段标识本次终态事件归属的工作流执行(同 WorkflowCompleted)。
WorkflowFailed {
#[serde(default)]
execution_id: String,
error: String,
failed_node: NodeId,
},

View File

@@ -179,8 +179,11 @@ impl DagExecutor {
}
let total = start.elapsed().as_millis() as u64;
// B-03b-R10 ③: WorkflowCompleted 携带 execution_id,供 forward 循环按 exec_id 匹配
// (全局 event_bus 单例下并发工作流的终态事件不再误触发他人 forward 的完成判定)。
self.event_bus
.send(WorkflowEvent::WorkflowCompleted {
execution_id: self.execution_id.clone(),
total_duration_ms: total,
})
.await;