报告 007 · 提供者核对、取消与回收
日期:2026-09-19。证据类型:受控子进程与本地持久化实验;不是网络、Kubernetes 或设备实测。
1. 问题与实验条件
E0/E8b 已说明效果与回执分离会产生 unknown。本实验检查恢复时怎样处理缺失查询、迟到接纳、去重记录过期,以及取消、退出和效果判定之间的关系。
执行前固定了12 个场景。实验脚本只使用 Python 标准库;父进程驱动提供者接纳与恢复策略,实际效果由独立工作进程写入 world 数据库。provider 数据库另存接纳与回执,二者各自 SQLite WAL/FULL,没有共同事务。管道屏障固定效果前和效果后、终态前两个切点。
环境为 Python 3.14.7、SQLite 3.53.4。网络套接字创建被沙箱以 EPERM 拒绝,未发现 kubectl/kind/minikube/k3d 或 NVIDIA 工具及设备节点,因此改用管道;完整探测记录保留。最初探测脚本在 socket 构造处提前退出,随后仅修正探测的异常捕获并完成记录;未执行网络实验,也未连接已有集群。
恢复策略只读取 provider 记录;world 表仅用于事后评分。取消是否合作、键是否保留和是否支持原子关闭均为显式实验变量,不假装所有服务具有这些能力。效果缺失回执通过屏障保留,未注入真实网络丢包。
2. 结果
一次完整执行包含 12 例、15 个工作子进程、2 次 SIGKILL、107 项断言,实验错误 0。断言包括屏障、退出和预期反例,107 不是独立样本数量。各场景为确定次序,无概率或性能推断;完整逐事件结果包含全部决策、查询及效果真值。
| 场景 | 实测结果 | 可以据此修订的设计 |
|---|---|---|
| A1 缺终态后换键重试 | 效果 2 次 | 缺失完成回执不能触发新业务键执行 |
| A2 查原接纳并等待 | 效果 1 次;同键换参数被拒绝 | 在接纳记录仍保留且原工作存活的范围内,沿用原键核对可避免重开工作 |
| B1 查询无记录后迟到接纳 | 已宣称 not_applied,随后实际效果 1 次 | 即便本地查询当时准确,无记录也不能关闭仍在途的请求 |
| B2 原子关闭键后迟到接纳 | 请求被拒绝,效果 0 次 | 关闭证明还须包含后续同键接纳被拒绝;这是额外提供者契约 |
| C1 删除键与回执后同键重投 | 累计效果 2 次 | 稳定键离开其保留范围后不再自动幂等 |
| C2 删除详情但保留禁止重开墓碑 | 累计效果 1 次;重投被拒绝 | 阻止重开与恢复详细结果是两种能力;墓碑不重建丢失回执 |
| D1 取消受理即归还额度 | 容量 1 同时出现 2 个存活工作进程 | 受理取消不能证明已释放实际占用 |
| D2 等原工作退出再放行 | 最多 1 个;前后两个工作均完成 | 等待可维持互斥但增加后继等待;不是靠拒绝所有工作通过 |
| E1 效果前合作取消 | 效果 0,not_applied,进程退出 | 可信提供者的效果前停止路径可以给出未发生证据 |
| E2 效果后才取消 | 效果 1,confirmed,进程退出 | 迟到取消不能覆盖已发生事实 |
| F1/F2 效果前/后 SIGKILL | 提供者可见记录完全相同,实际效果 0/1;进程均已退出 | 停止证据与效果证据必须独立;已无本地计算不代表动作未发生 |
3. 不可区分性与适用范围
F 两例在恢复侧均看到同一个键、相同参数摘要、running、无取消、无回执;真值分别为 0 与 1。只以该记录和“进程已退出”为输入的判定无法同时正确输出两个不同结论。因此在本实验观察能力下保留 unknown 是必要的;增加可信目标侧查询可以改变观察能力,并未被否决。
B 说明“当时没有接纳”与“以后也不会接纳”不同。候选 not_applied 证据应带身份、范围及关闭条件;单次缺失、等待一个固定时长或删除某个对象都不能自动提供这个条件。原子关闭、拒绝过期请求或停止所有派发通路各有契约,当前只测试原子关闭的给定顺序。
D 测量的是实际存活且占用实验席位的工作进程,不是 GPU kernel、CPU 忙占时间或设备停止时延。F 的 wait/退出只覆盖该直接子进程;它若再派生远端任务,退出也不能证明远端已停止。本实验没有子任务树、网络服务、权威域接管或提供者自身崩溃;接纳到启动之间的恢复也未覆盖。
4. 设计决定
- 修改查询契约。 区分已接纳、可信终态、确定关闭且未执行、记录缺失/已过期/不可达;查询附对象身份、适用范围和证据时点。缺失不转 not_applied。
- 修改回收粒度。 按资源分别保存停止与回收证据。可确认释放的本地计算席位可先归还;未知效果的核对责任、语义冲突和未核实的远端占用继续保存。
- 保留业务键及保留边界。 同键绑定参数,超过保证窗口停止自动重投;自主提供者可研究墓碑或过期拒绝。外部服务无此能力时保留 unknown,不以新键绕过。
- 明确等待的终点。 核对有预算、下次时间及负责人;耗尽核对预算进入待处置状态,不自动改成成功、未发生或释放全部责任。新行动或补偿是新决策,旧证据保留。
平台与 GPU 的具体适配由一手资料论证补充。资料能排除不成立的保证,不能替代真实集群和显卡验证。
运行命令:python3 experiments/provider-reconciliation/experiment.py --output experiments/results/provider-reconciliation.json。脚本拒绝覆盖已有输出,复跑应换路径。预登记与脚本在本实验执行后保持不变;实验首次完整运行通过,无实验失败被覆盖。
| 材料 | SHA-256 |
|---|---|
| 预登记 README.md | 504769ca92a1eafefc39b72c5f3128bdbfc396b5e71ec8436ae85ba2da7e6e9a |
| experiment.py | d6a6efc6ee7c6c3c680a873316b0097e5392fa2fb2c323e900315651929a7a56 |
| provider-reconciliation.json | 4691eefcae437d9c40f09cf2a6a78e124dcdec2858ef617ad8083ccaa7b47027 |
临时数据库用于独立场景,结束后清理;效果行、查询、屏障、进程退出码已保存到原始 JSON。既有 E0~E8b 的脚本与数据未修改。
数据可用性
本报告公开实验条件、汇总统计和失败分析。原始输入、脚本及逐次运行记录未随报告发布,因此不能仅凭本文独立复现实验。