4.5.1 Performing Warm Recovery
This packet sequence is initiated by starting a new connection on a transport session between an LU 6.2 implementation and a transaction manager.
The packet sequence starts when an LU 6.2 implementation initiates a connection by using CONNTYPE_TXUSER_DTCLURECOVERYINITIATEDBYDTC.
|
Field |
Value |
Value description |
|---|---|---|
|
MsgTag |
0x00000005 |
MTAG_CONNECTION_REQ |
|
fIsMaster |
0x00000001 |
1 |
|
dwConnectionId |
0x00000003 |
3 |
|
dwUserMsgType |
0x00000020 |
CONNTYPE_TXUSER_DTCLURECOVERYINITIATEDBYDTC |
|
dwcbVarLenData |
0x00000000 |
0 |
|
dwReserved1 |
0x00000000 |
0 |
The LU 6.2 implementation then sends a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_GETWORK user message to the transaction manager that specifies the LU Name Pair with which the LU 6.2 implementation has registered as the recovery process. For this example, the LU 6.2 implementation requests to obtain any recovery work related to the LU Name Pair of 58 bytes that contains the Unicode characters "L"MSFT.L3160200 | MSFT.WNWCI22A"".
|
Field |
Value |
Value description |
|---|---|---|
|
MsgTag |
0x00000FFF |
MTAG_USER_MESSAGE |
|
fIsMaster |
0x00000001 |
1 |
|
dwConnectionId |
0x00000003 |
3 |
|
dwUserMsgType |
0x00004401 |
TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_GETWORK |
|
dwcbVarLenData |
0x00000040 |
64 |
|
dwReserved1 |
0xCD64CD64 |
dwReserved1:0xCD64CD64 |
|
LuNamePair: cbLength |
0x0000003A |
58 |
|
LuNamePair: rgbBlob |
0x0053004D 0x00540046 0x004C002E 0x00310033 0x00300036 0x00300032 0x00200030 0x0020007C 0x0053004D 0x00540046 0x0057002E 0x0057004E 0x00490043 0x00320032 0x00000041 |
L"MSFT.L3160200 | MSFT.WNWCI22A" |
When the transaction manager receives the TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_GETWORK user message, it attempts to determine if there are any transactions that require recovery work associated with the LU Name Pair. For this example, the transaction manager determines that there are one or more transactions that require recovery work, and sends a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_WORK_TRANS user message to the LU 6.2 implementation that specifies warm recovery (tmXln = DTCLUXLN_WARM), a recovery sequence number set to 1, the dwProtocol set to 0, the transaction manager's log name ("A4201087-FED1-4F15-B06B-9E91CA89B11C"), and an 8-byte Remote LU Log Name (EBCDIC("0705CE30")).
|
Field |
Value |
Value description |
|---|---|---|
|
MsgTag |
0x00000FFF |
MTAG_USER_MESSAGE |
|
fIsMaster |
0x00000000 |
0 |
|
dwConnectionId |
0x00000003 |
3 |
|
dwUserMsgType |
0x00004404 |
TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_WORK_TRANS |
|
dwcbVarLenData |
0x00000040 |
64 |
|
dwReserved1 |
0xCD64CD64 |
dwReserved1:0xCD64CD64 |
|
lRecoverySeqNum |
0x00000001 |
1 |
|
Xln |
0x00000002 |
DTCLUXLN_WARM |
|
dwProtocol |
0x00000000 |
0 |
|
OurLogName: cbLength |
0x00000024 |
36 |
|
OurLogName: rgbBlob |
0x30323461 0x37383031 0x6465662D 0x66342D31 0x622D3531 0x2D623630 0x31396539 0x39386163 0x63313162 |
"A4201087-FED1-4F15-B06B-9E91CA89B11C" |
|
RemoteLogName: cbLength |
0x0000008 |
8 |
|
RemoteLogName: rgbBlob |
0xF5F0F7F0 0xF0F3C5C3 |
EBCDIC("0705CE30") |
When the LU 6.2 implementation receives the TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_WORK_TRANS user message, it attempts to initiate an exchange of Exchange Log Name (XLN) messages with the remote LU. For this example, the LU 6.2 implementation succeeds in this and sends a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CHECK_FOR_COMPARESTATES user message to the transaction manager.
|
Field |
Value |
Value description |
|---|---|---|
|
MsgTag |
0x00000FFF |
MTAG_USER_MESSAGE |
|
fIsMaster |
0x00000001 |
1 |
|
dwConnectionId |
0x00000003 |
3 |
|
dwUserMsgType |
0x00004413 |
TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CHECK_FOR_COMPARESTATES |
|
dwcbVarLenData |
0x00000000 |
0 |
|
dwReserved1 |
0xCD64CD64 |
dwReserved1:0xCD64CD64 |
When the transaction manager receives the TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CHECK_FOR_COMPARESTATES user message, it locates an unresolved transaction associated with the LU Name Pair. For this example, the transaction manager locates a failed-to-notify transaction, and sends a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_COMPARESTATES_INFO user message to the LU 6.2 implementation that specifies a CompareStates set to 1 (DTCLUCOMPARESTATE_COMMITTED), and an LUW LuTransId of 130 bytes that contains four concatenated Unicode strings ("L"MSFT.L3160200"; L"07D73802F87D0001"; L"B2E7020300000001"; L"0000000000000003"").
|
Field |
Value |
Value description |
|---|---|---|
|
MsgTag |
0x00000FFF |
MTAG_USER_MESSAGE |
|
fIsMaster |
0x00000000 |
0 |
|
dwConnectionId |
0x00000003 |
3 |
|
dwUserMsgType |
0x00004414 |
TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_COMPARESTATES_INFO |
|
dwcbVarLenData |
0x0000008C |
140 |
|
dwReserved1 |
0xCD64CD64 |
dwReserved1:0xCD64CD64 |
|
CompareStates |
0x00000001 |
DTCLUCOMPARESTATE_COMMITTED |
|
LuTransId: cbLength |
0x00000082 |
130 |
|
LuTransId: rgbBlob |
0x0053004D 0x00540046 0x004C002E 0x00310033 0x00300036 0x00300032 0x00000030 0x00370030 0x00370044 0x00380033 0x00320030 0x00380046 0x00440037 0x00300030 0x00310030 0x00420000 0x00450032 0x00300037 0x00300032 0x00300033 0x00300030 0x00300030 0x00300030 0x00000031 0x00300030 0x00300030 0x00300030 0x00300030 0x00300030 0x00300030 0x00300030 0x00330030 0x00000000 |
L"MSFT.L3160200" L"07D73802F87D0001" L"B2E7020300000001" L"0000000000000003" |
When the LU 6.2 implementation receives the TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_COMPARESTATES_INFO user message, it attempts to identify the LUW for which recovery is to be performed by using the LUW LuTransId. For this example, the LU 6.2 implementation identifies the LUW and initiates an exchange of Compare States messages with the remote LU. The LU 6.2 implementation then waits for an XLN message from the remote LU. In this example, an XLN message is received, and the LU 6.2 implementation sends a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_THEIR_XLN_RESPONSE user message to the transaction manager that specifies warm recovery (Xln = DTCLUXLN_WARM), dwProtocol set to 0, and an 8-byte Remote LU Log Name (EBCDIC("0705CE30")).
|
Field |
Value |
Value description |
|---|---|---|
|
MsgTag |
0x00000FFF |
MTAG_USER_MESSAGE |
|
fIsMaster |
0x00000001 |
1 |
|
dwConnectionId |
0x00000003 |
3 |
|
dwUserMsgType |
0x00004410 |
TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_THEIR_XLN_RESPONSE |
|
dwcbVarLenData |
0x00000014 |
20 |
|
dwReserved1 |
0xCD64CD64 |
dwReserved1:0xCD64CD64 |
|
Xln |
0x00000002 |
DTCLUXLN_WARM |
|
dwProtocol |
0x00000000 |
0 |
|
RemoteLogName: cbLength |
0x00000008 |
8 |
|
RemoteLogName: rgbBlob |
0xF5F0F7F0 0xF0F3C5C3 |
EBCDIC("0705CE30") |
When the transaction manager receives the TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_THEIR_XLN_RESPONSE user message, it attempts to check the consistency of its state with the reported state of the remote LU. For this example, the transaction manager finds no consistency problems, and sends a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_XLN user message that specifies XlnConfirmation set to 1 (DTCLUXLNCONFIRMATION_CONFIRM).
|
Field |
Value |
Value description |
|---|---|---|
|
MsgTag |
0x00000FFF |
MTAG_USER_MESSAGE |
|
fIsMaster |
0x00000000 |
0 |
|
dwConnectionId |
0x00000003 |
3 |
|
dwUserMsgType |
0x00004411 |
TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_XLN |
|
dwcbVarLenData |
0x00000004 |
4 |
|
dwReserved1 |
0xCD64CD64 |
dwReserved1:0xCD64CD64 |
|
XlnConfirmation |
0x00000001 |
DDTCLUXLNCONFIRMATION_CONFIRM |
When the LU 6.2 implementation receives the TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_XLN user message, it waits for a Compare States message from the remote LU. In this example, a Compare States message is received, and the information it carries is sent to the transaction manager by using a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_THEIR_COMPARESTATES user message that specifies the CompareStates set to 1 (DTCLUCOMPARESTATE_COMMITTED).
|
Field |
Value |
Value description |
|---|---|---|
|
MsgTag |
0x00000FFF |
MTAG_USER_MESSAGE |
|
fIsMaster |
0x00000001 |
1 |
|
dwConnectionId |
0x00000003 |
3 |
|
dwUserMsgType |
0x00004416 |
TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_THEIR_COMPARESTATES |
|
dwcbVarLenData |
0x00000004 |
4 |
|
dwReserved1 |
0xCD64CD64 |
dwReserved1:0xCD64CD64 |
|
XlnConfirmation |
0x00000001 |
DTCLUCOMPARESTATE_COMMITTED |
When the transaction manager receives the TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_THEIR_COMPARESTATES user message, it checks the consistency of the LUW state that it holds and the reported LUW state held by the remote LU. In this example, the transaction manager finds no inconsistency and sends a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_COMPARESTATES user message to the LU 6.2 implementation that specifies CompareStatesConfirmation set to 1 (DTCLUCOMPARESTATESCONFIRMATION_CONFIRM).
|
Field |
Value |
Value description |
|---|---|---|
|
MsgTag |
0x00000FFF |
MTAG_USER_MESSAGE |
|
fIsMaster |
0x00000000 |
0 |
|
dwConnectionId |
0x00000003 |
3 |
|
dwUserMsgType |
0x00004417 |
TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_COMPARESTATES |
|
dwcbVarLenData |
0x00000004 |
4 |
|
dwReserved1 |
0xCD64CD64 |
dwReserved1:0xCD64CD64 |
|
CompareStatesConfirmation |
0x00000001 |
DTCLUCOMPARESTATESCONFIRMATION_CONFIRM |
When the LU 6.2 implementation receives the TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_COMPARESTATES user message, no more messages are to be sent on the connection, and the LU 6.2 implementation initiates the disconnect sequence.