Partager via


Stockage stable CLFS

Lorsque vous écrivez un enregistrement dans un flux CLFS (Common Log File System), l’enregistrement est placé dans un bloc d’E/S de journal (dans une zone de marshaling) en mémoire volatile. Régulièrement, CLFS vide les blocs d’E/S du journal de la zone de marshaling vers un stockage stable tel qu’un disque. Sur le périphérique de stockage stable, le journal se compose d’un ensemble de conteneurs, chacun d’eux étant une étendue contiguë sur le support physique. Une collection de conteneurs qui forment le stockage stable d’un flux est appelée journal ou journal physique.

La figure suivante illustre un conteneur.

diagramme illustrant des conteneurs, des blocs et des enregistrements.

La figure précédente illustre un conteneur qui contient trois blocs d’E/S du journal. Le premier bloc d’E/S du journal contient trois enregistrements, le second contient cinq enregistrements et le troisième contient deux enregistrements. Comme le suggère la figure, le début de chaque bloc d’E/S du journal est toujours aligné sur le début d’un secteur sur le support de stockage stable. Notez que la taille des blocs d’E/S du journal sur un stockage stable varie.

CLFS utilise un ensemble de trois nombres pour localiser un enregistrement dans un journal.

  • L’identificateur de conteneur identifie le conteneur qui contient l’enregistrement.

  • Le décalage de bloc donne le décalage d’octets, dans le conteneur, du début du bloc d’E/S du journal qui contient l’enregistrement.

  • Le numéro séquentiel d’enregistrement identifie l’enregistrement dans le bloc d’E/S du journal.

Le numéro séquentiel du journal (LSN) d’un enregistrement de journal CLFS contient en fait ces trois éléments d’information : identificateur de conteneur, décalage de bloc et numéro séquentiel d’enregistrement. Toutefois, les LSN donnés aux clients de journal contiennent des identificateurs de conteneur logiques que CLFS doit mapper aux identificateurs de conteneur physiques avant d’accéder aux enregistrements sur un stockage stable.

CLFS utilise des identificateurs de conteneur logiques pour permettre aux clients de voir que les enregistrements de journal sont en cours d’écriture dans une séquence de conteneurs en cours, alors qu’en fait, les conteneurs physiques sont recyclés.

Supposons qu’un journal comporte trois conteneurs et qu’un seul client écrit des enregistrements CLFS dans le journal. Le scénario suivant montre comment un conteneur peut être recyclé.

  1. Le client écrit suffisamment d’enregistrements de journal pour remplir les trois conteneurs.

  2. Le client définit la base du journal (en appelant ClfsAdvanceLogBase ou ClfsWriteRestartArea.) sur l’un des enregistrements du conteneur 2. En procédant ainsi, le client dit qu’il n’a plus besoin des enregistrements dans le conteneur 1.

  3. Le client écrit un autre enregistrement dans le journal et récupère le numéro LSN du nouvel enregistrement écrit. L’identificateur de conteneur logique dans ce LSN est 4. Lorsque les enregistrements sont vidés dans un stockage stable, les enregistrements que le client voit dans le conteneur logique 4 passent au conteneur physique 1.

La figure suivante illustre le scénario : il montre comment la séquence cliente de conteneurs logiques est mappée à des conteneurs physiques sur un stockage stable.

diagramme illustrant des conteneurs logiques et physiques.

L’identificateur de conteneur logique, le décalage de bloc et le numéro de séquence d’enregistrement sont stockés dans un LSN de telle sorte que les LSN d’un flux particulier forment toujours une séquence strictement croissante. Autrement dit, le LSN (avec identificateur de conteneur logique) d’un enregistrement de journal écrit dans un flux est toujours supérieur aux LSN des enregistrements de journal précédemment écrits dans ce même flux. Les réseaux LSN servent alors un double objectif : 1) ils fournissent aux clients d’un flux une séquence ordonnée d’identificateurs d’enregistrement, et 2) ils fournissent à CLFS l’emplacement des enregistrements sur un stockage stable.

Étant donné le numéro LSN d’un enregistrement, vous pouvez extraire l’identificateur de conteneur logique, le décalage de bloc et le numéro de séquence d’enregistrement en appelant les fonctions suivantes.

ClfsLsnContainer

ClfsLsnBlockOffset

ClfsLsnRecordSequence

L’identificateur de conteneur logique étant un nombre 32 bits, il existe 2^32 identificateurs de conteneur logiques possibles, et ils se trouvent dans la plage 0x0 à 0xFFFFFFFF. Un flux peut avoir au maximum 2^32 conteneurs logiques.

Le décalage de bloc est stocké dans 23 bits du LSN, mais ClfsLsnBlockOffset retourne un nombre de 32 bits qui est aligné sur la taille de secteur du support de stockage stable. Le décalage de bloc est toujours un multiple de 512. En outre, le décalage de bloc est aligné sur la taille de secteur du support de stockage stable. Par exemple, si la taille du secteur est de 1 024 octets, le décalage de bloc sera un multiple de 1024.

Le numéro de séquence d’enregistrement étant un nombre de 9 bits, il y a 2^9 (512) numéros de séquence d’enregistrements possibles, et ils se trouvent dans la plage 0x0 à 0x1FF. Un bloc d’E/S de journal peut avoir au maximum 512 enregistrements.