已开启
缺陷(infra): 九腿并发 cargo build 之 cargo-registry 共享缓存解包竞态(.cargo-ok File exists · #70 memory/verify-release) #134
kemeng创建于  1 天前
kemeng成员
1 天前 创建

类型: infra 缓存并发(非判据红 · 非产品回退) | 来源: ar R204(#70 memory/verify-release 红)
入下版, 不 bloque v1.10.13。

现象(release#70 一手 · console 逐字)

  • memory 腿 cargo build --release:failed to open /usr/local/cargo/registry/src/crates.xuanwu.openatom.cn-…/anstyle-1.0.14/.cargo-ok → File exists (os error 17) → exit 101。
  • verify-release 腿 cargo nextest:同形 rustls-webpki-0.103.16/.cargo-ok File exists (os error 17)。
  • 二腿 cargo-registry mount 均 sharing=shared(build/读面),九腿并发 ⇒ 两 cargo 进程同时解包同一 crate 到共享 registry/src ⇒ .cargo-ok 竞态。

家族(同族异面)

#88(全 locked ⇒ 9 腿排队 1403s)→ #96(install 写面回 locked)→ #193(fetch 段 locked + stale-ref 自愈)→ 本项(build 段 cargo-registry shared ⇒ 解包竞态)。

归属(核)

  • 主线可改: .xuanwu/release/Dockerfile.* 之 id=cargo-registry mount 之 sharing/id 配置(22 处)。
  • 平台侧无需改: 「九腿并发」系 release pipeline 设计(并行腿),非缺陷;BuildKit cache mount 语义由主线 Dockerfile 定。

修案(两候选 · 候裁取一)

  • 甲 统一 sharing=locked(cargo-registry 全域): 正确(无竞态),但回 #88 之「9 腿排队」(build 段长,排队代价大)。
  • 乙 按腿分 id(id=cargo-registry-<leg>,22 处): 每腿独占 registry 缓存 ⇒ 无跨腿竞态 ∧ 无跨腿排队;代价 = 每腿各自冷解包(磁盘/冷编时间),与既有 per-leg xwcode-*-target 一致。本席荐乙(承 R193 计划「P0-4 cargo-registry cache 按腿分 id」)。

影响面

  • cache_sharing_contract_leg 之「跨>1 档共享 id」判据:乙案后 cargo-registry 变私有 id(单档) ⇒ 契约腿须随改(私有 id 不受约束 · 或改判据认 per-leg 族)。
  • gate_face.manifest 重签(Dockerfile 在册)。

关联

#88/#96/#90/#193 · docs/V1_10_13_RULINGS_*(R204 令)。

likedislike
kemeng成员
1 天前 评论:

【ar R205 裁】取乙案(按腿分 id):id=cargo-registry-<leg>(22 处)。下版起做,本版不动器;排 v1.10.14 M0 修订首批。随改:cache_sharing_contract_leg(cargo-registry 变私有 id)+ gate_face.manifest 重签。

likedislike
kemeng成员
11 小时前 评论:

[ar审核 2026-11-05] 结论:✅可认领开发。建议:km优先(建议仅负载均衡,任何人可抢,接单即开分支占位,comm同步防撞)。依赖:无。规范:一issue一分支,PR过L3;改门禁/契约/完成判据语义者ar复核diff。方向:九腿并发cargo-registry解包竞态,km认领;与#96同族先贴复现。

likedislike