AskaEth
ad99303a95
fix(java/update): 三处模块外的一锤子 GET 也上界,失败时报出卡在哪一段(M290)
`download_bytes`(M289)修掉之后,core 里还剩三处裸 `send()`,都在「拿上游文本/JSON」的
路径上:`game/java/api.rs::fetch_latest`(Adoptium latest)、`game/java/net.rs::get_text`
(四家发行版的一锤子 GET)、`update/github.rs::get_candidate_text`(更新清单)。上游接了连接
就装死时它们永不返回,与 M289 修掉的是同族形态。
改动(全部复用 M289 的构造点,没有第二套超时包装):
* `download/http.rs` 新增 `text_bounded`(正文按 `read_step` 的空闲判定读成 `String`,与
`bytes.rs` 的读循环同口径)与 `default_deadlines()`(取 `EngineConfig::default()` 的两段界,
不另抄秒数);`send_bounded` 的签名逐字节未动,`transfer.rs`/`chunked.rs`/`bytes.rs` 三处
调用方零改动。
* 三处一律 `send_bounded`(等响应头)+ `text_bounded`(等字节):失败时 `message` 里带
`StallReport` 的阶段(`await_headers` / `await_bytes`)与已收/预期/无进展三个数。
这三条路径只用到这两档:没有分块回收、也没有引擎许可等待,所以 `await_chunk_join` /
`acquire_permit` 不适用。
* `update/github.rs` 的界取 `engine.config().deadlines()`(手里有引擎就不抄默认值)。
正常路径零改变:`fetch_latest` / `get_text` 的公开签名与错误分类一字未动(`fetch_latest` 的
404 文案与 hint 保留),`update` 的 `github_cases` 全部断言未改。
离线用例(`game::java::net::tests`,6 条;夹具 `net::probe::Hanging` 也是 M290 新增):
silent 服务端 ⇒ 引擎自己在 200ms 上界内返回(外层 5s 护栏没触发),并断言 message 含
「等响应头/await_headers」;正文停住 ⇒ 「等字节/await_bytes」;200 + 真 JSON ⇒ 正文逐字节
原样(含中文)。变异已实跑:`send_bounded` 退回裸 `send()` 三处各自在外层 5s 处挂断;
`text_bounded` 退回 `response.text()` ⇒ 等字节用例 5s 挂断;正文改成空串 ⇒ 正常路径用例红。
门禁:cargo check(core+cli, --all-targets)/ test --lib(892 passed)/ --test game(120)/
--test launch(91)/ --test engine_mock(17)/ clippy -D warnings / fmt --check,退出码全 0。
2026-11-13 00:22:21 +08:00
..
2026-11-09 07:56:33 +08:00
2026-11-06 19:16:15 +08:00
2026-11-09 02:14:32 +08:00
2026-11-09 02:33:08 +08:00
2026-11-09 01:59:05 +08:00
2026-11-13 00:22:21 +08:00
2026-11-08 13:34:29 +08:00
2026-11-09 01:59:05 +08:00
2026-11-06 19:16:15 +08:00
2026-11-09 02:14:32 +08:00
2026-11-08 13:06:57 +08:00
2026-11-09 01:59:05 +08:00
2026-11-09 02:14:32 +08:00
2026-11-06 19:16:15 +08:00
2026-11-11 22:01:26 +08:00
2026-11-06 19:16:15 +08:00
2026-11-06 19:16:15 +08:00