如果无法达到多数决,则应应用未来的死锁
作者: tylertreat创建于 2022年3月20日更新于 2025年7月17日
我认为这是 #145 的重复,由于没有活动而被关闭,但似乎尚未解决。 我有调用 Apply,有时与集群中的节点停止的时间同时发生,例如在单元/集成测试中。在这种情况下,等待 Apply 返回的未来结果(deferError.Error())将永远阻塞,导致测试死锁。这是因为 deferError 正在等待从 errCh 返回的响应,而这个响应永远不会到来。 有趣的是,有一个 改动在一段时间前被添加了,以在 deferError 中添加一个 ShutdownCh,允许未来对关闭做出反应。然而,这似乎只用于解决在拍照时出现的死锁。在我看来,deferError 应该具有超时,或者在调用 Error() 时设置自己的超时,或者通过尊重传递给 Apply() 的超时。考虑到 Apply() 返回的未来涉及 RPC 和共识,似乎应该具有超时,以防止潜在的死锁情况。
内容来源: hashicorp/raft