feat: implement production cas v1

This commit is contained in:
2026-06-28 12:39:17 +08:00
parent dd53e3054e
commit b202d7b231
33 changed files with 1082 additions and 447 deletions
+37 -38
View File
@@ -28,7 +28,7 @@
限制:
- 原项目历史未恢复。
- 需要创建首次基线提交。
- 后续历史从当前基线提交开始
验收:
@@ -36,28 +36,30 @@
### G-002CAS 有两套实现边界
现象:
状态:**已关闭**
原现象:
- `crates/bat-cas-engine/src/storage.rs` 有文件系统存储。
- `infrastructure/src/cas/filesystem.rs` 也实现了文件系统 CAS repository。
影响
处理结果
- 后续引用计数、GC、元数据会重复实现。
- FFI/Go/领域仓储边界容易混乱
- `crates/bat-cas-engine` 新增 `repository` 组合层,成为 CAS 核心实现。
- `infrastructure/src/cas/filesystem.rs` 已改为 `bat-core::CasRepository` 适配层
- infrastructure 不再直接写对象文件,不再维护自己的引用计数逻辑。
建议
验收证据
- `bat-cas-engine` 负责核心 CAS 引擎。
- `infrastructure` 只负责把核心引擎适配到 `bat-core::repositories::CasRepository`
验收:
- 文件写入、读取、引用计数、GC 只在一个核心实现中维护。
- `bat-cas-engine::repository::FileSystemCasRepository`
- `bat_infrastructure::FileSystemCasRepository`
- `cargo test --workspace`
### G-003CAS 引用计数和 GC 未实现
现象:
状态:**已关闭**
原现象:
- `FileSystemCasRepository::add_reference` 返回固定 `1`
- `remove_reference` 返回固定 `0`
@@ -65,19 +67,15 @@
- `gc` 返回固定 `0`
- `crates/bat-cas-engine/src/refcount.rs` 是占位。
影响
处理结果
- 无法安全删除对象
- 无法支持多版本共享和垃圾回收
- 不符合项目最终目标
- `crates/bat-cas-engine/src/refcount.rs` 使用 SQLite 保存对象元数据和引用计数
- `store()` 会存储对象并增加引用计数
- `add_reference()``remove_reference()``get_reference_count()` 已持久化
- `gc()` 删除引用计数为 0 的对象和元数据。
- `gc_candidates()` 提供 dry-run 能力。
建议
- 设计 `ObjectMetadata``ReferenceRecord``GcPolicy`
- 使用事务化元数据后端。
- GC 必须包含安全窗口和 dry-run。
验收:
验收证据
- 引用计数增减有持久化测试。
- GC 不删除仍被引用对象。
@@ -89,17 +87,21 @@
### G-004:CAS 写入不是生产级原子流程
现象:
状态:**已关闭**
原现象:
- 当前写入直接写目标路径。
- 缺少临时文件、fsync、原子 rename、并发冲突处理。
影响
处理结果
- 写入中断可能留下损坏对象
- 多进程/多任务并发写入存在竞态
- `FileSystemStorage::put()` 使用临时文件写入、文件 sync、原子 rename、目录 sync
- 读取对象时强制 Hash 校验
- 并发写入相同内容只保留一个对象,引用计数按调用次数递增。
- 损坏对象读取返回 `HashMismatch`
验收:
验收证据
- 写入失败不会留下可见半成品对象。
- 并发写入相同内容只产生一个对象。
@@ -297,14 +299,11 @@
## 6. 当前关闭顺序建议
1. G-002
2. G-003
3. G-004
4. G-007
5. G-008
6. G-005
7. G-011
8. G-012
9. G-006
1. G-007
2. G-008
3. G-005
4. G-011
5. G-012
6. G-006
这个顺序优先建立可信工作区和基础存储,再推进资源同步、解析、翻译和补丁。