执行摘要
修复 mock engine 测试关闭竞态条件
修复 Buildkite CI 中 abort_cancels_active_request_and_emits_terminal_output 测试因关闭顺序竞态导致的 Connection reset by peer 错误。
可快速合并,改动量小且修复明确。适合开发者精读以理解异步清理中的竞态模式。
仅有 BugenZhao 审批并回复 "Thanks!",无实质技术讨论。
修复 Buildkite CI 中 abort_cancels_active_request_and_emits_terminal_output 测试因关闭顺序竞态导致的 Connection reset by peer 错误。
可快速合并,改动量小且修复明确。适合开发者精读以理解异步清理中的竞态模式。
仅有 BugenZhao 审批并回复 "Thanks!",无实质技术讨论。
修改 shutdown_mock 函数中两个异步操作的顺序:
rust/src/mock-engine/src/tests.rsshutdown.cancel() 移到 client.shutdown().await 之前,确保 mock engine 的取消感知循环先收到取消信号,再关闭客户端传输。mock_engine_connects_over_tcp、mock_engine_connects_over_ipc、mock_engine_registers_multiple_identities 等)的关闭路径都更可靠。| 文件 | 模块 | 状态 | 重要度 |
|---|---|---|---|
rust/src/mock-engine/src/tests.rs |
测试 | modified | 5.1 |
rust/src/mock-engine/src/tests.rs
core-logic
核心变更文件,调整 shutdown_mock 中取消信号与客户端关闭的顺序。
// 测试关闭辅助函数:先取消 mock engine,再关闭客户端传输
async fn shutdown_mock(
client: EngineCoreClient,
shutdown: CancellationToken,
task: tokio::task::JoinHandle<Result<()>>,
) {
// 先发送取消信号,让 mock engine 走正常关闭路径
shutdown.cancel();
// 再关闭客户端传输,避免 mock engine 将传输关闭误判为意外 I/O 错误
client.shutdown().await.expect("client shutdown");
task.await.expect("mock join").expect("mock run");
}
当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。
风险极低。仅改变两个异步操作的顺序,且所有测试都使用同一清理函数,逻辑清晰。如果 mock engine 的取消循环依赖于客户端传输已关闭,则可能导致死锁,但从代码上下文看,取消信号是独立的 CancellationToken,不依赖客户端状态。
仅影响 mock engine 测试的关闭路径,消除 CI 中断行为,不影响生产逻辑或用户功能。
当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。
参与讨论