18.03.2015 Views

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

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!