Labo 4 - Routing

Informations Générales

Notez enfin que l’objectif étant pour vous d’apprendre, vous serez toujours légitimes et bienvenu.e.s à nous poser des questions, sur Go, la théorie, vos idées, vos blocages. Si vous vous sentez perdu.e.s ou coincé.e.s, c’est qu’il faut nous demander.

Introduction

Ce labo a pour objectif de permettre à l’application ChatsApp de fonctionner sur un réseau incomplet, dans lequel chaque server ne communique donc directement qu’avec un sous-ensemble des autres serveurs du système.

Pour ce faire, deux modules doivent être implémentés : le Pulsar, et le Router. Ils doivent ensuite être intégrés au Dispatcher, afin que l’incomplétude du réseau soit invisible aux modules utilisateurs, tels que la mutex ou le mainteneur d’anneau.

Vous aurez accès, comme point de départ, à la solution du labo 3 ainsi qu’aux interfaces des abstractions à implémenter.

Modifications attendues

Pulsar

Le premier module à implémenter est le Pulsar, qui offre le comportement de sondes et échos générique tel que présenté en cours. Son unique méthode, StartPulse, déclenche une sonde, puis bloque jusqu’à réception de tous les échos, dont l’agrégation est alors retournée.

Le Pulsar est notamment défini, à sa construction, par les objets suivants.

Notez bien que

Router

Le Router est le seul utilisateur du Pulsar, dans deux buts : broadcasting et construction d’une table de routage. Il offre trois méthodes.

Son constructeur prend deux channels, similaires aux NetSender et NetReceiver du Pulsar, permettant de rendre le routeur indépendant du dispatcher.

La table de routage que le Router utilise est construite comme suit :

Le Router utilise trois types de messages pour fonctionner :

Intégration

L’intégration du Router et du Pulsar se fait dans le Dispatcher, qui gagne donc une nouvelle méthode, Broadcast. Toute demande d’envoi par Broadcast ou par Send doit donc passer par le Router.

Les modules utilisateurs du dispatcher ont déjà été modifiés pour appeler Broadcast lorsque pertinent. Ils n’ont donc pas connaissance du fait que le réseau est maintenant incomplet, et doivent continuer de fonctionner inchangés.

Tests

Des tests sont fournis pour vérifier le bon fonctionnement de votre Pulsar et de votre Router, ainsi que leur intégration dans le reste du programme.

Comme au labo 3, nous n’avons pas fourni tous les tests utilisés pour évaluer votre rendu. Nous attendons de votre part que vous implémentiez des tests additionnels, pour vérifier notamment les propriétés suivantes, et possiblement d’autres (sachant que nous nous permettrons d’exécuter des tests couvrant plus de propriétés que celles listées ci-dessous, lors de l’évaluation) :

Votre note dépendra en grande partie des résultats des tests (les votres, ceux que nous n’avons pas fournis, et ceux fournis, y inclus ceux des autres modules pour détecter toute régression). La qualité de vos tests sera également prise en compte dans l’évaluation.

Tous les tests devront passer sans et avec le data race detector de Go (go test -race).

Document d’architecture logicielle et Contraintes

Les mêmes exigences que pour le labo 1 s’appliquent ici concernant le document d’architecture logicielle, et les contraintes.

Timeline et indications

Durant la première semaine, il est attendu que vous réfléchissiez à l’approche que vous souhaitez adopter pour implémenter ce labo. Il vous faudra notamment réfléchir à la manière de résoudre les problèmes suivants.

Après cette semaine, la séance de labo sera votre dernière occasion de valider auprès de nous votre proposition de solution. Une fois ce délai passé, il sera attendu que vous ayez une vision claire de votre solution, dont vous pourrez aussitôt commencer l’implémentation.

Le rendu aura lieu à la fin de la dernière séance de labo du semestre. Vous aurez donc quatre semaines (vacances exclues).