Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

报告 009 · 取消竞争、备份恢复与冲突证据

文档索引 · 总体设计 · 研究状态 · 当前方案

日期:2026-09-19。受控进程与本地 SQLite 实验,不是数据库集群、Kubernetes 或设备验证。

1. 条件与执行

先固定 18 例预登记,再编写独立脚本。provider 保存进入/关闭状态,world 独立追加效果,authority 保存证据与资源账务;库间无事务。Python 3.14.7、SQLite 3.53.4,WAL/FULL,子进程通过管道屏障协调。

备份和恢复使用 SQLite backup API,并在实验进程已退出、连接关闭后进行。world 不随 provider 回退,模拟真实效果不因业务备份恢复而撤销。恢复分支只读 provider 状态,效果表用于评分。B4/B5 的入口关闭、旧进程隔离和新工作资源/预算核对由实验驱动保证,不是自动灾备实现。

首次完整运行通过:18 例、52 个子进程、2 次 SIGKILL、270 项检查,错误 0。原始 JSON 保存事件、参数、中间状态和终态。所有子进程均按预期退出,无兜底清理强杀;断言数含屏障/退出码,不是独立样本数,也不表示故障概率。

当时的 docker 命令实际进入 Podman,查询配置因运行目录只读失败,未启动容器或安装软件。实际成绩仅来自上述 SQLite 与受控子进程条件;其他数据库、集群及网络协议的恢复/取消行为未计入通过数。

2. 对照结果

场景观察设计含义
A1 缓存进入状态取消已返回 closed,旧执行者仍产生效果 1入口不能依据事务外缓存放行
A2 取消先提交后续进入被拒,效果 0关闭与进入在同一记录上互斥
A3 进入先提交取消仅返回 cancel_requested,最终效果 1已进入的取消不是未执行证明
A4 关闭提交后丢确认重试仍 closed,后续进入拒绝查询/重试应复用关闭状态
A5 关闭提交前终止回滚为 queued,后续效果 1未提交请求不能被解释为取消完成
A6 取消早于接纳墓碑拒绝迟到接纳及进入无记录也要关闭原请求的未来入口
A7 真实事务竞争本实验进入赢,取消仅受理,效果 1结局符合二选一;另一个顺序由 A2 固定覆盖
B1 旧快照重用代号 1历史代号 2 已完成,旧代号 1 再产生效果,累计 2持久记录也可因恢复而倒退
B2 恢复后仅加一再次得到历史代号 2,累计效果 2加一不能证明超过丢失的历史
B3 仅更换 RecoveryID旧身份被拒,但新身份重发原键,累计效果 2新身份不能替代效果去重/核对
B4/B5 隔离旧键后开放新工作相同 provider 终态对应原效果 1/0;原键被拒,新键均完成 1恢复歧义须保留,同时允许经独立核对的新责任推进
C1 相同事件覆盖内容running 被 stopped 覆盖,版本仅 1,返还额度 1已到达的矛盾证据被抹掉
C2 保留内容版本两份内容均保留,预留 held,额度 0同一事件内容冲突阻止自动结算
C3 完全相同的重送证据版本 1、释放账 1、outbox 1,额度 1正常重送可幂等处理,不必冻结
C4 事务外缓存证据矛盾已持久接入,缓存入账仍返还额度 1保存冲突但不参与提交检查仍不够
C5 入账时复核同样到达顺序下拒绝入账,额度 0、预留 held证据可用性必须在提交时重新判定
C6 结算后才到矛盾原账及已返还额度保留,资源待核对,新分配拒绝迟到矛盾产生新核对责任,不覆写历史或假装已撤销物理释放

A1 的最终状态为 finished,中间 closed 及回执见轨迹;不能只查终态漏掉错误承诺。C1/C4 的失败含义是“在已知矛盾下仍自动结算”,不是证明哪一条证据在物理上为真。C6 没有先分配 r2 再撤回的实验,因此不保证能追回已分配容量。

3. 采用与否决

  • 采用取消与进入同一事务裁决。 queued 可关闭,缺失键保留关闭墓碑;entered 只记录取消请求,另外跟踪实际停止和效果。提交后才确认关闭。
  • 采用受控恢复关闭流程。 旧快照恢复先保持入口关闭、隔离旧执行者、登记新 RecoveryID,再重建指派、预算及历史责任。丢失连续性的旧键默认待核对,不能由新身份自动重发。
  • 采用不可覆盖的证据与冲突状态。 source+ProofID 的相同内容是重送,不同内容保留为冲突;入账事务检查冲突。结算后才到矛盾,保留原账并暂停受影响资源的新分配,追加核对责任。

否决缓存 queued 放行、恢复后计数加一即可复用、新 UUID 即可重放、最后到达证据覆盖、仅事务外检查证据五种充分性保证。详细协议、资料支持与剩余验收见恢复决策。

4. 范围与限制

实验覆盖指定时序,并非穷尽并发。SQLite 的写锁代替了真实多行并发,未验证 PostgreSQL 中的锁顺序、隔离重试、复制、主权或数据掉电耐久性。A7 只运行一次真实竞争,不作统计结论。

B4/B5 不测试“外部恢复控制本身也被还原”“仍活跃旧工作越过屏障”或“备份中不存在的已发生请求”。实际恢复须覆盖丢失日志区间及可能迟到的旧请求,不能只隔离快照里看得到的 queued。来源认证、新 RecoveryID 不复用、资源独立性及预算重建均为假设;身份必须由接收方验证,单改发送端字段没有意义。

C 只覆盖同 source+ProofID 的互相矛盾内容及一个资源域。不同事件、不同来源、不同时间的事实可能是正常状态变化,不能一概当冲突;自动语义判断、证据修正权限、冲突消解后解封和已重分配资源的处理均待验证。固定小对象的 SHA-256 内容比较不是密码学认证或通用证据判真。

运行命令见预登记;输出路径排他创建,复跑必须换路径。本实验没有修订或重跑。旧 E0~E8d 证据保持不变。

文件SHA-256
预登记 README.md92c4ea467ce57003e3857587570e2ace5254d916d5f52a9b54f988c62383bc73
experiment.pyeab37547550ea66082e3385f354d2c1a6309ae74fd21e88ba556a014b7d6bf09
cancel-restore-evidence.jsone670d184debd08cadcb93e329e8b616d147b8171f51a29042ebb34618e86012b

数据可用性

本报告公开实验条件、汇总统计和失败分析。原始输入、脚本及逐次运行记录未随报告发布,因此不能仅凭本文独立复现实验。