Files
KF-OnlineJudge/judge/crates/coordinator

持久化协调器

kf-coordinator --config /etc/kf-judge/coordinator.json 读取 0600、有界、单链接 私有配置。listen 为 loopback 地址,database_url 仅数值 loopback 或绝对 Unix socket, 使用继承 kf_oj_coordinator 的普通数据库角色;Backend Alembic 是唯一迁移入口。

workers 配置各 Worker 的 UUID 与独立64位十六进制 token,platform_token 与它们不同;同时配置可信 admission、lease_seconds(5–300)、 recovery_seconds(1–60)。内部身份与浏览器会话、短期执行租约分离。 新增 tokio-postgres 0.7.15 负责有限数据库连接和事务,sha2 0.10.9 绑定摘要。 依赖方向仍为 coordinator → contracts,不调用沙箱或维护另一套 migration。

/health/live 表示存活,/health/ready 核对数据库和角色权限。内部接口先认证, 请求有体积/期限/并发上限;claim 原子生成 attempt、可信数据库时间租约与递增 fence, 提交后才返回领取权。阶段更新、续租和报告都核对当前绑定与令牌;报告的用例、attempt 和终态同一事务提交,原样重复可确认,修改/旧 attempt 拒绝覆盖。

取消与过期先撤销执行权并进入 cancelling;实际清理证明到达前不释放容量。 清理失败保留 cleanup_failed,只有已确认停止的基础设施失败可按有限预算重试。 恢复扫描每批最多16项,待领取事件投递30秒后仍无执行权时补偿重新通知。 Worker 的实际停止证明与执行隔离需独立 VM 验收;普通数据库测试不代表 Linux 安全验收。

性能投影由 Coordinator 与验证后的最终 AC 同事务写入,平台仅有 SELECT 权限。 每个 Worker 可配置 measurement_epoch(64 位小写十六进制摘要)。运维须先核对实际 硬件、内核、CPU 调度/资源上限及测量配置,再固定该纪元;上述条件变化时更换纪元。 未配置纪元时正常判题与历史查询保留,统计不宣称可比较。组键还绑定不可变题目版本、 语言、精确工具链/镜像及编译/运行预算;它不含学生源码或提交身份。

kf-coordinator --config /etc/kf-judge/coordinator.json --backfill-performance UUID 是单条、有数据库期限的受控修复入口。它重新验证已保存报告的绑定、清单与摘要, 仅从原尝试已绑定的纪元生成缺失投影;重复运行不增加样本。新配置不能给无纪元的旧尝试 补造可信环境。原判题报告不改写。升级只有 Backend Alembic;存在纪元/投影时降级拒绝 丢弃数据,须另行进行显式数据保留迁移,不能用删除成绩绕过。