These topics are from Chapter 8 (Agreement Protocols) in Advanced Concepts in OS.
This is an example of a time-message trade off
Wix = set of processors that sent x to i = witnesses of x for i
i is a direct supporter of P iff P Î Wi*
i is an indirect supporter of P iff | WiP | ³ LOW
i confirms P iff | WiP | ³ HIGH
To make this algorithm work, I believe we need to assume the following:
If time permits, go though an example of the algorithm.
In round 1, suppose the faulty processor A initiates, sending "*" messages to D & B, but not to C.
At the start of round 2, processors B & D have each received a "*" message from A and so become direct supporters of A. They respond by broadcasting "A". Since this is round 2, B & D initiate, which causes them to broadcast "*"
At the start of round 3, processors B & D have received "*" from B & D, so both become direct supporters of B & D, and broadcast "B" & "D". Processor C has received "*" from B & D, so it becomes a supporter of both, and broadcasts "B" & "D". Processor C has also received 2 witness messages for A, from B & D. Since LOW=m+1=2, C now becomes an indirect supporter of A and so it also broadcasts "A".
At the start of round 4, processor C has 3 witnesses for B & D. Since LOW + max{0, ëK/2 û -2} = 2, C satisfies the initiation condition. C initiates broadcasts "*".
At the start of round 5, processors B, C, & D have all just received "*" from C. They become direct supporters of C and broadcast "C".
By the end of round 5 each nonfaulty processor has confirmed HIGH = 3 processors supporting commitment, so all three nonfaulty processors commit.
What happens if the fault processor A only sends a "*" message to one of the other processors?
What happens if the first initiating processor is not faulty?