Skip to content

test(bootstrap): 运行时测试 - 关闭前清掉客户端空闲连接,修偶发超时 - #411

Open
enderzcx wants to merge 1 commit into
mainfrom
test/runtime-close-flake
Open

enderzcx wants to merge 1 commit into
mainfrom
test/runtime-close-flake

Conversation

@enderzcx

@enderzcx enderzcx commented Nov 5, 2026

Copy link
Copy Markdown
Collaborator

为什么

internal/bootstrap 的 TestRuntimeOpenStartClose 偶尔报「关闭 HTTP 服务:context deadline exceeded」。

关闭超时时抓了 goroutine 快照:没有任何请求在处理,只剩测试客户端空闲池里的一条连接,服务端那头还在等它的第一个请求。Go 的 HTTP 客户端在等连接时可能会多拨一条,用不上就放进空闲池;服务端要等这种从没收到请求的连接满 5 秒才把它当空闲连接关掉,而测试给的关闭时限正好是 5 秒。

这是测试客户端留下的连接,不是运行时关闭有问题。

改了什么

只改测试:调用 runtime.Close 之前,先 http.DefaultClient.CloseIdleConnections()。

验证

同一份测试在 #408 的分支上失败得最频繁,所以在那里对比:

  • 修之前:连跑 17 次,失败 4 次。
  • 修之后:连跑 10 次,全部通过。

main 和 #407 的分支各跑 10 次、12 次,修之前也都没失败过,所以 main 上没有复现这个失败;这里的依据是上面的连接快照和 #408 上的对比。

🤖 Generated with Claude Code

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