Cell 导出与导入
wesgine Cell 的可移植快照:导出、导入、数据范围与约束。
Cell 三位一体
Cell 同时是三件事:
| 身份 | 说明 |
|---|---|
| Runtime Instance | 运行时实例 |
| Tenant Unit | 租户隔离单元 |
| Portable Snapshot | 可移植快照 |
导出/导入是 Portable Snapshot 这一面的实现。
导出 API
HTTP
GET /admin/cells/{id}/export → tar.gz 流
SDK
reader, err := hyp.Cells().Export(ctx, cellID)
// reader 是 tar.gz 流
导出内容
| 包含 | 不包含 |
|---|---|
| meta.db | .scratch/ |
| sessions.db | .cell.lock |
| state.db | 临时计算文件 |
| skills/ | |
| knowledge/ | |
| workspace/(默认) |
排除 workspace
hyp.Cells().Export(ctx, cellID, ExportOpts{
SkipWorkspace: true, // 不含 workspace/
})
导入 API
HTTP
POST /admin/cells/import → tar.gz body(?overwrite=1)
SDK
newCellID, err := hyp.Cells().Import(ctx, reader, ImportOpts{
Overwrite: true, // 覆盖同 ID Cell
})
导入行为
正常导入
- Cell ID 从 tar.gz 内 metadata 读取
- ID 不冲突 → 创建新 Cell
- ID 冲突 →
overwrite=false时拒绝
覆盖导入
overwrite=true→ 停止现有 Cell → 替换数据 → 重启
CellPortableSpec
CellSpec 的 CellPortableSpec 子结构控制导出/导入行为:
type CellPortableSpec struct {
// 导出/导入时的行为配置
}
数据完整性
INV-LINE-01
导入时使用 internal/infra/lineio 读取,不用 bufio.Scanner。
避免 64KB 以上行被截断导致数据丢失。
三层 DB 完整性
导出前对每个 DB 做 VACUUM INTO(SQLiteBackup),保证原子一致性快照。
导入后验证 PRAGMA quick_check。
安全约束
DenyPaths 不随导出
CellSpec.DenyPaths 是路径边界声明,导出的 Cell 在新环境需要重新配置。
HostPaths 不包含
- 引擎不 MkdirAll
- 引擎不 Chmod
- 引擎不 GC
- 引擎不 Export
HostPaths 中的文件属于宿主环境,不是 Cell 的一部分。
典型用途
| 场景 | 操作 |
|---|---|
| 备份 | 定期 Export → 存储到对象存储 |
| 迁移 | Export → 传输 → Import 到新集群 |
| 复制 | Export → Import with 新 ID |
| 模板 | Export 标准配置的 Cell → 批量 Import |
相关文档
- Cell 生命周期 →
cell-lifecycle.md - 数据韧性 →
data-resilience.md - File I/O 模型 →
file-io-model.md