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.