Olivier Lemer
Pour l'instant, on supposera
Pour envoyer moins de messages
Le demandeur envoie son aptitude et son id.
Demande d'élection
A
5
B
E
C
D
4
3
7
2
A-5
En élection
Connait l'élu
Le demandeur envoie son aptitude et son id.
Si je reçois une aptitude
Je la compare à la mienne
Je propage la plus grande des deux
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
A-5
"A
est plus apte que moi..."
d'un autre
Le demandeur envoie son aptitude et son id.
Si je reçois une aptitude
Je la compare à la mienne
Je propage la plus grande des deux
d'un autre
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
A-5
"A est plus apte que moi..."
Le demandeur envoie son aptitude et son id.
Si je reçois une aptitude
Je la compare à la mienne
Je propage la plus grande des deux
d'un autre
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
D-7
"Je suis plus apte que A
!"
Le demandeur envoie son aptitude et son id.
Si je reçois une aptitude
Je la compare à la mienne
Je propage la plus grande des deux
d'un autre
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
"D
est plus apte que moi..."
D-7
Le demandeur envoie son aptitude et son id.
Si je reçois une aptitude
Je la compare à la mienne
Je propage la plus grande des deux
d'un autre
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
D-7
"D
est plus apte que moi..."
Le demandeur envoie son aptitude et son id.
Tour d'annonce
Si je reçois une aptitude
Je la compare à la mienne
Je propage la plus grande des deux
Si je reçois ma propre aptitude
La demande a fait le tour, je suis élu !
d'un autre
Je propage le résultat
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
"C'est ma requête, je suis élu !"
D-7
D-7
D-7
Le demandeur envoie son aptitude et son id.
Tour d'annonce
Si je reçois une aptitude
Je la compare à la mienne
Je propage la plus grande des deux
Si je reçois ma propre aptitude
La demande a fait le tour, je suis élu !
d'un autre
Je propage le résultat
Si je reçois un résultat
Je le propage
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
D-7
"Ah, c'est D
qui a gagné !"
Le demandeur envoie son aptitude et son id.
Tour d'annonce
Si je reçois une aptitude
Je la compare à la mienne
Je propage la plus grande des deux
Si je reçois ma propre aptitude
La demande a fait le tour, je suis élu !
d'un autre
Je propage le résultat
Si je reçois un résultat
Je le propage si ce n'est pas le mien
Sinon, l'élection est finie, je suis l'élu
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
D-7
D-7
D-7
"Tout le monde sait, c'est officiel !"
Tour de résultat
Le demandeur envoie son aptitude et son id.
Tour d'annonce
Si je reçois une aptitude
Je la compare à la mienne
Je propage la plus grande des deux
Si je reçois ma propre aptitude
La demande a fait le tour, je suis élu !
d'un autre
Je propage le résultat
Si je reçois un résultat
Je le propage si ce n'est pas le mien
Sinon, l'élection est finie, je suis l'élu
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
Est l'élu
Tour de résultat
Gestion de demandes concurrentes
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
Est l'élu
Demande d'élection
B-4
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
Est l'élu
B-4
Demande d'élection
A-5
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
Est l'élu
Demande d'élection
D-7
A-5
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
Est l'élu
Demande d'élection
D-7
A-5
"Une élection est déjà en cours, et cette nouvelle élection n'a pas trouvé mieux, je l'ignore."
A
5
B
E
C
D
4
3
7
2
En élection
Connait l'élu
Est l'élu
Demande d'élection
D-7
Quand je suis déjà en cours d'élection,
Si je reçois une aptitude plus basse, je l'ignore
(Sinon, l'algorithme normal s'applique)
Résumé et Performances
Demande d'élection
Si je ne suis pas en cours d'élection
Réception d'une aptitude
Si je suis en cours d'élection
Si c'est moi
Réception d'un résultat
Si ce n'est pas moi
Si je ne suis pas en cours d'élection
Si je suis en cours d'élection
Pourquoi pas un problème de ne rien envoyer sinon ?
(le demandeur réessaiera plus tard)
Communication
3N
messages par élection
Durée d'une élection
3N
Pseudocode
Variables
self
entier, constant
mon numéro de processus
inElection
booléen, init false
ssi une élection est en cours
élu
entier
id du processus élu
apt_self
entier
mon aptitude
suivant
entier, constant
numéro du suivant dans l'anneau
Remarques
Plus besoin de stocker les aptitudes de tous les autres.
Plus besoin de dépendre de T.
Tous les envois se feront à suivant
.
Écouter infiniment les événements suivants :
Demande d'élection
Demande d'obtention de l'élu par la couche applicative
Réception d'une annonce {i, apt_i}
Réception d'un résultat {i}
Note : les traitements de ces événements sont faits de manière séquentielle.
Initialisation
(On omet la mise à jour de l'aptitude, qui déclenche simplement une élection)
Si inElection
Refuser la demande
Sinon
Envoi d'une annonce {self, apt_self}
inElection ← true
Demande d'élection
élu ← i
inElection ← false
Si élu != self
Envoi de résultat {i}
Réception d'un résultat {i}
Si (apt_self, self) > (apt_i, i)
Si pas inElection
Demande d'élection
Sinon, si i == self
Envoi de résultat {i}
inElection ← false
Sinon
Envoi d'annonce {i, apt_i}
inElection ← true
Réception d'une annonce {i, apt_i}
Retourner élu
.
Demande d'obtention de l'élu
On suppose 1s de transit pour chaque message
Cinq processus, formant un anneau dans le sens suivant
A
, avec aptitude initiale de 2B
, avec aptitude initiale de 5C
, avec aptitude initiale de 8D
, avec aptitude initiale de 2E
, avec aptitude initiale de 7
Les événements suivants ont lieu
T=1
: C
demande une électionT=1
: D
demande une électionA
B
E
C
D
Que se passe-t-il en cas de panne d'un processus ?
Réfléchissez à des solutions pour chaque problème.