Durable Resource Manager (IEnlistmentNotification) Восстановление - PullRequest
2 голосов
/ 09 ноября 2011

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

  1. Должен ли быть объект IEnlistmentNotification на транзакцию или один IEnlistmentNotification дескриптор объектаВсе транзакции?

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

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

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

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

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

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

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

1 Ответ

1 голос
/ 09 ноября 2011

Мне кажется, я нашел все свои ответы в RavenDB Исходный код .

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