MS DTC permits commit coordinator responsibility to be delegated from the coordinating transaction manager to one of its subordinate transaction managers or resource managers. Commit coordinator delegation occurs when the coordinating transaction manager detects that only one subordinate resource manager or transaction manager is enlisted in the transaction.
The coordinating transaction manager delegates commit coordinator responsibility to the resource manager when both of the following two conditions are True:
In this case, the coordinating transaction manager sets fSinglePhase when invoking the ITransactionResourceAsync::PrepareRequest method at phase one. This instructs the resource manager that it should act as the transaction coordinator.
MS DTC delegates commit coordinator responsibility to the subordinate transaction manager when both of the following two conditions are True:
In this case, the coordinating transaction manager sends a “delegated commit” message in place of the phase one message. The “delegated commit” message transfers commit coordinator responsibility from the current coordinating transaction manager to its subordinate transaction manager. This optimization is applied recursively. A transaction manager that receives commit coordinator responsibility may delegate commit coordinator responsibility to its subordinate transaction manager or resource manager.