Partilhar via


Notificações de transação

A KTM fornece uma fila de notificações para cada gestor de recursos. A KTM entrega notificações a um gestor de recursos colocando-as na fila do gestor 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 repetidamente ZwGetNotificationResourceManager.

  • 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 chama a rotina de callback sempre que coloca uma notificação na fila do gestor de recursos.

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

As constantes de notificação são definidas em Ktmtypes.h. Os nomes das 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 gestores de recursos podem receber

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

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

Notificações para Gestores de Recursos

Todos os gestores de recursos devem registar-se para receber notificações de TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE e TRANSACTION_NOTIFY_COMMIT, mesmo que posteriormente chamem ZwReadOnlyEnlistment para marcar uma lista de espera como somente leitura.

Os gerentes de recursos podem dar suporte a TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, mas também devem dar suporte à pré-preparação, preparação e confirmação de notificações multifásicas.

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

TRANSACTION_NOTIFY_PREPREPARE
Quando enviado: um cliente chama ZwCommitTransaction e nenhum gerenciador de recursos oferece suporte à confirmação monofásica ou se um gerente de transações superior chamar ZwPrePrepareEnlistment.

Recebido por: Gestores de recursos.

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

Restrições: O gestor de recursos também deve suportar TRANSACTION_NOTIFY_PREPARE e TRANSACTION_NOTIFY_COMMIT.

NOTIFICAR_PREPARAR_TRANSACÇÃO
Quando enviado: Após TRANSACTION_NOTIFY_PREPREPARE se um cliente chamar ZwCommitTransaction e nenhum gerenciador de recursos oferecer suporte a confirmação monofásica, ou se um gerente de transações superior chamar ZwPrepareEnlistment.

Recebido por: Gestores de recursos.

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

Restrições: O gestor de recursos também deve suportar TRANSACTION_NOTIFY_PREPREPARE e TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_COMMIT
Quando enviado: Após TRANSACTION_NOTIFY_PREPARE se um cliente chamar ZwCommitTransaction e nenhum gerenciador de recursos oferecer suporte a confirmação monofásica, ou se um gerente de transações superior chamar ZwCommitEnlistment.

Recebido por: Gestores de recursos.

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

Restrições: O gestor de recursos também deve suportar TRANSACTION_NOTIFY_PREPREPARE e TRANSACTION_NOTIFY_PREPARE.

NOTIFICAR_TRANSACAO_COMMIT_MONOFÁSICO
Quando enviado: um cliente chama ZwCommitTransaction e um gerenciador de recursos oferece suporte a operações de confirmação monofásicas.

Recebido por: Gestores 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 monofásicas, consulte Manipulando operações de confirmação.)

Restrições: O gerenciador de recursos também deve oferecer 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 a KTM deteta um erro (como uma falha na gravação no fluxo de log).

Recebido por: Gerentes 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 chame ZwRollbackComplete. (Para obter mais informações sobre operações de reversão, consulte Manipulando operações de reversão.)

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

NOTIFICAR_RECUPERAÇÃO_TRANSAÇÃO
Quando enviado: um gerenciador de recursos chama ZwRecoverResourceManager.

Recebido por: Gestores 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: Nenhuma.

NOTIFICAR_ULTIMA_RECUPERAÇÃO_DE_TRANSAÇÃO
Quando enviado: Após a KTM ter enviado o último TRANSACTION_NOTIFY_RECOVER para alistamentos de um gestor de recursos.

Recebido por: Gestores de recursos.

Ação necessária do destinatário: Finalizar 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: Nenhuma.

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

Recebido por: Gestores 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: Nenhuma.

NOTIFICAÇÃO_DE_TRANSACÇÃO_RM_DESCONECTADO
Quando enviado: o gestor de recursos que está a gerir uma operação de confirmação de uma única fase fecha o identificador de alistamento sem indicar que confirmou ou anulou a transação.

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

Ação necessária do destinatário: Tarefas de limpeza específicas da transação. Normalmente, essa notificação é útil para gerenciadores de recursos somente leitura.

Restrições: Nenhuma.

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

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

TRANSACTION_NOTIFY_ROLLBACK
Consulte a descrição anterior.

TRANSACTION_NOTIFY_RM_DESCONECTADO
Consulte a descrição anterior.

TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
Quando enviado: Depois que todos os gerentes de recursos receberam TRANSACTION_NOTIFY_PREPREPARE e responderam chamando ZwPrePrepareComplete.

Recebido por: Gerentes de transações superiores.

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

TRANSACTION_NOTIFY_PREPARE_COMPLETE
Quando enviado: Depois que todos os gerentes de recursos receberam TRANSACTION_NOTIFY_PREPARE e responderam chamando ZwPrepareComplete.

Recebido por: Gerentes de transações superiores.

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

TRANSACTION_NOTIFY_COMMIT_COMPLETE
Quando enviado: Depois que todos os gerentes de recursos receberam TRANSACTION_NOTIFY_COMMIT e responderam chamando ZwCommitComplete.

Recebido por: Gerentes de transações de nível superior.

Ação necessária do destinatário: Limpeza da transação.

NOTIFICAÇÃO_DE_REVERTER_TRANSACÇÃO_COMPLETA
Quando enviado: Depois que todos os gerentes de recursos receberam TRANSACTION_NOTIFY_ROLLBACK e responderam chamando ZwRollbackComplete.

Recebido por: Gerentes de transações superiores.

Ação requerida do destinatário: Operações de saneamento de transações.

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

Recebido por: Gestores de transações séniores.

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

TRANSACTION_NOTIFY_COMMIT_REQUEST
Quando enviado: Um cliente chama ZwCommitTransaction. Se um gestor de transações superior se tiver registado para esta notificação para um alistamento, a KTM envia TRANSACTION_NOTIFY_COMMIT_REQUEST para o gestor de transações superior em vez de enviar TRANSACTION_NOTIFY_COMMIT para os gestores de recursos.

Recebido por: Gerentes de transações superiores.

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

TRANSACTION_NOTIFY_REQUEST_OUTCOME
Quando enviado: um gerente 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 gerente de transações superior deve chamar ZwCommitEnlistment ou ZwRollbackEnlistment.

Notificações não utilizadas

As seguintes notificações são definidas em Ktmtypes.h, mas a KTM atualmente não as suporta:

NOTIFICAR_TRANSACAO_DELEGAR_COMMIT

TRANSACTION_NOTIFY_ENLIST_MASK

TRANSACTION_NOTIFY_ENLIST_PREPREPARE

TRANSACTION_NOTIFY_MARSHAL

NOTIFICAR_PROMOÇÃO_DE_TRANSACÇÃO

NOTIFICAÇÃO_DE_TRANSACÇÃO_PROMOVER_NOVO

TRANSACTION_NOTIFY_PROPAGATE_PULL

TRANSACTION_NOTIFY_PROPAGATE_PUSH

TRANSACTION_NOTIFY_TM_ONLINE

NOTIFICAR_TRANSACÇÃO_CONFIRMAR_FINALIZAR