Condividi tramite


Notifiche transazioni

KTM fornisce una coda di notifica per ogni resource manager. KTM invia notifiche a un gestore risorse inserendoli nella coda di Resource Manager.

Un resource manager può recuperare le notifiche dalla coda in modo sincrono o asincrono.

  • Per recuperare le notifiche in modo sincrono, resource manager può chiamare ripetutamente ZwGetNotificationResourceManager.

  • Per ricevere notifiche in modo asincrono, gestione risorse può chiamare TmEnableCallbacks per configurare una routine di callback. KTM chiama la routine di callback ogni volta che inserisce una notifica nella coda di Resource Manager.

Quando un gestore risorse chiama ZwCreateEnlistment per creare un elenco per una transazione, gestione risorse specifica i tipi di notifiche che deve ricevere. I responsabili delle risorse ricevono solo notifiche che registrano per ricevere.

Le costanti di notifica sono definite in Ktmtypes.h. I nomi delle costanti di notifica hanno un formato di TRANSACTION_NOTIFY_Xxx.

Il resto di questo argomento elenca tutte le costanti di notifica definite da Ktmtypes.h e le divide in tre gruppi:

  • Notifiche che i responsabili delle risorse possono ricevere

  • Notifiche che i responsabili delle transazioni superiori possono ricevere

  • Costanti di notifica definite ma attualmente non usate

Notifiche per Gestione risorse

Tutti i responsabili delle risorse devono registrarsi per ricevere TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE e TRANSACTION_NOTIFY_COMMIT notifiche, anche se successivamente chiamano ZwReadOnlyEnlistment per contrassegnare un elenco come di sola lettura.

I responsabili delle risorse possono supportare TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, ma devono anche supportare le notifiche di pre-preparazione, preparazione e commit in più fasi.

L'elenco seguente contiene tutte le notifiche che i responsabili delle risorse possono ricevere:

TRANSACTION_NOTIFY_PREPREPARE
Quando inviato: un client chiama ZwCommitTransaction e nessun gestore risorse supporta il commit a fase singola o se un gestore transazioni superiore chiama ZwPrepareEnlistment.

Ricevuto da: Gestione risorse.

Azione necessaria del destinatario: eseguire operazioni di pre-preparazione e quindi chiamare ZwPrepareComplete. Per altre informazioni sulle operazioni di pre-preparazione, vedere Gestione delle operazioni di commit.

Restrizioni: Gestione risorse deve supportare anche TRANSACTION_NOTIFY_PREPARE e TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_PREPARE
Quando viene inviato: dopo TRANSACTION_NOTIFY_PREPREPARE se un client chiama ZwCommitTransaction e nessun gestore risorse supporta il commit a fase singola o se un gestore transazioni superiore chiama ZwPrepareEnlistment.

Ricevuto da: Gestione risorse.

Azione necessaria per il destinatario: Eseguire operazioni di preparazione e quindi chiamare ZwPrepareComplete. Per altre informazioni sulle operazioni di preparazione, vedere Gestione delle operazioni di commit.

Restrizioni: Gestione risorse deve supportare anche TRANSACTION_NOTIFY_PREPREPARE e TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_COMMIT
Quando viene inviato: dopo TRANSACTION_NOTIFY_PREPARE se un client chiama ZwCommitTransaction e nessun gestore risorse supporta il commit a fase singola o se un gestore transazioni superiore chiama ZwCommitEnlistment.

Ricevuto da: Gestione risorse.

Azione richiesta del destinatario: eseguire operazioni di commit e quindi chiamare ZwCommitComplete. Per altre informazioni sulle operazioni di commit, vedere Gestione delle operazioni di commit.

Restrizioni: Gestione risorse deve supportare anche TRANSACTION_NOTIFY_PREPREPARE e TRANSACTION_NOTIFY_PREPARE.

TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT
Quando inviato: un client chiama ZwCommitTransaction e un resource manager supporta operazioni di commit a fase singola.

Ricevuto da: Gestione risorse.

Azione necessaria del destinatario: eseguire il commit della transazione o chiamare ZwSinglePhaseReject. Per altre informazioni sulle operazioni di commit a singola fase, vedere Gestione delle operazioni di commit.

Restrizioni: Gestione risorse deve supportare anche TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE e TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_ROLLBACK
Quando inviato: un client chiama ZwRollbackTransaction, un gestore di transazioni superiore chiama ZwRollbackEnlistment o KTM rileva un errore (ad esempio una scrittura non riuscita nel flusso di log).

Ricevuto da: manager delle risorse e manager delle transazioni superiori.

Azione necessaria del destinatario: eseguire tutte le operazioni necessarie per eseguire il rollback dei dati della transazione e quindi chiamare ZwRollbackComplete. Per altre informazioni sulle operazioni di rollback, vedere Gestione delle operazioni di rollback.

Restrizioni: Tutti i responsabili delle risorse e i responsabili delle transazioni superiori devono supportare TRANSACTION_NOTIFY_ROLLBACK.

TRANSACTION_NOTIFY_RECOVER
Quando inviato: un resource manager chiama ZwRecoverResourceManager.

Ricevuto da: Gestione risorse.

Azione necessaria del destinatario: il gestore risorse deve chiamare ZwRecoverEnlistment. Per altre informazioni sulle operazioni di ripristino, vedere Gestione delle operazioni di ripristino.

Restrizioni: nessuna.

