Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion trust-quorum/tla/check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ WORKERS="${TLC_WORKERS:-auto}"
# cfg module expected-exit-status
EXPECTED=(
"trust_quorum.cfg trust_quorum 0"
"trust_quorum_nocrash.cfg trust_quorum 13"
"trust_quorum_nocrash.cfg trust_quorum 0"
)

selected=("$@")
Expand Down
7 changes: 2 additions & 5 deletions trust-quorum/tla/trust_quorum.tla
Original file line number Diff line number Diff line change
Expand Up @@ -413,11 +413,6 @@ CommittedNodesHaveShares ==
(* Temporal properties *)
AllNodesUnlock == <>[](\A id \in nexus.config.members: nodeOp[id] # "Unlock")

\* This is currently expected to FAIL under trust_quorum_nocrash.cfg, because
\* RecvCommit never fires for the coordinator (it stays in CoordinatePrepare),
\* so NexusRecvCommitAck never reaches Idle and epoch 2 never starts.
\* trust_quorum.cfg only gets there because n1 is in CRASHSET and commits after
\* restarting.
ReconfigurationStarts == <>(nexus.config.epoch = 2)

-----------------------------------------------------------------------------
Expand Down Expand Up @@ -898,6 +893,8 @@ RecvCommit(id) ==
/\ m # NONE
/\ \/ nodeOp[id] = "Idle"
\/ nodeOp[id] = "Uncommitted"
\* The coordinator commits its own config like any other member.
\/ nodeOp[id] = "CoordinatePrepare"
/\ Assert(nodes[id].has_share,
<<"Commits should only be sent to nodes that have prepared", id>>)
/\ nodeOp' = [nodeOp EXCEPT ![id] = "Idle"]
Expand Down
Loading