4.5.2.2 Phase Two - Subordinate Transaction Manager Facets

If the subordinate branch is a transaction manager (that is, it is using either a CONNTYPE_PARTNERTM_BRANCH or a CONNTYPE_PARTNERTM_PROPAGATE connection), the transaction manager sends a PARTNERTM_PROPAGATE_MTAG_COMMITREQ user message. If the connection was created by using CONNTYPE_PARTNERTM_BRANCH, fIsMaster is zero (0). If the connection was created by using CONNTYPE_PARTNERTM_PROPAGATE, fIsMaster is one (1).

Field

Value

Value description

MsgTag

0x00000FFF

MTAG_USER_MESSAGE

fIsMaster

0x00000000

0

dwConnectionId

0x00000001

1

dwUserMsgType

0x00002005

PARTNERTM_PROPAGATE_MTAG_COMMITREQ

dwcbVarLenData

0x00000000

0

dwReserved1

0xcd64cd64

dwReserved1: 0xcd64cd64

When the Subordinate Transaction Manager Facet receives the commit request for a transaction, it then iterates through each subordinate branch of the transaction and notifies the subordinates that the transaction is committed. The transaction manager then waits for reply notifications from each of the subordinates to complete Phase Two processing.

When each subordinate branch of the transaction replies that it has committed the transaction (that is, each subordinate replies with a TXUSER_ENLISTMENT_COMMITREQDONE_OK or PARTNERTM_PROPAGATE_COMMITREQDONE_OK in the message, depending on the connection type), the transaction manager replies to its Superior Transaction Manager Facet with a PARTNERTM_PROPAGATE_MTAG_COMMITREQDONE message. If the connection was created by using CONNTYPE_PARTNERTM_BRANCH, fIsMaster is one (1). If the connection was created by using CONNTYPE_PARTNERTM_PROPAGATE, then fIsMaster is zero (0).

Field

Value

Value description

MsgTag

0x00000FFF

MTAG_USER_MESSAGE

fIsMaster

0x00000001

1

dwConnectionId

0x00000001

1

dwUserMsgType

0x00002008

PARTNERTM_PROPAGATE_MTAG_COMMITREQDONE

dwcbVarLenData

0x00000000

0

dwReserved1

0xcd64cd64

dwReserved1: 0xcd64cd64

The Subordinate Transaction Manager Facet has now completed all the work that is associated with the transaction. If the subordinate transaction manager facet's connection with its superior transaction manager facet is a CONNTYPE_PARTNERTM_BRANCH connection, the Subordinate Transaction Manager Facet initiates the disconnect sequence. If the Subordinate Transaction Manager Facet has any CONNTYPE_PARTNERTM_PROPAGATE connections with its subordinate branches, the Subordinate Transaction Manager Facet initiates the disconnect sequence on those subordinate branch connections.