feat(sandbox): retain replay records across explicit factory cycles

This commit is contained in:
2026-10-13 01:36:36 +08:00
parent a55de23fd6
commit 033d31d420
5 changed files with 306 additions and 25 deletions
+12
View File
@@ -39,6 +39,18 @@ API 存活检查和前端预览不依赖这些容器,可以先独立启动。
回收后安排新记录周期,不自动删除记录。清理失败保留身份租约并停止新分配;
重启只根据已记录归属和 inode 回收,未知/外来内容保留并拒绝启动。
工厂 `--max-requests` 由可信 Root 启动参数选择,范围1–4096,默认4096;
它限制当前记录周期的受理次数,不改变学生预算或已记录 ID 的拒绝规则。
`kf-sandbox rotate-factory-cycle --config ROOT_CONFIG --cycle-id ID` 是独立的
Root 维护入口:在受限监督器作用域中,核对受保护配置/镜像、取得工厂排他锁,
并读回任务、身份、捕获目录和委派 cgroup 为空、控制 socket 已消失后,才把
当前请求记录保留到 Root 私有 `factory/cycles/`,fsync文件与目录后清空当前记录。
最多保留64个有界周期;历史 ID 在后续启动仍用于拒绝重放。正常启动、重启、
寿命结束和容量用尽不会调用轮换或删除任何历史记录。归档完成但当前记录未清空
的中断状态拒绝启动,需在停止/排空后显式使用同一个 cycle ID 重试;未知或
不完整记录保留并拒绝,不能通过删日志恢复。该入口不启动服务,也不证明隔离。
新安装路径下的实际轮换、崩溃恢复、跨周期重放拒绝与资源读回仍需独立 VM 验收。
`kf-worker judge-submission` 是受控本地适配入口。常驻 `kf-worker serve --config`
使用有界 AMQP 通知和经过服务身份认证的 Coordinator claim;配置与依赖见
[判题工程说明](../judge/README.md#单机持久化协调与常驻-worker)。