pub enum Ind<C> {
Decision {
slot: Slot,
command: C,
},
Collected {
slot: Slot,
},
CatchUpWanted {
peer: NodeId,
from_slot: Slot,
},
SessionEnded {
peer: NodeId,
epoch: u64,
},
SessionEstablished {
peer: NodeId,
epoch: u64,
},
}Expand description
Indications to the layer above.
Variants§
Decision
send(ρ, ⟨decision, s, c⟩) — a majority of acceptors accepted this pvalue, so command is
chosen for slot. Figure 6(a) addresses this to the replicas; there is no replica here, so
it is raised to whatever is above.
Collected
A proposal was refused because the slot is below this process’s collection watermark: it is
decided, f + 1 members hold the decision, and this layer no longer does.
The layer above must catch up from a peer, which is what Cmd::CatchUp asks for.
Without it a correct process that missed one decision is stranded for ever, because the only
other way back — a leader answering a re-proposal — needs the record this layer discarded.
CatchUpWanted
peer has fallen behind and wants the decisions from from_slot onwards. The layer above
answers with Cmd::Teach for what it still holds.
SessionEnded
The scope with peer ended at epoch. Propagated, not absorbed: this layer holds no
redundancy that outlives a session — what it knows of a ballot is in memory a crash takes,
and its redundancy is the other processes rather than a resend across an ending. A layer
above may need to know that an answer it was waiting for will not arrive.
SessionEstablished
A scope with peer is in force at epoch.