3.8.5.1.1.1.1 Receiving a PARTNERTM_PROPAGATE_MTAG_PROPAGATE Message
When the Subordinate Transaction Manager Facet (section 1.3.3.3.5) receives a PARTNERTM_PROPAGATE_MTAG_PROPAGATE (section 2.2.9.1.1.1.1) message, the Subordinate Transaction Manager Facet MUST perform the following actions:
If the connection state is Idle:
Set the connection state to Propagating.
If the transaction manager does not have sufficient memory available to process the message, it MUST:
Send a PARTNERTM_PROPAGATE_MTAG_NO_MEM (section 2.2.9.1.1.1.4) message.
Set the connection state to Ended (section 3.8.1.1.13).
Otherwise, find the transaction object in the transaction table of the transaction manager using the guidTx field from the message as the key:
If the transaction object is found in the list:
Send a PARTNERTM_PROPAGATE_MTAG_DUPLICATE (section 2.2.9.1.1.1.3) message to the superior transaction manager.
Set the connection state to Ended.
Otherwise, if the transaction object is not found in the list:
Create a new transaction object with the information provided in the message:
Use the guidTx field from the message as the Transaction Object.Identifier value.
Use the isoLevel field from the message as the Isolation Level value.
Use the szDesc field from the message as the Description value.
Add the connection to the connection list of the transaction.
Create a new Enlistment object with the following values:
The Subordinate Transaction Manager Facet.
The new transaction object.
This connection object.
Assign the enlistment to the connection's Enlistment field.
Signal the Create Superior Enlistment (section 3.2.7.12) event on the Core Transaction Manager Facet (section 1.3.3.3.1) with the Enlistment object.
Otherwise, the message MUST be processed as specified in section 3.1.6.