Anulación de operaciones de VSS
Los eventos de anulación se pueden generar durante una operación de copia de seguridad en cualquiera de los casos siguientes:
- Un solicitante genera explícitamente un evento Abort llamando a IVssBackupComponents::AbortBackup.
- Los controladores de eventos Freeze y Thaw de un escritor (CVssWriter::OnFreeze y CVssWriter::OnThaw) devuelven false o no se pueden completar en el período de tiempo especificado en CVssWriter::Initialize.
- Hay algún error del proveedor o VSS durante la creación de una instantánea después del evento PrepareForSnapshot .
Las anulaciones no se admiten para las operaciones de restauración.
Control del solicitante y creación de eventos de anulación
Una instancia de la interfaz IVSSBackupComponents solo se puede usar para una copia de seguridad, por lo que si se produce un error en el procesamiento de una copia de seguridad, generalmente es mejor liberar la instancia actual y empezar de nuevo.
Un solicitante debe indicar explícitamente que está anulando una operación de copia de seguridad (mediante IVssBackupComponents::AbortBackup) solo después de que se haya realizado la preparación real de una copia de seguridad, que implique escritores o la creación de una instantánea.
Esto significa que, en cualquier momento, un solicitante necesita detener una operación de copia de seguridad después de generar un evento PrepareForBackup llamando a IVssBackupComponents::P repareForBackup, debe llamar a IVssBackupComponents::AbortBackup y esperar su retorno antes de liberar la instancia actual de IVSSBackupComponents .
Por ejemplo, si un escritor ha vetado una operación de copia de seguridad, un solicitante debe usar IVssBackupComponents::AbortBackup para notificar a todos los demás escritores que la operación de copia de seguridad no se completará.
Antes de llamar a PrepareForBackup, o si se produce un error en la llamada a PrepareForBackup , un solicitante puede liberar la instancia actual de la interfaz IVSSBackupComponents sin necesidad de generar un evento Abort.
Por ejemplo, si la instancia actual de IVSSBackupComponents se usa simplemente para obtener información llamando a IVssBackupComponents::GatherWriterMetadata y generando un evento Identify , una vez que se ha devuelto la información de la instancia de IVSSBackupComponents simplemente se puede liberar.
Un solicitante genera una serie de eventos (PrepareForSnapshot, Freeze, Thaw y PostSnapshot) cuando llama a IVssBackupComponents::D oSnapshotSet. Al controlar los eventos Freeze y Thaw, un escritor puede producir un error y puede generar un evento Abort por sí mismo. Si no se controlan los eventos PrepareForSnapshot y PostSnapshot, no se genera un evento Abort.
No siempre es posible que un solicitante sepa si se generó un evento Abort cuando IVssBackupComponents::D oSnapshotSet indica un error. Por lo tanto, un solicitante que necesita finalizar una operación de copia de seguridad porque el estado de IVssBackupComponents::D oSnapshotSet indica que un problema debe seguir llamando a IVssBackupComponents::AbortBackup.
Si un solicitante ha llamado A IVssBackupComponents::AbortBackup, no es necesario llamar a IVssBackupComponents::BackupComplete antes de liberar una instancia de IVSSBackupComponents.
Control del escritor y creación de eventos abort
Como se indicó anteriormente, un escritor puede recibir un evento Abort de un solicitante o el proveedor puede desencadenar uno mismo. Además, es posible que un escritor reciba varios eventos Abort en determinadas circunstancias. Los desarrolladores de escritor deben codificar cualquier implementación de CVssWriter::OnAbort teniendo esto en cuenta.
Al controlar un evento Abort, un escritor debe intentar restaurar cualquier proceso que administre a su estado de ejecución normal, así como realizar cualquier control y registro de errores.
Esto puede significar que una implementación de CVssWriter::OnAbort podría tener que realizar muchas tareas, si no todas, de las mismas tareas que el controlador de eventos Thaw (CVssWriter::OnThaw) y el controlador de eventos PostSnapshot (CVssWriter::OnPostSnapshot) y estos controladores se pueden llamar desde CVssWriter::OnAbort.