Anulando operações do VSS
Os eventos de anulação podem ser gerados durante uma operação de backup em qualquer um dos seguintes casos:
- Um solicitante gera explicitamente um evento Abort chamando IVssBackupComponents::AbortBackup.
- Os manipuladores de eventos Freeze e Thaw de um gravador (CVssWriter::OnFreeze e CVssWriter::OnThaw) retornam false ou não podem ser concluídos na janela de tempo especificada em CVssWriter::Initialize.
- Há qualquer falha do provedor ou vss durante a criação de uma cópia de sombra após o evento PrepareForSnapshot .
Não há suporte para anulações para operações de restauração.
Tratamento do solicitante e criação de eventos de anulação
Uma instância da interface IVSSBackupComponents pode ser usada para apenas um backup, portanto, se ocorrer um erro no processamento de um backup, geralmente é melhor liberar a instância atual e recomeçar.
Um solicitante deve sinalizar explicitamente que está anulando uma operação de backup (usando IVssBackupComponents::AbortBackup) somente após a preparação real para um backup, envolvendo gravadores ou a criação de uma cópia de sombra.
Efetivamente, isso significa que sempre que um solicitante precisa interromper uma operação de backup depois de gerar um evento PrepareForBackup chamando IVssBackupComponents::P repareForBackup, ele deve chamar IVssBackupComponents::AbortBackup e aguardar seu retorno antes de lançar a instância atual do IVSSBackupComponents .
Por exemplo, se um gravador vetou uma operação de backup, um solicitante deverá usar IVssBackupComponents::AbortBackup para notificar todos os outros gravadores de que a operação de backup não será concluída.
Antes de chamar PrepareForBackup ou se a chamada para PrepareForBackup falhar, um solicitante poderá liberar a instância atual da interface IVSSBackupComponents sem a necessidade de gerar um evento Abort.
Por exemplo, se a instância atual de IVSSBackupComponents estiver sendo usada apenas para obter informações chamando IVssBackupComponents::GatherWriterMetadata e gerando um evento Identifi , depois que as informações forem retornadas, a instância de IVSSBackupComponents poderá simplesmente ser liberada.
Um solicitante gera vários eventos (PrepareForSnapshot, Freeze, Thaw e PostSnapshot) quando chama IVssBackupComponents::D oSnapshotSet. Ao lidar com os eventos Congelar e Descongelar, um gravador pode falhar e gerar um evento Abort por conta própria. Falha ao manipular eventos PrepareForSnapshot e PostSnapshot não gera um evento Abort.
Nem sempre é possível que um solicitante saiba se um evento Abort foi gerado quando IVssBackupComponents::D oSnapshotSet indica falha. Portanto, um solicitante que precisa encerrar uma operação de backup porque o status de IVssBackupComponents::D oSnapshotSet indica que um problema ainda deve chamar IVssBackupComponents::AbortBackup.
Se um solicitante tiver chamado IVssBackupComponents::AbortBackup, não será necessário chamar IVssBackupComponents::BackupComplete antes de liberar uma instância de IVSSBackupComponents.
Tratamento de gravador e criação de eventos de anulação
Conforme observado anteriormente, um gravador pode receber um evento Abort de um solicitante ou o provedor pode disparar um. Além disso, é possível que um gravador receba vários eventos abortados em determinadas circunstâncias. Os desenvolvedores de gravador devem codificar qualquer implementação de CVssWriter::OnAbort com isso em mente.
Ao lidar com um evento Abort, um gravador deve tentar restaurar qualquer processo gerenciado para seu estado de execução normal, bem como executar qualquer tratamento de erros e registro em log.
Isso pode significar que uma implementação de CVssWriter::OnAbort pode ter que executar muitas, se não todas, das mesmas tarefas que o manipulador de eventos Thaw (CVssWriter::OnThaw) e o manipulador de eventos PostSnapshot (CVssWriter::OnPostSnapshot) e esses manipuladores podem ser chamados de dentro de CVssWriter::OnAbort.