fix(release): 收紧分发热路径与事务边界
bat-rust / Build and test Rust (push) Canceled after 0s
bat-rust / Build and test Go API (push) Canceled after 0s

This commit is contained in:
2026-09-12 22:22:11 +08:00
parent f2c20367a6
commit 786b739f99
17 changed files with 835 additions and 124 deletions
+11 -5
View File
@@ -38,7 +38,7 @@
crowdin-textunit-queue.json # Crowdin worker 离线输入队列
official-sync-snapshot.json # 常在 active root / current 下
official-launcher-bootstrap.json # 官方 launcher 引导链版本化产物
official-cas-reuse-references.json # 当前 release 获取的 CAS 引用
official-cas-reuse-references.json # 当前 release 获取的 CAS 引用和 ownership_id
prod-clientpatch.bluearchiveyostar.com/
<root_token>/
TableBundles/
@@ -110,7 +110,10 @@ manifest 做轻量选择,HTTP 热路径不重新执行完整 release auditl
localized publish/rollback 先取得 `.localized-release.lock`,并在 output root 下记录
`.localized-transaction.json`。current、version-state 和 version 目录的切换按日志阶段
推进;下一次写操作会先恢复或完成未决事务,避免跨进程并发写入和中断后留下半发布状态。
推进;publish 只有最终 `verified` phase 才能 roll-forward下一次写操作会先恢复或完成
未决事务,避免跨进程并发写入和中断后留下半发布状态。`release.cleanup execute` 先取得
同一 official `.official-sync.lock`,再按固定顺序取得 localized 锁并在持锁状态下重建
计划;dry-run 不占用 official mutation lock。
`release.cleanup` 先生成 dry-run 计划和 `plan_id`,执行时重新计算并比对计划。current、
rollback previous、active/in-progress、localized source official、state/manifest/CAS
@@ -132,9 +135,12 @@ reference、无法确认 ownership 的对象均保留;只删除重新验证后
跨文件系统时复制到 staging 内的临时文件并原子 rename,旧 `versions/<id>` 目录
保持不可变。
从 CAS 物化资源时,`official-cas-reuse-references.json` 记录每个获取的对象引用,
文件带版本字段且允许重复 object ID。孤儿 staging 或显式 release 清理必须先按
清单减少 CAS 引用,再删除目录;CAS 对象损坏、缺失或元数据不一致时只产生诊断,
从 CAS 物化资源时,`official-cas-reuse-references.json` 首次创建时生成并持久化
`ownership_id`,记录每个获取的对象引用;文件带版本字段且允许重复 object ID。
没有 `ownership_id` 的旧清单保留 legacy ownership key,不在读取时随机迁移。
孤儿 staging 或显式 release 清理必须先按
清单减少 CAS 引用,再删除目录;cleanup execute 与官方同步共用
`.official-sync.lock`localized cleanup 使用 `.localized-release.lock`。CAS 对象损坏、缺失或元数据不一致时只产生诊断,
回退网络下载,不发布未经校验的文件。
---