Диспетчеры ресурсов

Диспетчер ресурсов использует журнал диспетчера транзакций для отслеживания состояния транзакции. Действие диспетчера ресурсов при обработке транзакции выглядит следующим образом:

  • Клиент передает транзакцию в RM явным образом.
  • RM заверяет в транзакцию с помощью CreateEnlistment.
  • Затем пользователь может продолжить выполнение любой операции.
  • Когда пользователь вызывает CommitTransaction, KTM отправляет уведомление PREPARE_TRANSACTION в RM. На этом этапе RM сбрасывает на диск любые изменения, которые должны быть необходимы для фиксации транзакции, но могут завершиться ошибкой. Если эти операции выполнены успешно, RM сигнализирует о завершении операции подготовки путем вызова PrepareComplete. Если эти операции завершаются ошибкой, служба управления правами отвечает путем вызова RollBackEnlistment.
  • Диспетчер ресурсов получает уведомление о подготовке.
  • Диспетчер ресурсов очищает все данные, связанные с транзакцией, в файл журнала Common Log Services.
  • Диспетчер ресурсов вызывает функцию PrepareComplete и ожидает получения результата транзакции из KTM.
  • В зависимости от результата транзакции диспетчер ресурсов получает событие уведомления о фиксации или откате. Если диспетчер ресурсов получает уведомление о фиксации, он делает изменения постоянными и сообщает KTM, вызвав функцию CommitComplete. Если диспетчер ресурсов получает уведомление об откате, он удаляет все изменения и возвращает состояние, которое существовало до любых транзакций изменений и сообщает KTM, вызвав RollbackComplete.

Функции Resource Manager

Следующие функции используются с диспетчерами ресурсов.

Функция Описание
CreateResourceManager Создает новый объект диспетчера ресурсов (RM) и связывает RM с диспетчером транзакций (TM).
GetNotificationResourceManager Запрашивает и получает уведомление для диспетчера ресурсов (RM). Эта функция используется регистром RM для получения уведомлений при изменении состояния транзакции.
GetNotificationResourceManagerAsync Запросы и получение асинхронного уведомления для диспетчера ресурсов (RM). Эта функция используется регистром RM для получения уведомлений при изменении состояния транзакции.
OpenResourceManager Открывает существующий диспетчер ресурсов (RM).
ПодготовкаЗавершена Указывает, что диспетчер ресурсов (RM) завершил всю обработку, необходимую для обеспечения успешности операции фиксации или прерывания для указанной транзакции.
PrePrepareComplete Сигнализирует о том, что этот диспетчер ресурсов завершил свою предварительную подготовку, чтобы другие руководители ресурсов могли начать свои операции подготовки.
SetResourceManagerCompletionPort Связывает указанный порт завершения ввода-вывода с указанным диспетчером ресурсов (RM). Этот порт получает все уведомления для RM.