Compartilhar via


Notificações de transação

O KTM fornece uma fila de notificação para cada gerenciador de recursos. A KTM entrega notificações a um gerenciador de recursos colocando-as na fila do gerenciador de recursos.

Um gerenciador de recursos pode recuperar notificações de sua fila de forma síncrona ou assíncrona.

  • Para recuperar notificações de forma síncrona, o gerenciador de recursos pode chamar ZwGetNotificationResourceManager repetidamente.

  • Para receber notificações de forma assíncrona, o gerenciador de recursos pode chamar TmEnableCallbacks para configurar uma rotina de retorno de chamada. A KTM aciona a rotina de retorno sempre que coloca uma notificação na fila do gerenciador de recursos.

Quando um gerenciador de recursos chama ZwCreateEnlistment para criar uma inscrição para uma transação, o gerenciador de recursos especifica os tipos de notificações que deve receber. Os gerenciadores de recursos recebem apenas notificações que se registram para receber.

As constantes de notificação são definidas em Ktmtypes.h. Os nomes constantes de notificação têm um formato de TRANSACTION_NOTIFY_Xxx.

O restante deste tópico lista todas as constantes de notificação que Ktmtypes.h define e as divide em três grupos:

  • Notificações que os gerenciadores de recursos podem receber

  • Notificações que os gerentes de transações superiores podem receber

  • Constantes de notificação definidas, mas atualmente não usadas

Notificações para Gerentes de Recursos

Todos os gerenciadores de recursos devem se registrar para receber as notificações TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE e TRANSACTION_NOTIFY_COMMIT, mesmo que posteriormente chamem ZwReadOnlyEnlistment para marcar um alistamento como read-only.

Os gerenciadores de recursos podem dar suporte a TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, mas também devem dar suporte às notificações de pré-preparação, preparação e confirmação de várias fases.

A lista a seguir contém todas as notificações que os gerenciadores de recursos podem receber:

NOTIFICAÇÃO_DE_TRANSACÇÃO_PREPARAÇÃO_PREVIA
Quando enviado: um cliente chama ZwCommitTransaction e nenhum gerenciador de recursos dá suporte à confirmação de fase única ou se um gerenciador de transações superior chama ZwPrepareEnlistment.

Recebido por: Gerenciadores de recursos.

Ação necessária do destinatário: execute operações de pré-preparação e, em seguida, chame ZwPrePrepareComplete. (Para obter mais informações sobre operações de pré-preparação, consulte Manipulando operações de confirmação.)

Restrições: O gerenciador de recursos também deve dar suporte a TRANSACTION_NOTIFY_PREPARE e TRANSACTION_NOTIFY_COMMIT.

NOTIFICAR_PREPARAR_TRANSAÇÃO
Quando enviado: após TRANSACTION_NOTIFY_PREPREPARE, se um cliente chamar ZwCommitTransaction e nenhum gerenciador de recursos oferecer suporte à confirmação de fase única, ou se um gerenciador de transações superior chamar ZwPrepareEnlistment.

Recebido por: Gerenciadores de recursos.

Ação necessária do destinatário: Execute operações de preparação e, em seguida , chame ZwPrepareComplete. (Para obter mais informações sobre operações de preparação, consulte Manipulando operações de confirmação.)

Restrições: O gerenciador de recursos também deve dar suporte a TRANSACTION_NOTIFY_PREPREPARE e TRANSACTION_NOTIFY_COMMIT.

NOTIFICAR_COMMIT_DA_TRANSAÇÃO
Quando enviado: após TRANSACTION_NOTIFY_PREPARE se um cliente chamar ZwCommitTransaction e nenhum gerenciador de recursos der suporte ao commit de fase única, ou se um coordenador superior de transação chamar ZwCommitEnlistment.

Recebido por: Gerenciadores de recursos.

Ação necessária do destinatário: executar operações de confirmação e, em seguida, chamar ZwCommitComplete. (Para obter mais informações sobre operações de confirmação, consulte Manipulando operações de confirmação.)

Restrições: O gerenciador de recursos também deve dar suporte a TRANSACTION_NOTIFY_PREPREPARE e TRANSACTION_NOTIFY_PREPARE.

NOTIFICACAO_TRANSACAO_COMPROMISSO_FASE_UNICA
Quando enviado: um cliente chama ZwCommitTransaction e um gerenciador de recursos dá suporte a operações de confirmação de fase única.

Recebido por: Gerenciadores de recursos.

Ação necessária do destinatário: confirme a transação ou chame ZwSinglePhaseReject. (Para obter mais informações sobre operações de confirmação de fase única, consulte Manipulando operações de confirmação.)

Restrições: O gerenciador de recursos também deve dar suporte a TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE e TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_ROLLBACK
Quando enviado: um cliente chama ZwRollbackTransaction, um gerenciador de transações superior chama ZwRollbackEnlistment ou KTM detecta um erro (como uma gravação com falha no fluxo de log).

Recebido por: gerenciadores de recursos e gerentes de transações superiores.

Ação necessária do destinatário: execute todas as operações necessárias para reverter os dados da transação e, em seguida, chame ZwRollbackComplete. (Para obter mais informações sobre operações de reversão, consulte Manipulando operações de reversão.)

Restrições: Todos os gerenciadores de recursos e gerentes de transações superiores devem dar suporte a TRANSACTION_NOTIFY_ROLLBACK.

RECUPERAR_NOTIFICAÇÃO_DE_TRANSACAO
Quando enviado: um gerenciador de recursos chama ZwRecoverResourceManager.

Recebido por: Gerenciadores de recursos.

