Files
rpki/scripts/verification

verification-only 使用说明

verification-only 用于复核启用验证缓存的最新成功 normal run。它冻结当前仓库视图,关闭 PP、ROA、child certificate cache、prefetch、VCIR 持久化和网络访问,在源 CIR 的同一验证时间重新执行完整验证,并比较 CCR 的 MFT、VRP、VAP、TA、router key 五类 state digest。

前提

  • 源 run 必须是当前 state DB 对应的最新成功 normal run。
  • 源 run 必须包含 input.cir、result.ccr、run-summary.json 和 validation-contract.json。
  • state root 必须包含 db/work-db、db/repo-bytes.db 和 meta/current-state-binding.json。
  • 源 normal run 必须启用至少一种验证缓存;仅启用 transport prefetch 不算验证缓存。
  • verification-only 与 normal soak 共用 state/locks/state-execution.lock,不能绕过 wrapper 并发执行。

执行

在 portable package 根目录执行:

./scripts/verification/run_verification_only.sh \
  --source-run-dir /data/ours-rp/runs/run_0123 \
  --source-state-root /data/ours-rp/state \
  --out-dir /data/ours-rp/verification-runs/run_0123

验证时间自动从源 input.cir 读取,不接受命令行覆盖。成功后 scratch work-db 默认删除;排障时可加 --keep-scratch。

输出

  • input.cir、result.ccr、report.json
  • vrps.csv、vaps.csv
  • stage-timing.json、validation-events.jsonl
  • validation-contract.json、verification-meta.json
  • compare/ccr-state-compare.json、compare/ccr-state-compare.md
  • stdout.log、stderr.log、process-time.txt、wrapper-timing.json

通过条件是 compare JSON 中 stateDigestMatch=true。producedAt 不参与比较。

隔离保证

  • 不分配 normal run id,不更新 lifecycle、periodic snapshot 计数和 retention。
  • 源 work-db 只用于创建 checkpoint,后续写入只发生在独立 scratch work-db。
  • 源 repo-bytes.db 以只读模式打开。
  • 输出目录必须不存在,防止覆盖旧验证证据。

常见失败

  • current state binding:所选 run 已不是当前 state 对应的最新成功 run,需选择 binding 指向的 run。
  • differs from current state binding:源 CIR、CCR 或 contract 已变化,不能继续复核。
  • blob is missing:repository view 引用的原始 bytes 不完整,验证不会启动。
  • did not enable a validation cache:源 run 不是缓存正确性对比的有效基准。
  • CCR state digest mismatch:查看 compare/ 下 JSON/Markdown,按不匹配状态集合继续排查。