You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The following invariants have been extracted from Will's AsyncRaft.tla specification, and confirmed to hold for ccfraft.
\* The set of servers that agree up through index.Agree(i,index)=={i}\cup{k\inServers:matchIndex[i][k]>=index}\* If matchIndex on a leader has quorum agreement on an index, then this entry must\* be present on a quorum of Servers.H_LeaderMatchIndexValid==\As\in{s\inServers:state[s]=Leader}:\Aind\inDOMAINlog[s]:\EQ\inQuorums[CurrentConfiguration(s)]:\At\inQ:(Agree(s,ind)\inQ)=>/\ind\inDOMAINlog[t]/\log[t][ind]=log[s][ind]H_CommitIndexCoversEntryImpliesExistsOnQuorum==\As\inServers:(commitIndex[s]>0)=>\EQ\inQuorums[CurrentConfiguration(s)]:\At\inQ:/\Len(log[s])>=commitIndex[s]/\Len(log[t])>=commitIndex[s]/\log[t][commitIndex[s]]=log[s][commitIndex[s]]\* Match index records for a leader must always be <= its own log length.H_LeaderMatchIndexBound==\As\inServers:(state[s]=Leader)=>\At\inServers:matchIndex[s][t]<=Len(log[s])\* Commit index is no greater than the log length on any node.H_CommitIndexBoundValid==\As\inServers:commitIndex[s]<=Len(log[s])H_CurrentTermAtLeastAsLargeAsLogTerms==\As\inServers:(\Ai\inDOMAINlog[s]:currentTerm[s]>=log[s][i].term)\* If two nodes are in the same term, then their votes granted\* sets cannot have intersecting voters.H_CandidateVotesGrantedInTermAreUnique==\As,t\inServers:(/\s#t/\state[s]=Candidate/\state[t]=Candidate/\currentTerm[s]=currentTerm[t])=>(votesGranted[s]\capvotesGranted[t])={}\* If a node has garnered votes in a term as candidate, there must\* be no other leader in that term in existence.H_CandidateWithVotesGrantedInTermImplyNoOtherLeader==\As,t\inServers:(/\s#t/\state[s]=Candidate/\votesGranted[s]\inQuorums[CurrentConfiguration(s)]/\currentTerm[s]=currentTerm[t])=>state[t]#Leader----INVARIANT...H_LeaderMatchIndexValidH_CommitIndexCoversEntryImpliesExistsOnQuorumH_LeaderMatchIndexBoundH_CommitIndexBoundValidH_CurrentTermAtLeastAsLargeAsLogTermsH_CandidateVotesGrantedInTermAreUnique
H_CandidateWithVotesGrantedInTermImplyNoOtherLeader
This one looks interesting but doesn't hold:
\* If a commit index covers a log entry in some term,\* then no primary in an earlier term can be enabled to commit any entries\* in its own log.H_CommitIndexAtEntryInTermDisabledEarlierCommits==\As,t\inServers:(/\s#t/\commitIndex[s]>0/\state[t]=Leader/\currentTerm[t]<log[s][commitIndex[s]].term)=>\Aind\inDOMAINlog[t]:Agree(t,ind)\notinQuorums[CurrentConfiguration(s)]
The text was updated successfully, but these errors were encountered:
The following invariants have been extracted from Will's AsyncRaft.tla specification, and confirmed to hold for ccfraft.
This one looks interesting but doesn't hold:
The text was updated successfully, but these errors were encountered: