3.3.5.5.1 Receiving a TXUSER_DTCLURECOVERYINITIATEDBYLU_MTAG_THEIR_XLN Message

When the Transaction Manager Communicating with an LU 6.2 Implementation Facet receives a TXUSER_DTCLURECOVERYINITIATEDBYLU_MTAG_THEIR_XLN message, it MUST perform the following actions:

  • If the connection state is Idle:

    • Set the connection state to Processing XLN Request.

    • Attempt to find the LU Pair object keyed by the first cbLength bytes of the rgbBlob field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the LuNamePair field) of the message in the LU Pair Table.

    • If the LU Pair object is not found:

    • Otherwise, if the LU Pair object is found:

      • Set the LU Pair field of the connection object to the found LU Pair object.

      • Signal the Received New Recovery Sequence Number event with the following arguments:

        • The LU Pair object referenced by this connection

        • The value of the RecoverySeqNum field of the message

      • Add the connection object to the Remote LU Initiated Recovery List.

      • Signal the Begin Remote LU Initiated Synchronization event with the following argument:

        • The LU Pair object referenced by this connection

      • Signal the Received New Remote Log Name event with the following arguments:

        • The LU Pair object referenced by this connection

        • The first cbLength bytes of the rgbBlob field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the RemoteLogName field) of the message

      • If both the following conditions are TRUE:

        • The LU Pair Recovery State field of the found LU Pair object is not set to Synchronizing No Remote Name.

        • The Remote Log Name field of the found LU Pair object is not set to the first cbLength bytes of the rgbBlob field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the RemoteLogName field) of the message.

          Or if both the following conditions are TRUE:

        • The cbLength field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the LocalLogName field) of the message is not set.

        • The Local Log Name field of the found LU Pair object is not set to the value of cbLength field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the LocalLogName field) of the message.

          Then perform the following actions:

        • Send a TXUSER_DTCLURECOVERYINITATEDBYLU_MTAG_RESPONSE_FOR_THEIR_XLN message using the connection.

          • The XlnResponse field MUST be set to DTCLUXLNRESPONSE_LOGNAMEMISMATCH.

          • If the Is Warm flag of the found LU Pair object is set to FALSE, the Xln field MUST be set to DTCLUXLN_COLD.

          • Otherwise if the Is Warm flag is set to TRUE, the Xln field MUST be set to DTCLUXLN_WARM.

          • The dwProtocol field MUST be set to 0.

          • The first cbLength bytes of the rgbBlob field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the OurLogName field) MUST be set to the Local Log Name field of the found LU Pair object. The cbLength field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the OurLogName field) MUST be set to the number of bytes in the Local Log Name field of the found LU Pair object.

        • Signal the Remote LU Initiated Recovery (section 3.3.1.6.10) event with the following arguments:

          • The LU Pair object referenced by this connection

          • The connection object

        • Set the connection state to Ended (section 3.3.1.6.10).

        • Signal the Synchronization Inconsistent event with the following argument:

          • LU Pair object referenced by this connection

      • Otherwise:

        • If the following conditions are all TRUE:

          • The Is Warm flag of the found LU Pair object is set to TRUE.

          • The LUW List of the found LU Pair object is not empty.

          • The Xln field of the message is set to DTCLUXLN_COLD.

            Then perform the following actions:

          • Signal the Synchronization Inconsistent event with the following argument:

            • LU Pair object referenced by this connection

          • Send a TXUSER_DTCLURECOVERYINITATEDBYLU_MTAG_RESPONSE_FOR_THEIR_XLN message using the connection.

            • The XlnResponse field MUST be set to DTCLUXLNRESPONSE_COLDWARMMISMATCH.

            • If the Is Warm flag of the found LU Pair object is set to FALSE, the Xln field MUST be set to DTCLUXLN_COLD.

            • Otherwise, if the Is Warm flag is set to TRUE, the Xln field MUST be set to DTCLUXLN_WARM.

            • The dwProtocol field MUST be set to 0.

            • The first cbLength bytes of the rgbBlob field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the OurLogName field) MUST be set to the Local Log Name field of the found LU Pair object. The cbLength field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the OurLogName field) MUST be set to the number of bytes in the Local Log Name field of the found LU Pair object.

          • Signal the Remote LU Initiated Recovery (section 3.3.7.22) event with the following arguments:

            • The LU Pair object referenced by this connection

            • The connection object

          • Set the connection state to Ended (section 3.3.1.6.10).

      • Otherwise, the transaction manager that communicates with an LU 6.2 implementation (section 3.2) SHOULD perform the following actions:

        • If the following conditions are all TRUE:

          • The Xln field of the message is set to DTCLUXLN_WARM.

          • The Is Warm flag of the found LU Pair object is set to TRUE.

          • The cbLength field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the LocalLogName field) of the message is not set to 0.

            Then perform the following actions.

          • Signal the Received New Remote Log Name event with the following arguments:

            • LU Pair object referenced by this connection

            • The first cbLength bytes of the rgbBlob field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the RemoteLogName field) of the message

          • Signal the Synchronization Successful event with the following argument:

            • The LU Pair object referenced by this connection

          • Send a TXUSER_DTCLURECOVERYINITATEDBYLU_MTAG_RESPONSE_FOR_THEIR_XLN message using the connection.

            • The XlnResponse field MUST be set to DTCLUXLNRESPONSE_OK_SENDCONFIRMATION.

            • If the Is Warm flag of the found LU Pair object is set to FALSE, the Xln field MUST be set to DTCLUXLN_COLD.

            • Otherwise, if the Is Warm flag is set to TRUE, the Xln field MUST be set to DTCLUXLN_WARM.

            • The dwProtocol field MUST be set to 0.

            • The first cbLength bytes of the rgbBlob field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the OurLogName field) MUST be set to the Local Log Name field of the found LU Pair object. The cbLength field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the OurLogName field) MUST be set to the number of bytes in the Local Log Name field of the found LU Pair object.

            • Set the connection state to Awaiting Compare States Request.

        • Otherwise:

          • Send a TXUSER_DTCLURECOVERYINITATEDBYLU_MTAG_RESPONSE_FOR_THEIR_XLN message using the connection.

            • The XlnResponse field MUST be set to DTCLUXLNRESPONSE_OK_SENDOURXLNBACK.

            • If the Is Warm flag of the found LU Pair object is set to FALSE, the Xln field MUST be set to DTCLUXLN_COLD; otherwise, if the Is Warm flag is set to TRUE, the Xln field MUST be set to DTCLUXLN_WARM.

            • The dwProtocol field is set to 0.

            • The first cbLength bytes of the rgbBlob field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the OurLogName field) MUST be set to the Local Log Name field of the found LU Pair object. The cbLength field of the DTCLU_VARLEN_BYTEARRAY structure (contained in the OurLogName field) MUST be set to the number of bytes in the Local Log Name field of the found LU Pair object.

          • Set the connection state to Awaiting XLN Confirmation.

  • Otherwise, if the connection state is 3.3.1.6.103.3.1.6.10:

    • Ignore the message.

  • Otherwise, the message MUST be processed as an invalid message, as specified in [MS-DTCO], section 3.1.6.