feat: persist workflow signals and arbitrate poll completion

This commit is contained in:
2026-09-18 03:52:50 +08:00
parent e2baffbe37
commit 7d5ebfcb09
34 changed files with 1958 additions and 113 deletions

View File

@@ -255,6 +255,11 @@ func activateWorkflowStep(ctx context.Context, tx *sql.Tx, g *workflowGraph, row
if err := saveWorkflowClock(ctx, tx, g, row, "TIMER", row.view.Revision+1, until); err != nil {
return err
}
} else if c.Wait.Kind == "SIGNAL" {
// 先扫描早到信号;未匹配时运行器按原等待截止继续持久化。
if err := saveWorkflowClock(ctx, tx, g, row, "SIGNAL", row.view.Revision+1, now); err != nil {
return err
}
}
}
if c.Task != nil {
@@ -274,7 +279,11 @@ func activateWorkflowStep(ctx context.Context, tx *sql.Tx, g *workflowGraph, row
}
}
if c.Kind == "POLL" {
return saveWorkflowClock(ctx, tx, g, row, "POLL", row.view.Revision+1, deadline)
due := deadline
if c.Wait != nil {
due = now
}
return saveWorkflowClock(ctx, tx, g, row, "POLL", row.view.Revision+1, due)
}
return nil
}