Life of a Transaction: Transaction Commit Phase 2–Commit I (Phases)

k1.1 The client’s transaction manager writes the transaction Commit record to the transaction manager log file.
k1.2 If the client requested transaction outcome notification, then the client’s transaction manager notifies the client's MS DTC proxy that the transaction has completed phase one.
k1.3 The client’s transaction manager initiates the second phase of the two-phase commit process. All of the work of committing the transaction is done in parallel. The client’s transaction manager determines if any resource managers on the client’s system have enlisted in the transaction. If so, the client’s transaction manager asks each of these resource managers to commit. In our example, no resource managers on the client’s system participated in the transaction.
k1.4 The client’s transaction manager determines which subordinate transaction managers have participated in the transaction and sends each of them a Commit message. These Commit messages are sent to the subordinate transaction managers in parallel. The Commit message informs the subordinate transaction managers to perform phase two processing.
k2 The MS DTC proxy returns from the ITransaction::Commit method invocation. This indicates to the client that phase one has completed.
k4.1 The resource manager’s transaction manager writes a Commit record to its local transaction manager log file.
k4.2 The resource manager’s transaction manager determines whether any transaction managers are subordinate to it. In our example, the resource manager’s transaction manager has no subordinates. If the resource manager’s transaction manager has subordinates, it sends each of them a Commit message. These Commit messages are sent to the subordinate transaction managers in parallel.
k4.3 The resource manager’s transaction manager uses its internal enlistment objects to determine which resource managers have enlisted in the transactions. It sends a Commit message to the MS DTC proxy of each enlisted resource manager. These Commit messages are sent to the MS DTC Proxies in parallel.
k4.4 The resource manager’s transaction manager awaits notification from all of the resource managers involved in the transaction that they have completed their commit work.
k5 Each MS DTC proxy invokes the resource manager’s ITransactionResourceAsync::CommitRequest method. This method invocation informs the resource manager that it should perform the second phase of the two-phase commit protocol.
k6 Each resource manager replies to the CommitRequest call from the MS DTC proxy to acknowledge that the CommitRequest has been received. After responding to the CommitRequest method invocation, the resource manager begins the work necessary to commit the transaction.