Archiviazione stabile CLFS

Quando si scrive un record in un flusso CLFS (Common Log File System), il record viene inserito in un blocco di I/O log (in un'area di marshalling) in memoria volatile. ClFS scarica periodicamente blocchi di I/O del log dall'area di marshalling all'archiviazione stabile, ad esempio un disco. Nel dispositivo di archiviazione stabile il log è costituito da un set di contenitori, ognuno dei quali è un extent contiguo sul supporto fisico. Una raccolta di contenitori che formano l'archiviazione stabile per un flusso è denominata log o un log fisico.

La figura seguente illustra un contenitore.

diagramma che illustra contenitori, blocchi e record.

La figura precedente illustra un contenitore che contiene tre blocchi di I/O log. Il primo blocco di I/O del log contiene tre record, il secondo contiene cinque record e il terzo contiene due record. Come suggerisce la figura, l'inizio di ogni blocco di I/O del log è sempre allineato all'inizio di un settore nel supporto di archiviazione stabile. Si noti che i blocchi di I/O del log in archiviazione stabile variano in dimensioni.

CLFS usa un set di tre numeri per individuare un record in un log.

  • L'identificatore del contenitore identifica il contenitore che contiene il record.

  • L'offset del blocco restituisce l'offset di byte, all'interno del contenitore, dell'inizio del blocco di I/O del log che contiene il record.

  • Il numero di sequenza di record identifica il record all'interno del blocco di I/O del log.

Il numero di sequenza di log (LSN) di un record di log CLFS contiene effettivamente tali tre parti di informazioni: identificatore del contenitore, offset del blocco e numero di sequenza di record. Tuttavia, le reti LSN fornite ai client di log contengono identificatori di contenitore logici che CLFS deve eseguire il mapping agli identificatori del contenitore fisico prima di accedere ai record nell'archiviazione stabile.

CLFS usa identificatori di contenitore logici per offrire ai client la visualizzazione in cui i record di log vengono scritti in una sequenza continua di contenitori, quando in realtà i contenitori fisici vengono riciclati.

Si supponga che un log abbia tre contenitori e un singolo client stia scrivendo record CLFS nel log. Lo scenario seguente illustra come un contenitore potrebbe essere riciclato.

  1. Il client scrive record di log sufficienti per riempire tutti e tre i contenitori.

  2. Il client imposta la base di log (chiamando ClfsAdvanceLogBase o ClfsWriteRestartArea). A tale scopo, il client dice che non ha più bisogno dei record nel contenitore 1.

  3. Il client scrive un altro record nel log e recupera l'LSN del record appena scritto. Identificatore del contenitore logico in cui LSN è 4. Quando i record vengono scaricati nell'archiviazione stabile, i record visualizzati nel contenitore logico 4 passano al contenitore fisico 1.

La figura seguente illustra lo scenario; mostra come viene eseguito il mapping della sequenza client dei contenitori logici ai contenitori fisici nell'archiviazione stabile.

diagramma che illustra contenitori logici e fisici.

L'identificatore del contenitore logico, l'offset del blocco e il numero di sequenza di record vengono archiviati in un LSN in modo che le reti LSN per un determinato flusso formino sempre una sequenza strettamente crescente. Vale a dire, l'LSN (con identificatore contenitore logico) di un record di log scritto in un flusso è sempre maggiore delle LSN dei record di log scritti in precedenza nello stesso flusso. Le reti LSN, quindi, servono uno scopo doppio: 1) forniscono ai client di un flusso una sequenza ordinata di identificatori di record e 2) forniscono a CLFS la posizione dei record in un archivio stabile.

Dato l'LSN di un record, è possibile estrarre l'identificatore del contenitore logico, l'offset del blocco e il numero di sequenza di record chiamando le funzioni seguenti.

ClfsLsnContainer

ClfsLsnBlockOffset

ClfsLsnRecordSequence

L'identificatore del contenitore logico è un numero a 32 bit, quindi sono presenti 2^32 possibili identificatori di contenitore logico e si trovano nell'intervallo 0x0 tramite 0xFFFFFFFF. Un flusso può avere al massimo contenitori logici 2^32.

L'offset del blocco viene archiviato in 23 bit dell'LSN, ma ClfsLsnBlockOffset restituisce un numero a 32 bit allineato alle dimensioni del settore del supporto di archiviazione stabile. L'offset del blocco è sempre un multiplo di 512. Inoltre, l'offset del blocco è allineato alle dimensioni del settore del medio di archiviazione stabile. Ad esempio, se la dimensione del settore è pari a 1024 byte, l'offset del blocco sarà un multiplo di 1024.

Il numero di sequenza di record è un numero a 9 bit, quindi ci sono 2^9 (512) possibili numeri di sequenza di record e si trovano nell'intervallo 0x0 attraverso 0x1FF. Un blocco di I/O log può avere al massimo 512 record.