Ação necessária do destinatário: o gerenciador de recursos deve chamar ZwRecoverEnlistment. (Para obter mais informações sobre operações de recuperação, consulte Manipulando operações de recuperação.)

Restrições: Nenhum.

TRANSACTION_NOTIFY_LAST_RECOVER
Quando enviado: depois que a KTM tiver enviado a última TRANSACTION_NOTIFY_RECOVER para as inscrições de um gerenciador de recursos.

Recebido por: Gerenciadores de recursos.

Ação necessária do destinatário: encerrar a operação de recuperação. (Para obter mais informações sobre operações de recuperação, consulte Manipulando operações de recuperação.)

Restrições: Nenhum.

TRANSACTION_NOTIFY_INDOUBT
Quando enviado: após um gerenciador de recursos chamar ZwRecoverEnlistment, se o KTM não puder determinar se a transação deve ser confirmada ou revertida (normalmente, porque o TPS tem um gerenciador de transações superior que não está disponível).

Recebido por: Gerenciadores de recursos.

Ação necessária do destinatário: não faça nada até que a KTM envie TRANSACTION_NOTIFY_COMMIT ou TRANSACTION_NOTIFY_ROLLBACK.

Restrições: Nenhum.

TRANSACTION_NOTIFY_RM_DISCONNECTED
Quando enviado: o gerenciador de recursos que está tratando uma operação de confirmação de fase única fecha o identificador de alistamento sem indicar se a transação foi confirmada ou revertida.

Recebido por: Gerenciadores de recursos e gerentes de transações superiores que têm alistamentos para a transação.

Ação necessária do destinatário: operações de limpeza específicas da transação. Normalmente, essa notificação é útil para gerentes de recursos de leitura apenas.

Restrições: Nenhum.

Notificações para Gerentes de Transações Superiores

Os gerentes de transações superiores podem receber as seguintes notificações:

TRANSACTION_NOTIFY_ROLLBACK
Confira a descrição anterior.

TRANSACTION_NOTIFY_RM_DISCONNECTED
Confira a descrição anterior.

TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
Quando enviado: depois que todos os gerenciadores de recursos receberem TRANSACTION_NOTIFY_PREPREPARE e responderem chamando ZwPrePrepareComplete.

Recebido por: Gerentes de transações superiores.

Ação necessária do destinatário: o superior gerenciador de transações deve chamar ZwPrepareEnlistment.

TRANSACTION_NOTIFY_PREPARE_COMPLETE
Quando enviado: depois que todos os gerenciadores de recursos receberem TRANSACTION_NOTIFY_PREPARE e responderem chamando ZwPrepareComplete.

Recebido por: Gerentes Seniores de Transações.

Ação necessária do destinatário: o gerenciador superior de transações deve chamar ZwCommitEnlistment.

TRANSACTION_NOTIFY_COMMIT_COMPLETE
Quando enviado: depois que todos os gerenciadores de recursos receberem TRANSACTION_NOTIFY_COMMIT e responderem chamando ZwCommitComplete.

Recebido por: Gerentes de transações sêniores.

Ação necessária do destinatário: operações de limpeza de transação.

NOTIFICAÇÃO_DE_TRANSAÇÃO_REVERTIDA_COMPLETA
Quando enviado: depois que todos os gerenciadores de recursos receberem TRANSACTION_NOTIFY_ROLLBACK e responderem chamando ZwRollbackComplete.

Recebido por: Gerentes de transações superiores.

Ação necessária do destinatário: operações de limpeza de transações.

TRANSACTION_NOTIFY_RECOVER_QUERY
Quando enviado: um gerenciador de transações superior chama ZwRecoverResourceManager.

Recebido por: Gerentes de transações superiores.

Ação necessária do destinatário: o gerenciador de transações superior deve chamar ZwCommitEnlistment ou ZwRollbackEnlistment para a inscrição.

TRANSACTION_NOTIFY_COMMIT_REQUEST
Quando enviado: um cliente chama ZwCommitTransaction. Se um gerenciador de transações superior tiver se registrado para essa notificação para uma inscrição, a KTM enviará TRANSACTION_NOTIFY_COMMIT_REQUEST ao gerenciador de transações superior em vez de enviar TRANSACTION_NOTIFY_COMMIT para os gerenciadores de recursos.

Recebido por: Gerentes de transações superiores.

Ação necessária do destinatário: o gerenciador de transações superior chama ZwCommitEnlistment.

TRANSACTION_NOTIFY_REQUEST_OUTCOME
Quando enviado: um gerenciador de recursos chama TmRequestOutcomeEnlistment enquanto a transação está em seu estado preparado.

Recebido por: Gerentes de transações superiores.

Ação necessária do destinatário: o gerenciador de transações superior deve chamar ZwCommitEnlistment ou ZwRollbackEnlistment.

Notificações não utilizados

As notificações a seguir são definidas em Ktmtypes.h, mas a KTM atualmente não dá suporte a elas:

TRANSACTION_NOTIFY_DELEGATE_COMMIT

TRANSACTION_NOTIFY_ENLIST_MASK

TRANSACTION_NOTIFY_ENLIST_PREPREPARE

TRANSACTION_NOTIFY_MARSHAL

NOTIFICAR_PROMOÇÃO_DE_TRANSACÃO

NOTIFICAR_TRANSAÇÃO_PROMOVER_NOVO

TRANSAÇÃO_NOTIFICAR_PROPAGAR_PULL

TRANSACTION_NOTIFY_PROPAGATE_PUSH

TRANSACTION_NOTIFY_TM_ONLINE

TRANSAÇÃO_NOTIFICAR_COMPROMISSO_FINALIZAR