Skip to content

fix(submit-chain): 完善异常与取消传播#705

Open
zhibeigg wants to merge 1 commit into
TabooLib:dev/6.3.0from
zhibeigg:fix/703-submit-chain-completion
Open

fix(submit-chain): 完善异常与取消传播#705
zhibeigg wants to merge 1 commit into
TabooLib:dev/6.3.0from
zhibeigg:fix/703-submit-chain-completion

Conversation

@zhibeigg

@zhibeigg zhibeigg commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

原有问题

Submit Chain 对协程、平台调度任务和 CompletableFuture 的完成状态桥接不完整:

  • 链节点或回调抛出异常时,协程可能已经失败,但对外 Future 仍保持 pending。
  • 调用方取消 Future 时,正在运行的协程和重复调度任务不会同步停止。
  • 同步/异步重复链在回调异常、调度提交失败或插件关闭时,存在 continuation 不恢复、平台任务继续运行的问题。

典型触发场景与后果

  • 命令、表单或业务流程中的任意链节点抛错:后续逻辑不执行,但调用方也收不到失败,表现为操作永久无响应。
  • 外部超时后取消 Chain 返回的 Future:内部任务仍继续修改状态或重复执行,形成幽灵任务。
  • 插件禁用时调度器拒绝新任务,或重复链某一轮回调抛错:协程可能永久挂起,重复任务和引用无法释放。

本 PR 修改

  • 使用可取消协程任务桥接 CompletableFuture,链执行失败时让 Future 异常完成。
  • 将外部 Future 取消反向传播到正在运行的 Chain 协程。
  • 将同步和异步重复链统一为 suspendCancellableCoroutine 完成模型。
  • 在回调或调度提交抛错时取消已创建的平台任务并恢复异常;协程取消时同步停止重复任务。
  • 增加正常完成、节点异常、外部取消、重复回调异常和调度失败测试。

修改目的

让 Chain 的成功、异常和取消语义保持一致,调用方始终能观察到最终结果,并确保取消后不再有后台任务继续执行。

兼容性与行为变化

  • 不修改公开方法签名。
  • 原本可能永久等待的失败链现在会明确异常完成。
  • 取消 Chain 返回的 Future 会真正停止对应协程及重复平台任务。

验证

  • ./gradlew :module:basic:basic-submit-chain:test --rerun-tasks --no-parallel
  • ./gradlew :module:basic:basic-submit-chain:build --rerun-tasks --no-parallel
  • git diff --check

Refs #703

确保链任务和重复调度在失败或取消时终止,避免 Future 与协程永久挂起。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant