Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
KTM предоставляет очередь уведомлений для каждого диспетчера ресурсов. KTM предоставляет уведомления диспетчеру ресурсов, помещая их в очередь диспетчера ресурсов.
Диспетчер ресурсов может получать уведомления из очереди синхронно или асинхронно.
Чтобы получить уведомления синхронно, диспетчер ресурсов может многократно вызывать ZwGetNotificationResourceManager.
Чтобы получать уведомления асинхронно, диспетчер ресурсов может вызвать TmEnableCallbacks , чтобы настроить подпрограмму обратного вызова. KTM вызывает функцию обратного вызова каждый раз, когда помещает уведомление в очередь диспетчера ресурсов.
Когда диспетчер ресурсов вызывает ZwCreateEnlistment для создания перечисления для транзакции, диспетчер ресурсов указывает типы уведомлений, которые он должен получать. Диспетчеры ресурсов получают только те уведомления, на получение которых они зарегистрировались.
Константы уведомлений определяются в Ktmtypes.h. Имена констант уведомлений имеют формат TRANSACTION_NOTIFY_Xxx.
В остальной части этого раздела перечислены все константы уведомлений, определяющие Ktmtypes.h, и делят их на три группы:
Уведомления, которые могут получать менеджеры ресурсов
Уведомления, которые могут получать высшие менеджеры транзакций
Константы уведомлений, определенные, но в настоящее время не используемые
Уведомления для диспетчеров ресурсов
Все диспетчеры ресурсов должны регистрироваться для получения TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE и TRANSACTION_NOTIFY_COMMIT уведомлений, даже если впоследствии они вызывают ZwReadOnlyEnlistment , чтобы пометить зачисление как доступное только для чтения.
Диспетчеры ресурсов могут поддерживать TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, но они также должны поддерживать многоэтапные предварительные уведомления, подготовку и фиксацию.
В следующем списке содержатся все уведомления, которые могут получать руководители ресурсов:
УВЕДОМЛЕНИЕ_О_ПОДГОТОВКЕ_ТРАНЗАКЦИИ
При отправке: клиент вызывает ZwCommitTransaction , а диспетчер ресурсов не поддерживает однофазную фиксацию или если более высокий диспетчер транзакций вызывает ZwPrePrepareEnlistment.
Получено диспетчерами ресурсов.
Необходимое действие получателя: выполните предварительные операции подготовки и вызовите ZwPrePrepareComplete. (Дополнительные сведения об операциях предварительной подготовки см. в разделе Обработка операций фиксации.)
Ограничения: Диспетчер ресурсов также должен поддерживать TRANSACTION_NOTIFY_PREPARE и TRANSACTION_NOTIFY_COMMIT.
TRANSACTION_NOTIFY_PREPARE
При отправке: после TRANSACTION_NOTIFY_PREPREPARE, если клиент вызывает ZwCommitTransaction , а диспетчер ресурсов не поддерживает однофазную фиксацию или если более высокий диспетчер транзакций вызывает ZwPrepareEnlistment.
Получено от: диспетчеров ресурсов.
Необходимое действие получателя: Выполните операции подготовки и вызовите ZwPrepareComplete. (Дополнительные сведения о подготовительных операциях см. в разделе "Обработка операций фиксации".)
Ограничения: Диспетчер ресурсов также должен поддерживать TRANSACTION_NOTIFY_PREPREPARE и TRANSACTION_NOTIFY_COMMIT.
УВЕДОМЛЕНИЕ_О_ЗАВЕРШЕНИИ_ТРАНЗАКЦИИ
При отправке: после TRANSACTION_NOTIFY_PREPARE, если клиент вызывает ZwCommitTransaction , а диспетчер ресурсов не поддерживает однофазную фиксацию, или если более высокий диспетчер транзакций вызывает ZwCommitEnlistment.
Получено: диспетчерами ресурсов.
Необходимое действие получателя: выполните операции фиксации и вызовите ZwCommitComplete. (Дополнительные сведения об операциях фиксации см. в разделе "Обработка операций фиксации".)
Ограничения: Диспетчер ресурсов также должен поддерживать TRANSACTION_NOTIFY_PREPREPARE и TRANSACTION_NOTIFY_PREPARE.
УВЕДОМЛЕНИЕ_О_ТРАНЗАКЦИИ_ОДНОФАЗНОЕ_ЗАВЕРШЕНИЕ
При отправке: клиент вызывает ZwCommitTransaction и диспетчер ресурсов поддерживает однофазные операции фиксации.
Получено: менеджерами ресурсов.
Необходимое действие получателя: зафиксируйте транзакцию или вызовите ZwSinglePhaseReject. (Дополнительные сведения об операциях фиксации в один этап см. в разделе Обработка операций фиксации.)
Ограничения: Диспетчер ресурсов также должен поддерживать TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE и TRANSACTION_NOTIFY_COMMIT.
TRANSACTION_NOTIFY_ROLLBACK
При отправке: клиент вызывает ZwRollbackTransaction, более высокий диспетчер транзакций вызывает ZwRollbackEnlistment или KTM обнаруживает ошибку (например, сбой записи в поток журнала).
Получено: диспетчерами ресурсов и старшими диспетчерами транзакций.
Необходимое действие получателя: выполните все операции, необходимые для отката данных транзакции, а затем вызовите ZwRollbackComplete. (Дополнительные сведения об операциях отката см. в разделе "Обработка операций отката".)
Ограничения: Все диспетчеры ресурсов и лучшие диспетчеры транзакций должны поддерживать TRANSACTION_NOTIFY_ROLLBACK.
УВЕДОМЛЕНИЕ_ТРАНЗАКЦИИ_ВОССТАНОВЛЕНИЕ
При отправке: диспетчер ресурсов вызывает ZwRecoverResourceManager.
Получено: менеджерами ресурсов.
Требуемое действие получателя: диспетчер ресурсов должен вызвать ZwRecoverEnlistment. (Дополнительные сведения об операциях восстановления см. в разделе "Обработка операций восстановления".)
Ограничения: Никакой.
TRANSACTION_NOTIFY_LAST_RECOVER
При отправке: после того, как KTM отправил последний TRANSACTION_NOTIFY_RECOVER для зачисления диспетчера ресурсов.
Получено: менеджерами ресурсов.
Необходимое действие получателя: завершение операции восстановления. (Дополнительные сведения об операциях восстановления см. в разделе "Обработка операций восстановления".)
Ограничения: Никакой.
TRANSACTION_NOTIFY_INDOUBT
В момент отправки: после того как ресурсный диспетчер вызывает функцию ZwRecoverEnlistment, если KTM не может определить, должна ли транзакция быть зафиксирована или отменена (обычно это связано с тем, что у TPS есть более высокий менеджер транзакций, который недоступен).
Получено: менеджерами ресурсов.
Необходимое действие получателя: ничего не делать, пока KTM не отправляет TRANSACTION_NOTIFY_COMMIT или TRANSACTION_NOTIFY_ROLLBACK.
Ограничения: Никакой.
УВЕДОМЛЕНИЕ_О_РАЗЪЕДИНЕНИИ_RM_TRANSACTION
При отправке: диспетчер ресурсов, обрабатывающий однофазную операцию фиксации, закрывает дескриптор фиксации, не указывая, была ли транзакция зафиксирована или отменена.
Получено: менеджерами ресурсов и старшими менеджерами транзакций, у которых есть участия в транзакции.
Необходимое действие получателя: операции очистки, связанные с конкретной транзакцией. Как правило, это уведомление полезно для менеджеров ресурсов, работающих в режиме только для чтения.
Ограничения: Никакой.
Уведомления для опытных диспетчеров транзакций
Лучшие диспетчеры транзакций могут получать следующие уведомления:
УВЕДОМЛЕНИЕ_ОТКАТА_ТРАНЗАКЦИИ
См. более раннее описание.
ОПОВЕЩЕНИЕ_ОТРАНЗАКЦИИ_RM_ОТКЛЮЧЕНО
См. более раннее описание.
УВЕДОМЛЕНИЕ_О_ПОДГОТОВКЕ_ТРАНЗАКЦИИ_ЗАВЕРШЕНО
При отправке: после того, как все диспетчеры ресурсов получили TRANSACTION_NOTIFY_PREPREPARE и ответили, вызвав ZwPrePrepareComplete.
Получено от: превосходных диспетчеров транзакций.
Необходимое действие получателя: более высокий диспетчер транзакций должен вызывать ZwPrepareEnlistment.
TRANSACTION_NOTIFY_PREPARE_COMPLETE
При отправке: после того, как все диспетчеры ресурсов получили TRANSACTION_NOTIFY_PREPARE и ответили, вызвав ZwPrepareComplete.
Получено: высококлассные диспетчеры транзакций.
Необходимое действие получателя: более высокий диспетчер транзакций должен вызывать ZwCommitEnlistment.
TRANSACTION_NOTIFY_COMMIT_COMPLETE
При отправке: после того, как все диспетчеры ресурсов получили TRANSACTION_NOTIFY_COMMIT и ответили, вызвав ZwCommitComplete.
Получено от: ответственные диспетчеры транзакций.
Необходимое действие получателя: операции очистки транзакций.
УВЕДОМЛЕНИЕ_О_ЗАВЕРШЕНИИ_ОТКАТА_ТРАНЗАКЦИИ
При отправке: после того, как все диспетчеры ресурсов получили TRANSACTION_NOTIFY_ROLLBACK и ответили, вызвав ZwRollbackComplete.
Получено от: ведущие менеджеры транзакций.
Необходимое действие получателя: операции очистки транзакций.
TRANSACTION_NOTIFY_RECOVER_QUERY
При отправке: превосходный диспетчер транзакций вызывает ZwRecoverResourceManager.
Получено превосходными управляющими транзакциями.
Необходимое действие получателя: высший диспетчер транзакций должен вызвать ZwCommitEnlistment или ZwRollbackEnlistment.
УВЕДОМЛЕНИЕ_О_ПОДТВЕРЖДЕНИИ_ТРАНЗАКЦИИ
При отправке: клиент вызывает ZwCommitTransaction. Если для этого уведомления о зачислении зарегистрирован более высокий диспетчер транзакций, то KTM отправляет TRANSACTION_NOTIFY_COMMIT_REQUEST более высокому диспетчеру транзакций вместо того чтобы отправлять TRANSACTION_NOTIFY_COMMIT диспетчерам ресурсов.
Получено от: первоклассных менеджеров по транзакциям.
Необходимое действие получателя: превосходный диспетчер транзакций вызывает ZwCommitEnlistment.
УВЕДОМЛЕНИЕ_ЗАПРОСА_РЕЗУЛЬТАТА_ТРАНЗАКЦИИ
При отправке: диспетчер ресурсов вызывает TmRequestOutcomeEnlistment , пока транзакция находится в состоянии подготовки.
Получено: высокоуровневыми менеджерами по транзакциям.
Необходимое действие получателя: более высокий диспетчер транзакций должен вызывать ZwCommitEnlistment или ZwRollbackEnlistment.
Неиспользуемые уведомления
Следующие уведомления определены в Ktmtypes.h, но KTM в настоящее время не поддерживает их:
УВЕДОМЛЕНИЕ_О_ДЕЛЕГИРОВАНИИ_КОММИТА_ТРАНЗАКЦИИ
TRANSACTION_NOTIFY_ENLIST_MASK
TRANSACTION_NOTIFY_ENLIST_PREPREPARE
TRANSACTION_NOTIFY_MARSHAL
УВЕДОМЛЕНИЕ_О_ПОВЫШЕНИИ_ТРАНЗАКЦИИ
УВЕДОМЛЕНИЕ_О_ПОВЫШЕНИИ_НОВОЙ_ТРАНЗАКЦИИ
ПРОПАГАЦИЯ_ПРОЦЕССА_ПЕРЕДАЧИ_ТРАНЗАКЦИИ
TRANSACTION_NOTIFY_PROPAGATE_PUSH
TRANSACTION_NOTIFY_TM_ONLINE
УВЕДОМЛЕНИЕ_ПОДТВЕРЖДЕНИЕ_ЗАВЕРШЕНИЕ транзакции