Concetti di base di TxF
Isolamento di lettura
NTFS transazionale (TxF) offre coerenza con commit di lettura.
Un writer transazionato fa riferimento a un handle di file transazionato aperto con qualsiasi autorizzazione che non fa parte dell'accesso generico in lettura, ma fa parte dell'accesso in scrittura generico. Un writer transazionale visualizza la versione più recente di un file che include tutte le modifiche apportate dalla stessa transazione. Può essere presente un solo writer transacted per file. I writer non transazionati vengono sempre bloccati da un writer transazionato, anche se il file viene aperto con autorizzazioni di scrittura condivise.
Un lettore transazionato fa riferimento a un handle di file transazionato aperto con qualsiasi autorizzazione che fa parte dell'accesso generico in lettura, ma non fa parte dell'accesso in scrittura generico. Un lettore transazionato visualizza una versione commit del file esistente al momento dell'apertura dell'handle di file. Il lettore transazionato è isolato dagli effetti dei writer transazionati. In questo modo viene fornita una visualizzazione coerente del file solo per la durata dell'handle dei file e blocca i writer non transazionati.
Nota
Quando un handle è stato aperto per la modifica con la funzione CreateFileTransacted , tutte le successive apre il file all'interno di tale transazione, indipendentemente dalla lettura o meno, viene convertito dal sistema per essere un writer transazionale ai fini dell'isolamento e di altre semantiche transazionali. Ciò significa che successivamente, quando un handle viene aperto per l'accesso in sola lettura, l'handle non riceve una visualizzazione del file prima dell'inizio della transazione; riceve la visualizzazione delle transazioni attive del file.
Un handle di file non transazionale non visualizza modifiche apportate all'interno di una transazione fino al commit della transazione. L'handle di file non transazionale riceve una visualizzazione isolata simile a un lettore transazionale, ma a differenza di un lettore transazionale, riceve l'aggiornamento del file quando un writer transazionale esegue il commit della transazione.
Livelli di isolamento
TxF fornisce l'isolamento read-commit. Ciò significa che gli aggiornamenti dei file non vengono visualizzati all'esterno della transazione. Inoltre, se un file viene aperto più di una volta durante la lettura dei file all'interno della transazione, potrebbero essere visualizzati risultati diversi con ogni apertura successiva. I file disponibili per la prima volta a cui è stato eseguito l'accesso potrebbero non essere disponibili (perché sono stati eliminati) o viceversa.
Blocco transazionale
La creazione di un writer transacted in un file blocca in modo transazionale il file. Dopo che un file è bloccato da una transazione, altre operazioni del file system esterne alla transazione di blocco che tentano di modificare il file bloccato in modo transazionale avranno esito negativo con ERROR_SHARING_VIOLATION o ERROR_TRANSACTIONAL_CONFLICT.
La tabella seguente riepiloga il blocco transazionale.
File attualmente aperto da
Tentativo di apertura del file da parte di
Con transazione eseguita
Non transazioni
Reader
Lettore/Writer
Reader
Lettore/Writer
Lettore transacted
Sì
Sì
Sì
No2
Lettore/writer transacted
Sì
No2
Sì
No2
Lettore non transazionato
Sì
Sì
Sì
Sì
Lettore/writer non transacted
No1
No1
Sì
Sì
- Ha esito negativo con ERROR_TRANSACTIONAL_CONFLICT
2. Errore con ERROR_SHARING_VIOLATION
Se si apre un flusso denominato per una modifica che usa una transazione, è necessario bloccare l'intero file.
Oltre al blocco transazionale, si applicano le regole di condivisione file NTFS tipiche.
È necessario considerare le due modalità di condivisione file seguenti in parallelo:
- Modalità di blocco transazionale.
- Normali modalità di condivisione file.
La modalità più restrittiva è quella che si applica.