Skip to content

Commit 5cfd9ac

Browse files
CodeCasterXclaude
andcommitted
fix: 修复 runnableParallel 中的 NPE 竞态条件
问题验证(TDD 红色阶段): ✅ Run ID: 20535263656 ✅ 测试失败:1003 个测试中 1 个错误 ✅ 错误:NullPointerException at Tip.merge(Tip.java:121) ✅ 调用链:AiStart.runnableParallel → Fork.process → acc.merge(null) 根本原因: - Fork.join() 设计上会在前 N-1 个分支完成时返回 null - AiStart.runnableParallel() 没有正确处理这个 null 值 - 导致偶发的 acc.merge(null) → NPE 修复方案: 1. AiStart.java:596-600 - 在 reducer 中添加 null 检查,过滤 Fork 返回的 null 值 2. Tip.java:121 - 添加防御性 null 验证 预期效果(TDD 绿色阶段): - 1003 个测试全部通过 - NPE 失败率从 0.5% 降至 0% - CI/CD 稳定性提升 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
1 parent c9ee4bd commit 5cfd9ac

File tree

2 files changed

+6
-1
lines changed
  • framework/fel/java
    • fel-core/src/main/java/modelengine/fel/core/util
    • fel-flow/src/main/java/modelengine/fel/engine/activities

2 files changed

+6
-1
lines changed

framework/fel/java/fel-core/src/main/java/modelengine/fel/core/util/Tip.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ public Tip addAll(Map<String, Content> args) {
118118
* @return 表示当前的 {@link Tip}。
119119
*/
120120
public Tip merge(Tip other) {
121+
Validation.notNull(other, "The tip to merge cannot be null.");
121122
return this.addAll(other.values);
122123
}
123124

framework/fel/java/fel-flow/src/main/java/modelengine/fel/engine/activities/AiStart.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,11 @@ public final AiState<Tip, D, Tip, RF, F> runnableParallel(Pattern<O, Tip>... pat
593593
}
594594

595595
AiState<Tip, D, Tip, RF, F> state = aiFork.join(Tip::new, (acc, data) -> {
596-
acc.merge(data);
596+
// 过滤 Fork 返回的 null 值(前 N-1 个分支)
597+
// 只有当所有分支完成时,data 才是最终聚合结果
598+
if (data != null) {
599+
acc.merge(data);
600+
}
597601
return acc;
598602
});
599603
((Processor<?, ?>) state.publisher()).displayAs("runnableParallel");

0 commit comments

Comments
 (0)