Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
dbft: fix the deadlock reason in four-good-nodes setup
Finally, the reason of the following real-life liveness lock in the four nodes scenario is found: ``` rmState |-> ( 0 :> [type |-> "cv", view |-> 1] @@ 1 :> [type |-> "cv", view |-> 1] @@ 2 :> [type |-> "commitSent", view |-> 0] @@ 3 :> [type |-> "commitSent", view |-> 1] ) ``` The issue was discovered and fixed in the TLA+ model initially, see the roman-khimov#2. The decision on preparation payloads rejection/acceptance should be based on the number of Commits accepted durnig the whole set of rounds, not during the current round only. See also the C# source code, it doesn't have such problem: https://github.com/neo-project/neo-modules/blob/d00d90b9c27b3d0c3c57e9ca1f560a09975df241/src/DBFTPlugin/Consensus/ConsensusContext.cs#L223
- Loading branch information