TRANSACTION_NOTIFY_LAST_RECOVER
Quando inviato: dopo che KTM ha inviato l'ultimo TRANSACTION_NOTIFY_RECOVER per gli elenchi di un resource manager.

Ricevuto da: Gestione risorse.

Azione necessaria del destinatario: terminare l'operazione di ripristino. Per altre informazioni sulle operazioni di ripristino, vedere Gestione delle operazioni di ripristino.

Restrizioni: nessuna.

TRANSACTION_NOTIFY_INDOUBT
Quando viene inviato: dopo che un gestore risorse chiama ZwRecoverEnlistment, se KTM non può determinare se la transazione deve essere eseguita il commit o il rollback (in genere perché TPS ha un gestore transazioni superiore non disponibile).

Ricevuto da: Gestione risorse.

Azione necessaria del destinatario: non eseguire alcuna operazione finché KTM invia TRANSACTION_NOTIFY_COMMIT o TRANSACTION_NOTIFY_ROLLBACK.

Restrizioni: nessuna.

TRANSACTION_NOTIFY_RM_DISCONNECTED
Quando inviato: Gestione risorse che gestisce un'operazione di commit a singola fase chiude l'handle di inserimento senza indicare che ha eseguito il commit o il rollback della transazione.

Ricevuta da: Gestione risorse e responsabili delle transazioni superiori che dispongono di elenchi per la transazione.

Azione necessaria per il destinatario: operazioni di pulizia specifiche delle transazioni. In genere, questa notifica è utile per le gestioni risorse di sola lettura.

Restrizioni: nessuna.

Notifiche per i responsabili delle transazioni superiori

I responsabili delle transazioni superiori possono ricevere le notifiche seguenti:

TRANSACTION_NOTIFY_ROLLBACK
Vedere la descrizione precedente.

TRANSACTION_NOTIFY_RM_DISCONNECTED
Vedere la descrizione precedente.

TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
Quando inviato: dopo che tutti i responsabili delle risorse hanno ricevuto TRANSACTION_NOTIFY_PREPREPARE e risposto chiamando ZwPrepareComplete.

Ricevuto da: Manager delle transazioni superiori.

Azione necessaria del destinatario: il gestore delle transazioni superiore deve chiamare ZwPrepareEnlistment.

TRANSACTION_NOTIFY_PREPARE_COMPLETE
Quando viene inviato: dopo che tutti i responsabili delle risorse hanno ricevuto TRANSACTION_NOTIFY_PREPARE e risposto chiamando ZwPrepareComplete.

Ricevuto da: Manager delle transazioni superiori.

Azione necessaria del destinatario: il gestore delle transazioni superiore deve chiamare ZwCommitEnlistment.

TRANSACTION_NOTIFY_COMMIT_COMPLETE
Quando inviato: dopo che tutti i responsabili delle risorse hanno ricevuto TRANSACTION_NOTIFY_COMMIT e risposto chiamando ZwCommitComplete.

Ricevuto da: Manager delle transazioni superiori.

Azione necessaria del destinatario: operazioni di pulizia delle transazioni.

TRANSACTION_NOTIFY_ROLLBACK_COMPLETE
Quando inviato: dopo che tutti i responsabili delle risorse hanno ricevuto TRANSACTION_NOTIFY_ROLLBACK e risposto chiamando ZwRollbackComplete.

Ricevuto da: gestori delle transazioni superiori.

Azione richiesta del destinatario: operazioni di pulizia delle transazioni.

TRANSACTION_NOTIFY_RECOVER_QUERY
Quando viene inviato: un gestore di transazioni superiore chiama ZwRecoverResourceManager.

Ricevuto da: gestori delle transazioni superiori.

Azione richiesta del destinatario: il gestore delle transazioni superiore deve chiamare ZwCommitEnlistment o ZwRollbackEnlistment per l'integrazione.

TRANSACTION_NOTIFY_COMMIT_REQUEST
Quando viene inviato: un client chiama ZwCommitTransaction. Se un gestore delle transazioni superiore ha registrato per questa notifica per un'integrazione, KTM invia TRANSACTION_NOTIFY_COMMIT_REQUEST al gestore transazioni superiore invece di inviare TRANSACTION_NOTIFY_COMMIT ai gestori risorse.

Ricevuto da: gestori delle transazioni superiori.

Azione richiesta del destinatario: il gestore delle transazioni superiore chiama ZwCommitEnlistment.

TRANSACTION_NOTIFY_REQUEST_OUTCOME
Quando viene inviato: un gestore di risorse chiama TmRequestOutcomeEnlistment mentre la transazione è nello stato preparato.

Ricevuto da: gestori delle transazioni superiori.

Azione richiesta del destinatario: il gestore delle transazioni superiore deve chiamare ZwCommitEnlistment o ZwRollbackEnlistment.

Notifiche inutilizzate

Le notifiche seguenti sono definite in Ktmtypes.h, ma KTM attualmente non le supporta:

TRANSACTION_NOTIFY_DELEGATE_COMMIT

TRANSACTION_NOTIFY_ENLIST_MASK

TRANSACTION_NOTIFY_ENLIST_PREPREPARE

TRANSACTION_NOTIFY_MARSHAL

TRANSACTION_NOTIFY_PROMOTE

TRANSACTION_NOTIFY_PROMOTE_NEW

TRANSACTION_NOTIFY_PROPAGATE_PULL

TRANSACTION_NOTIFY_PROPAGATE_PUSH

TRANSACTION_NOTIFY_TM_ONLINE

TRANSACTION_NOTIFY_COMMIT_FINALIZE