Метод CVssWriter::OnFreeze (vswriter.h)
Метод OnFreeze вызывается модулем записи при получении события Freeze в начале замораживания теневой копии. Модуль записи использует этот метод для выполнения операций, необходимых для участия в заморозке или для применения права вето на замораживание.
OnFreeze — это чистый виртуальный метод. Он не реализуется базовым классом CVssWriter и должен реализовываться производными классами.
Синтаксис
bool OnFreeze();
Возвращаемое значение
Реализация этого метода должна возвращать значение true , за исключением случаев неустранимой ошибки. При возникновении неустранимой ошибки метод должен вызвать метод CVssWriter::SetWriterFailure , чтобы предоставить описание сбоя, прежде чем возвращать значение false. Если возникает некритичная ошибка, метод должен по-прежнему вызывать SetWriterFailure, но возвращатьзначение true. Если ошибка вызвана временной проблемой, метод должен указать VSS_E_WRITERERROR_RETRYABLE в вызове Метода SetWriterFailure.
Во всех случаях, когда происходит сбой, метод должен записывать событие в журнал событий, чтобы сообщить точную причину сбоя.
Комментарии
В этом методе приложение записи должно переводить себя в четко определенное состояние, совместимое с операцией VSS.
В этом методе модуль записи должен завершить окончательную подготовку для поддержки создания теневой копии. После создания теневой копии модуль записи получит событие Thaw и сможет продолжить обычные операции.
По умолчанию время ожидания между событиями заморозки и оттепели составляет 60 секунд. То есть, если событие Thaw не получено с истечением времени ожидания, будет создано событие Abort. Записи могут изменить время ожидания во время инициализации, задав для аргумента dwTimeoutFreeze значение CVssWriter::Initialize.
Способ подготовки модуля записи к теневой копии в значительной степени зависит от приложения, в котором она размещена. Некоторые приложения могут позволить себе хранить все операции записи и сохранять данные в абсолютно согласованном состоянии в течение этого периода. Другие приложения, как и многие базы данных, не могут остановить работу в течение этого периода, но могут выполнять действия, такие как контрольные точки их состояния, что может сократить время восстановления для теневой копии, созданной в этом окне.
Если модуль записи не может поместить себя в четко определенное состояние для параметра Freeze, происходит следующее:
- OnFreeze возвращает значение false, наложив вето на теневое копирование.
- Модуль записи вызывает CVssWriter::SetWriterFailure , чтобы предоставить описание сбоя.
- Событие Abort будет создано при возврате значения OnFreezeсо значением false.
Время ожидания для обработки события Freeze обычно относительно короткое по сравнению с периодом ожидания для обработки события PrepareForSnapshot . Поэтому разработчикам следует избегать длительных операций в этом методе. Обычно это может быть приостановка ведения журнала модулем записи.
Рекомендуется, чтобы все трудоемкие операции обрабатывались CVssWriter::OnPrepareSnapshot.
После этого метода будет вызываться CVssWriter::OnThaw или CVssWriter::OnAbort .
Если этот метод вызывает метод CVssWriterEx2::GetSessionId, CVssWriter::SetWriterFailure или CVssWriterEx2::SetWriterFailureEx , он должен делать это в том же потоке, который вызвал этот метод. Дополнительные сведения см. в разделе Обработка событий записи.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | vswriter.h (включая Vss.h, VsWriter.h) |
Библиотека | VssApi.lib |