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.