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,但还必须支持多阶段通知,包括预准备、准备和提交。
以下列表包含资源管理器可以接收的所有通知:
TRANSACTION_NOTIFY_PREPREPARE
发送时:客户端调用 ZwCommitTransaction ,并且没有资源管理器支持单阶段提交,或者 如果高级事务管理器 调用 ZwPrepareEnlistment。
接收者:资源管理员。
收件人的必要操作:执行预准备操作,然后调用 ZwPrePrepareComplete。 (有关预准备操作的详细信息,请参阅 处理提交操作。)
限制: 资源管理器还必须支持TRANSACTION_NOTIFY_PREPARE和TRANSACTION_NOTIFY_COMMIT。
事务通知准备
发送时:如果在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。
事务通知回滚
发送时:客户端调用 ZwRollbackTransaction、高级事务管理器调用 ZwRollbackEnlistment,或 KTM 检测到错误(例如写入日志流失败)。
接收者:资源管理器和高级事务管理器。
收件人所需的操作:执行回滚事务数据所需的任何操作,然后调用 ZwRollbackComplete。 (有关回滚操作的详细信息,请参阅 处理回滚操作。)
限制: 所有资源管理器和高级事务管理器都必须支持TRANSACTION_NOTIFY_ROLLBACK。
事务_通知_恢复
发送时:资源管理器调用 ZwRecoverResourceManager。
接收方:资源管理员。
收件人所需的作为:资源管理器必须调用 ZwRecoverEnlistment。 (有关恢复作的详细信息,请参阅 处理恢复作。
限制: 没有。
事务通知最后恢复
发送时:在 KTM 为资源管理器的登记发送最后一条 TRANSACTION_NOTIFY_RECOVER 消息之后。
接收方:资源管理员。
收件人所需的操作:结束恢复操作。 (有关恢复作的详细信息,请参阅 处理恢复作。
限制: 没有。
TRANSACTION_NOTIFY_INDOUBT
发送时:在资源管理器调用 ZwRecoverEnlistment 后,如果 KTM 无法确定事务是应提交还是回滚(通常是因为 TPS 具有不可用的上级事务管理器)。
接收者:资源管理员。
收件人所需的操作:不要执行任何操作,直到 KTM 发送 TRANSACTION_NOTIFY_COMMIT 或 TRANSACTION_NOTIFY_ROLLBACK。
限制: 没有。
事务通知RM断开连接
发送时:处理单阶段提交操作的资源管理器关闭登记句柄,而不指示它已提交或回滚事务。
接收者:具有事务登记的资源管理器和高级事务管理器。
收件人所需的操作:与事务相关的清理操作。 通常,此通知对只读资源管理器很有用。
限制: 没有。
高级事务管理器通知
高级事务管理器 可以接收以下通知:
TRANSACTION_NOTIFY_RM_DISCONNECTED(一事务通知:资源管理器已断开连接)
请参阅前面的说明。
TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
发送时:在所有资源管理器收到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。
TRANSACTION_NOTIFY_REQUEST_OUTCOME
发送时:资源管理器在事务处于准备状态时调用 TmRequestOutcomeEnlistment 。
接收者:高级事务管理器。
收件人所需的动作:高级事务管理器必须调用 ZwCommitEnlistment 或 ZwRollbackEnlistment。
未使用的通知
以下通知在 Ktmtypes.h 中定义,但 KTM 当前不支持这些通知:
If further context suggests translation, then a potential translation might be "交易_通知_代理_提交".
TRANSACTION_NOTIFY_ENLIST_MASK
TRANSACTION_NOTIFY_ENLIST_PREPREPARE
TRANSACTION_NOTIFY_MARSHAL
交易通知提升
交易_通知_提升_新
TRANSACTION_NOTIFY_PROPAGATE_PULL
TRANSACTION_NOTIFY_PROPAGATE_PUSH
TRANSACTION_NOTIFY_TM_ONLINE
TRANSACTION_NOTIFY_COMMIT_FINALIZE