:: Enseignements :: Licence :: L3 :: 2011-2012 :: Programmation système en C ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | MlvSync |
Conditions de rendu
Le projet est à réaliser en binôme. Il est à rendre le 20 mai 2012 (ou avant).
La date de soutenance vous sera communiquée ultérieurement.
Le projet est à faire par niveau de difficulté, inutile de passer au niveau n+1 si le niveau n ne marche pas au risque de voir son travail non évalué. Ce n’est pas la peine non plus de faire la partie bonus si tous les niveaux ne fonctionnent pas correctement.
Le projet devra être rendu sous la forme d'une archive compressée au format zip et devra contenir le répertoire
projet_L3_Systeme_login1_login2.
Ce répertoire devra contenir :
- doc/doc.pdf : un rapport décrivant et justifiants brièvement vos choix et vos solutions (5 pages maxi)
- src/ : le répertoire contenant les sources
- log/ : le répertoire contenant les logs du serveur
- bin/ : le répertoire contenant les exécutables
- Makefile : le fichier qui permet de compiler le projet avec la commande make
Le lien suivant pointe sur l'archive qui devrait être rendue par les
étudiants Foo et Bar (vous n'êtes pas obligés de faire votre rapport en LaTeX) :
Description
Le but du projet est de pouvoir synchroniser plusieurs répertoires sur la même machine ou sur des machines distantes de manière communautaire.
L’idée est d’effectuer la synchronisation de façon décentralisée c’est-à-dire pas de serveur maître qui coordonne toutes les opérations de synchronisation, toutes les instances font office de serveur et de client au même temps.
La synchronisation peut se faire soit en ligne de commande à la demande de l’utilisateur soit automatiquement.
Niveau 1
Votre programme devra fonctionner sur plusieurs instances, chaque instance s’occupera de synchroniser le répertoire dont elle est responsable avec le ou les répertoires des instances voisines, ces dernières peuvent être sur la même machine ou sur des machines distantes. Pour ce niveau, une instance doit connaitre ses voisines au démarrage.
La synchronisation consiste à échanger des données entres les instances afin qu’elles puissent récupérer la dernière version de tous les fichiers. On ne doit garder que la dernière version.
Pour ce niveau, on ne s’occupera pas de la récursivité, c’est-à-dire on s’intéresse uniquement aux versions des fichiers et dossiers du niveau 0 de notre répertoire racine. On s’intéressera pas non plus aux fichiers supprimés et aux liens, cela sera géré dans les niveaux supérieurs.
Niveau 2
Une fois le niveau 1 fonctionne parfaitement vous pouvez implémenter les fonctionnalités suivantes :
- Synchronisation récursive : synchroniser tous les niveaux de l'arborescence du système de fichier à partir du répertoire racine surveillé par l’instance et non seulement le niveau 0 comme c’est demandé dans le niveau 1.
- Détection automatique des voisins : trouver ou développer un mécanisme pour détecter automatiquement les voisins potentiels.
Niveau 3
Si vous sortez indemnes du niveau 2 vous pouvez compléter votre programme en rajoutant :
- La gestion des liens : proposer une stratégie pour copier ou lier les fichiers pointés par des liens symboliques ou physiques.
- La gestion des suppressions : si un fichier est supprimé sur une instance, les autres doivent le savoir. Si le fichier supprimé est restauré le changement doit se répercuter sur toutes instances pendant les synchronisations futures.
Bonus
Les plus courageux peuvent s’amuser à :
- Optimiser la quantité de données transférée et le nombre de requêtes.
- Rajouter une option de synchronisation automatique.
© Université de Marne-la-Vallée