Conceitos básicos do TxF

Isolamento de leitura

O TxF (NTFS transacional) fornece consistência confirmada por leitura.

Um gravador transacionado refere-se a um identificador de arquivo transacionado aberto com qualquer permissão que não faça parte do acesso de leitura genérico, mas que faz parte do acesso de gravação genérico. Um gravador transacionado exibe a versão mais recente de um arquivo que inclui todas as alterações pela mesma transação. Pode haver apenas um gravador transacionado por arquivo. Gravadores não transacionados são sempre bloqueados por um gravador transacionado, mesmo que o arquivo seja aberto com permissões de gravação compartilhada.

Um leitor transacionado refere-se a um identificador de arquivo transacionado aberto com qualquer permissão que faça parte do acesso de leitura genérico, mas não faça parte do acesso de gravação genérico. Um leitor transacionado exibe uma versão confirmada do arquivo que existia no momento em que o identificador de arquivo foi aberto. O leitor transacionado é isolado dos efeitos dos gravadores transacionados. Isso fornece uma exibição consistente do arquivo somente durante a vida útil do identificador de arquivo e bloqueia gravadores não transacionados.

Observação

Quando um identificador é aberto para modificação com a função CreateFileTransacted, todas as aberturas subsequentes do arquivo dentro dessa transação são convertidas somente leitura ou não pelo sistema para ser um gravador transacionado para fins de isolamento e outras semânticas transacionais. Isso significa que, posteriormente, quando um identificador é aberto para acesso somente leitura, o identificador não recebe uma exibição do arquivo antes do início da transação; ele recebe a exibição de transação ativa do arquivo.

Um identificador de arquivo não transacionado não vê nenhuma alteração feita em uma transação até que a transação seja confirmada. O identificador de arquivo não transacionado recebe uma exibição isolada semelhante a um leitor transacionado, mas ao contrário de um leitor transacionado, ele recebe a atualização de arquivo quando um gravador transacionado confirma a transação.

Níveis de isolamento

O TxF fornece isolamento de leitura confirmada. Isso significa que as atualizações de arquivo não são vistas fora da transação. Além disso, se um arquivo for aberto mais de uma vez durante a leitura de arquivos dentro da transação, você poderá ver resultados diferentes a cada abertura subsequente. Os arquivos que estavam disponíveis na primeira vez que você os acessou podem não estar disponíveis (porque foram excluídos) ou vice-versa.

Bloqueio transacional

A criação de um gravador transacionado em um arquivo bloqueia transacionalmente o arquivo. Depois que um arquivo é bloqueado por uma transação, outras operações do sistema de arquivos externas à transação de bloqueio que tentam modificar o arquivo bloqueado transacional falharão com ERROR_SHARING_VIOLATION ou ERROR_TRANSACTIONAL_CONFLICT.

A tabela a seguir resume o bloqueio transacional.

Arquivo atualmente aberto por

Tentativa de abertura de arquivo

Transacionado

Não transacionado

Leitor

Leitor/Gravador

Leitor

Leitor/Gravador

Leitor Transacionado

Sim

Sim

Sim

Não2

Leitor/Gravador Transacionado

Sim

Não2

Sim

Não2

Leitor não transacionado

Sim

Sim

Sim

Sim

Leitor/gravador não transacionado

Nº 1

Nº 1

Sim

Sim

  1. Falha com ERROR_TRANSACTIONAL_CONFLICT
    2. Falha com ERROR_SHARING_VIOLATION

Se você abrir um fluxo nomeado para uma modificação que esteja usando uma transação, todo o arquivo precisará ser bloqueado.

Além do bloqueio transacional, as regras típicas de compartilhamento de arquivos NTFS se aplicam.

Você precisa considerar os dois modos de compartilhamento de arquivos a seguir em paralelo:

  • O modo de bloqueio transacional.
  • Modos normais de compartilhamento de arquivos.

Qualquer modo mais restritivo é aquele que se aplica.