XI Workshop de Testes e Tolerância a Falhas (WTF) - SBRC 2010
XI Workshop de Testes e Tolerância a Falhas (WTF) - SBRC 2010
XI Workshop de Testes e Tolerância a Falhas (WTF) - SBRC 2010
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>XI</strong> <strong>Workshop</strong> <strong>de</strong> <strong>Testes</strong> e Tolerância a <strong>Falhas</strong> 11<br />
Function Consensus (v i )<br />
Task T 0:<br />
(1) r i ← 0; lr i ← 0;<br />
(2) Every time Lea<strong>de</strong>r = p i<br />
(3) Task T1 -Proposer;<br />
Task T 1 - Proposer:<br />
(4) r i ← max(r i , lr i ) + n;<br />
————————Fase 1 da rodada r: PREPARE-REQUEST—————————————<br />
(5) broadcast PREPARE-REQUEST(r i );<br />
(6) wait until ( (ACK-PREPARE-REQUEST(r i , r j , v j ) has been received from<br />
every correct process which is a member of a synchronous partition)<br />
∨ (lr i > r i ) ) ;<br />
————————Fase 2 da rodada r: accept request—————————————<br />
(7) if ( (r i ≥ lr i ) ∧ (¬∃(ACK-PREPARE-REQUEST(r i , r j , v j ) received from p j ) such that r j > r i ) ) then<br />
(8) if ( ∃ ACK-PREPARE-REQUEST(r i , r j , v j ) received from p j such that<br />
∀k: (ACK-PREPARE-REQUEST(ri , r k , v k ) have been received from p k : r j ≥ r k ) ∧<br />
((r k = r j ) → (v k = v j )) ) then<br />
(9) v i ← v j ;<br />
(10) broadcast ACCEPT-REQUEST(r i , v i );<br />
Task T 2 - Acceptor:<br />
(11) upon the reception of PREPARE-REQUEST(r c ) from p c do<br />
(12) if r c > max(r i , lr i ) then<br />
(13) send ACK-PREPARE-REQUEST(r c , r i , v i ) to p c ;<br />
(14) lr i ← r c ;<br />
Task T 3 - Acceptor:<br />
(15) upon the reception of ACCEPT-REQUEST(r c , v c ) from p c do<br />
(16) if r c ≥ max(lr i , r i ) then<br />
(17) lr i ← r c ; v i ← v c ; r i ← r c<br />
(18) broadcast ACK-ACCEPT-REQUEST(r i , v i );<br />
Task T 4 - Learner:<br />
(19) wait until ACK-ACCEPT-REQUEST(r j , v j ) have been received from<br />
every correct process p k which is a member of a synchronous partition, for the same round r j<br />
or a DECISION-MESSAGE (v) is received<br />
(20) broadcast DECISION-MESSAGE(v);<br />
(21) return (v j )<br />
Figure 2. Algoritmo <strong>de</strong> consenso<br />
A tarefa T 2 é executada pelos agentes Acceptors <strong>de</strong> todos os processos. Um processo<br />
inicia a execução <strong>de</strong>sta tarefa ao receber uma mensagem PREPARE-REQUEST <strong>de</strong> um<br />
Proposer, sendo que a rodada proposta <strong>de</strong>ve ser mais recente do que qualquer rodada na qual o<br />
processo esteja participando ou tenha participado (verificado pelo if da linha 12). Nesta tarefa<br />
o processo informa o seu valor atual e a última rodada na qual participou, através da mensagem<br />
ACK-PREPARE-REQUEST, enviada ao Proposer.<br />
A tarefa T 3 é executada pelos agentes Acceptors <strong>de</strong> todos os processos. Um processo<br />
inicia a execução <strong>de</strong>sta tarefa ao receber uma mensagem ACCEPT-REQUEST <strong>de</strong> um Proposer,<br />
sendo que a rodada referenciada na mensagem <strong>de</strong>ve ser mais recente do que qualquer outra<br />
rodada na qual o processo esteja participando ou tenha participado. O processo atualiza<br />
o seu valor proposto e o seu número <strong>de</strong> rodada, e realiza um broadcast com mensagem<br />
ACK-ACCEPT-REQUEST, com o número <strong>de</strong> rodada atual, e o valor proposto.