Google File System
Opérations de base
Notes
Bien étendue, GFS supporte les opérations classique d'un système de fichier :
- Create / Delete : Création et suppression de fichier
- Open / Close : Ouverture et fermeture de fichier
- Read / Write : Lecture et Ecrite d'un fichier
- Append : Ecriture en fin de fichier
- Snapshot : Copie de fichier ou d'arborescence
Ce qui porte a six le nombre d'opération primitive dans GFS. Bien entendu, l'ensemble de ces opérations sont concurrentes.
A noté que GFS n'est pas un système de fichier "POSIX compliant".
Lecture
Nous allons découvrir ensemble l'algorithme de lecture d'un fichier. En réalité, le Client GFS connait l'endroit du fichier où il souhaite intervenir, et son action portera uniquement sur les morceaux concernés.
Pré-requis: le fichier est ouvert , et la position est connue.
- l’application transmet au client GFS, le nom du fichier et le nombre de bit à lire
- Le client GFS calcul le Chunk concerné (+ position/64Mo +)
- Le client GFS calcul le Byte Range ( [position -+position/64Mo+*64Mo] à [position -+position/64Mo+*64Mo +taille])
- Le client demande au Master Server l’emplacement du Chunk (nom du fichier + n° du Chunk)
- Le master renvoie le Chunk Handle et les localisations du Chunk
- Le client transmet à un des Chunks Servers l’ID du Chunk et le Byte Range désiré
- Le Chunk Server envoie les données au client
- Le client transmet les données à l’application

Ecriture
Après avoir vu l'opération de lecture, nous allons voir l'opération d'écriture. Cette opération est légérement plus complexe. Tout d'abord, il faut savoir que cette opération ne permet pas l'ajout ou la suppression de données dans un fichier. Il s'agit uniquement de remplacement. La seule manière de rajouter de l'information dans un fichier, c'est pas la fin, grace a l'opération Append. Voici l'algorithme d'écriture:
Pré-requis: le fichier est ouvert , et la position est connue
- l’application transmet au client GFS, le nom du fichier et le nombre de bit à lire
- Le client GFS calcul le Chunk concerné et le Byte Range
- Le client demande au Master Server l’emplacement du Chunk
- Le master renvoie le Chunk Handle et les localisations du Chunk (primaire + secondaires)
- Le client envoie les données à écrire à chaque réplicas (stockées dans un buffer)
- Le client envoie un Write au Server Chunks primaire (Chunk Handle + Byte Range)
- Le Chunks Server primaire détermine l’ordre de sérialisation des données du buffer et les écrit dans le Chunk en suivant cet ordre
- Le Chunks Server primaire transmet l’ordre de sérialisation aux Chunks Servers secondaires pour qu’ils exécutent le Write
- Les Chunks Servers secondaires répondent au primaire
- Le Chunks Servers primaire répond au client

Append
L'opération Append est très utilisé chez Google, et c'est normal car la seule manière de faire grossir un fichier en rajoutant de l'information. Lorsque le morceau , a fortiori le dernier du fichier, atteint la taille de 64Mo , il faut créer un nouveau morcreau et poursuivre l'écriture dans celui ci.
Snapshot
Il existe une opération peu commune : Snapshot. Cette opération sert a créer une copie de fichier ou d'une arborescence. Cette opération est quasiment instantanée. Voici les différentes étapes qui la compose:
- Le Master Server s’assure qu’il n’y pas de modification en cours.
- Le Master Server log l’opération
- Les Metadatas du Master Server sont dupliquées
- Le Master Server demande aux Chunks Servers de dupliquer les Chunks