4.3.1 Performing Cold Recovery

This packet sequence is initiated by starting a 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 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 from the LU 6.2 implementation, it attempts to determine whether there is any recovery work to do for the LU Name Pair. In this example, the transaction manager has never performed recovery with respect to the LU Name Pair, and sends a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_WORK_TRANS user message to request cold recovery (Xln = DTCLUXLN_COLD). In this example, the message specifies 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 empty RemoteLog Name.

Field

Value

Value description

MsgTag

0x00000FFF

MTAG_USER_MESSAGE

fIsMaster

0x00000000

0

dwConnectionId

0x00000003

3

dwUserMsgType

0x00004404

TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_WORK_TRANS

dwcbVarLenData

0x00000038

56

dwReserved1

0xCD64CD64

dwReserved1:0xCD64CD64

lRecoverySeqNum

0x00000001

1

Xln

0x00000001

DTCLUXLN_COLD

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

0x00000000

0

When the LU 6.2 implementation receives the TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_WORK_TRANS user message, the LU 6.2 implementation attempts to exchange log names with the remote LU. For this example, the exchange is successful and the LU 6.2 implementation sends a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_THEIR_XLN_RESPONSE user message to the transaction manager that specifies cold recovery ("Xln = DTCLUXLN_COLD"), and an 8-byte RemoteLogName (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

0x00000001

DTCLUXLN_COLD

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 verifies that the reported state of the remote LU is consistent with the transaction manager's state. For this example, the transaction manager sends a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_XLN user message that specifies that it confirms the message (XlnConfirmation = 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

DTCLUXLNCONFIRMATION_CONFIRM

When the LU 6.2 implementation receives the TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_XLN user message, it sends a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CHECK_FOR_COMPARESTATES user message to the transaction manager to query whether recovery work is required for an LUW that involves the LU Name Pair.

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 checks to see if a comparison of local and remote LUW state is required. For this example, the transaction manager sends a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_NO_COMPARESTATES user message to the LU 6.2 implementation.

Field

Value

Value description

MsgTag

0x00000FFF

MTAG_USER_MESSAGE

fIsMaster

0x00000000

0

dwConnectionId

0x00000003

3

dwUserMsgType

0x00004415

TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_NO_COMPARESTATES

dwcbVarLenData

0x00000000

0

dwReserved1

0xCD64CD64

dwReserved1: 0xCD64CD64

When the LU 6.2 implementation receives the TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_NO_COMPARESTATES user message, no further messages are sent that use this connection and the LU 6.2 implementation initiates the disconnect sequence.