为建议拒绝回退同步添加一个确定性回归测试

作者: ma2bd创建于 2026年6月5日更新于 2026年8月10日

`ChainClient::process_pending_block_without_prepare` 现在在拒绝的提案未推进本地共识状态时,会回退到显式的 `synchronize_chain_state`,以可靠地吸收延迟拉取每个验证者的拉取(`Updater::send_block_proposal`)所遗漏的锁定区块。这种延迟拉取遗漏是一个定时竞争:`communicate_with_quorum` 一旦不可能形成多数(在拒绝了 `f+1` 次后),就会崩溃,并放弃仍在运行中的 `synchronize_chain_state_from` 调用,因此只由响应较慢的验证者持有的锁不会被吸收。目前的故障注入框架无法以确定性的方式强制这种竞争(没有任何故障类型会使持有锁的验证者跳过拒绝,同时仍可用于同步)。一个确定性测试需要在 `LocalValidatorClient` 中使用基于时钟的每个验证者响应延迟,该延迟基于 #6448 中的客户端时钟接缝,因此可以让 0/1 可重复地提前响应 2/3。在此之前,此路径只间接地由 (现在不再出错的) `test_lazy_pull_absorbs_locking_block_on_proposal_rejection` 覆盖。

内容来源: linera-io/linera-protocol