omega
?
t
tel que pour tout t'
superieur a t
, pour tout pi
appartenant aux corrects, leadeur du t'
est le pleader
On considere un ensemble de processus {p1, p2, …, pn} communiquant par messages. Les liens de commmunication sont bidirectionnels et fiables. On ne considere que des fautes du type crash. Le reseau forme un graphe complet partiellement synchrone : apres le temps GST (inconnu), il existe des bornes sur les details de transmissions. Il y a au moins un processus correct.
omega
?// Algo du cours
Task4 : Upon invocation of leader()
return trusted;
p1 -> p2
p1 -> p3
p1 -> p4
....
p1 -> pn
leader = p1 si les messages sont recues a temps
task2
vrai (on arme les timeout)
Temporairement on peut avoir plusieurs leaders suspectés.
trusted = j
)C’est grace a l’augmentation du timeout qu’on assure un leader a terme.
t
tel que pour tout t'
superieur a t
, pour tout pi
appartenant aux corrects, leadeur du t'
est le pleader
On considere que:
correct
l’ensemble qui contient les processus correctspleader
le processus correct elu comme leaderleader(t)
invocation de leader a l’instant t
Quelques processus tq p1 p2 pk crashent, p3 survit. On peut avoir à quelques instants plusieurs (faux) leaders.
Après GST, il existe un instant t auquel les messages de p3 sont reçus à temps.
p1 p2 p3 ... pn
x x ^ x
^
indique le leadeur
Pour tous les corrects, réception du Δ(i, pleader)
Il existe un t >= GST
,message pleader
<>S
:
A terme correct : suspected = {pi} - {trusted_i}
<- permet de passer d’<>S
a Omega
deltaP == complétude forte, et à terme il n’y a plus d’erreurs
=> à terme il n’existe pas d’intersection entre la liste des corrects et de suspects. du coup justesse finalement forte
Task 2: trusted(i) < i and (did not receive I_AM_THE_LEADER, suspected(j)) during the last delta(i), trusted(i)
trusted(i) <- trusted(i)+1
if (trusted(i) == i)
suspected(i) <- { p1, ... p(i-1) }
Task3: when(received(I_AM_THE_LEADER, suspected(j)) from p(j) and (j<= trusted(j)))
if (j < trusted(i)) {
trusted(i) <- j;
delta(i, j) <- delta(i, j)+1;
}
Task4: when (trusted(i) = i) and (did not receive I_AM_ALIVE from p(j) during the last delta(i, j) and (j < i)
suspected(i) <- suspected(i) union {p(j)}
Task5: when (trusted(i) = i) and (received I_AM_ALIVE from p(i)) and (p(j) in suspected(i)
suspected(i) <- suspected(i) - {p(j)}
delta(i, j) <- delta(i, j) + 1
A completer