Восстановление Durable Resource Manager (IEnlistmentNotification)

Я создаю диспетчер ресурсов, реализуя IEnlistmentNotification. Я пытаюсь создать надежный RM, который вызвал у меня несколько вопросов.

  1. Должен ли быть объект IEnlistmentNotification для каждой транзакции или один объект IEnlistmentNotification должен обрабатывать все транзакции?

    Я думаю, что каждая транзакция хотела бы иметь свою собственную, чтобы она могла выполнять подготовку/фиксацию/откат для каждой транзакции.

  2. Как обрабатывается файл восстановления?

    Я предполагаю, что все, что происходит в транзакции, будет записано в файл восстановления во время подготовки.

    Как можно разделить информацию для каждой транзакции? Я бы подумал, что каждая транзакция будет иметь отдельный файл или что один файл будет иметь какой-то идентификатор транзакции для каждой операции восстановления.

    Когда происходит восстановление, остается ли Transaction.Current.TransactionInformation.DistributedIdentifier/LocalIdentifier таким же, как до сбоя? Итак, можно ли использовать один из этих идентификаторов для идентификации транзакции во время восстановления.

  3. Как происходит выздоровление?

    Если у меня есть TransactionScope, внутри которого используется мой диспетчер ресурсов, и происходит сбой системы (выдергивается вилка или что-то еще) в середине области действия, как происходит восстановление при резервном запуске системы? Я предполагаю, что какой-то процесс, который запускал код, имеющий область действия, знает о сбоях системы или что-то в этом роде? В таком случае, какие системы/программы/службы настроены для фактического восстановления?


person Josh Close    schedule 08.11.2011    source источник


Ответы (1)


Думаю, все ответы я нашел в исходном коде RavenDB.

  1. Да, каждая транзакция должна иметь собственное уведомление IEnlistmentNotification.
  2. Да, вы используете Transaction.TransactionInformation.DistributedIdentifier/LocalIdentifier для отслеживания транзакций в файле или файлах восстановления.
  3. Приложение, в котором выполняется код, проверит, требуется ли восстановление, и повторно зарегистрирует транзакции, которые не были завершены, когда вилка была отключена.
person Josh Close    schedule 09.11.2011