
shenleiandClaude Opus 5
e926759ff5
test(net): 去掉 net 测试的 flaky,顺带把整套 ctest 从 78.7s 降到 8.7s
全量 ctest 连续两次各挂一个 net 测试,且挂的不是同一个,压测后定位到
四个互相独立的原因,全部在测试自身,产品代码未改动。
1. accept_loopback(): poll() 的 `<= 0` 把 EINTR 当成对端从未连接,且单片
500ms 超时在有负载时不够。50 轮压测里 4 次失败全部源于此。改为 EINTR
重试 + 5s 截止时间(listener 本就非阻塞,超时后 accept 不会挂住)。
2. :570 的 pump 循环条件抄自上面的死端口用例,但此处 connect 会成功,
stage 先经过 LoggingIn,循环提前一步退出。
3. 同文件 5 处手写 pump 循环只给 10-20ms 等真实 loopback socket。新增
pump_until(session, want, max_ms=2000) 统一替换,等的是断言真正关心
的那个状态。
4. net_loopback_test 的 10 处 run(..., N, []{return false;}) 是固定空转
而非等待条件。服务端批量收包改用该批最后一个包的标志作条件(TCP 有序),
客户端事件用本地累加器在谓词里 drain。
提速:两处 this-*-host-must-not-resolve.invalid 换成带空标签的名字。本机
解析器不按 RFC 6761 本地拒绝 .invalid,每次发往上游等满 30s 超时;空标签
让 getaddrinfo 在语法层返回同一个 EAI_NONAME,实测 <10ms。
net_classic_session_test 61.2s -> 3.5s;loopback 改条件退出后 0.94s。
验证:net_classic_session_test 100/100(修复前 50 轮挂 4 轮);
net_loopback_test 100/100(修复前单独跑第 7 轮即挂);全量 ctest 27/27;
port_map.py check 0 error;8 个 pack key 值均未入库。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 10:26:51 +09:00
..
2026-09-11 14:58:22 +08:00
2026-09-21 16:38:59 -07:00
2026-08-31 20:02:12 +09:00
2026-09-01 18:49:28 +09:00
2026-09-01 18:49:28 +09:00
2026-09-12 21:29:21 +09:00
2026-09-23 10:26:51 +09:00
2026-09-21 16:38:59 -07:00
2026-09-21 16:38:59 -07:00
2026-09-21 16:38:59 -07:00
2026-09-23 10:26:51 +09:00
2026-08-31 20:02:12 +09:00
2026-09-21 16:38:59 -07:00
2026-09-21 16:38:59 -07:00
2026-08-31 20:02:12 +09:00
2026-09-22 20:02:15 +09:00
2026-09-23 01:31:17 +09:00
2026-09-23 09:16:37 +09:00
2026-09-23 01:34:08 +09:00
2026-09-23 01:34:08 +09:00
2026-09-23 08:27:35 +09:00
2026-09-11 14:58:22 +08:00
2026-09-11 14:58:22 +08:00