3.3.5.4.5 Receiving a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_THEIR_XLN_RESPONSE Message

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

  • If the connection state is Awaiting Response To Cold XLN:

    • Set the connection state to Processing Response To Cold XLN.

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

      • The LU Pair object referenced by this connection

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

    • If the following conditions are both TRUE:

      • The LU Pair Recovery State field of the LU Pair object referenced by this connection is not set to Synchronizing No Remote Name.

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

        Then perform the following actions:

      • Signal the Synchronization Inconsistent event with the following arguments:

        • The LU Pair object referenced by this connection

      • Send a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_XLN message using the connection.

        • The XlnConfirmation field MUST be set to DTCLUXLNCOMFIRMATION_LOGNAMEMISMATCH.

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

    • Otherwise, if the following conditions are both TRUE:

      • The Is Warm field of the LU Pair object referenced by this connection is TRUE.

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

        Then perform the following actions:

      • Signal the Synchronization Inconsistent event with the following arguments:

        • The LU Pair object referenced by this connection

      • Send a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_XLN message using the connection.

        • The XlnConfirmation field MUST be set to DTCLUXLNCOMFIRMATION_COLDWARMMISMATCH.

      • Signal the Local LU Initiated Recovery Worker Ended event with the following arguments:

        • The LU Pair object referenced by this connection

        • The connection object

      • Set the connection state to Ended.

    • Otherwise:

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

        • The LU Pair object referenced by this connection

        • The value of 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 arguments:

        • The LU Pair object referenced by this connection

      • Send a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_XLN message using the connection.

        • The XlnConfirmation field MUST be set to DTCLUXLNCOMFIRMATION_CONFIRM.

      • Set the connection state to Awaiting Compare States Query.

  • Otherwise, if the connection state is Awaiting Response To Warm XLN:

    • Set the connection state to Processing Response To Warm XLN.

    • If the following conditions are both TRUE:

      • The LU Pair Recovery State field of the LU Pair object referenced by this connection is not set to Synchronizing No Remote Name.

      • The Remote Log Name field of the LU Pair object referenced by this connection 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.

        Then perform the following actions:

      • Signal the Synchronization Inconsistent event with the following arguments:

        • The LU Pair object referenced by this connection

      • Send a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_XLN message using the connection.

        • The XlnConfirmation field MUST be set to DTCLUXLNCOMFIRMATION_LOGNAMEMISMATCH.

      • Signal the Local LU Initiated Recovery Worker Ended event with the following arguments:

        • The LU Pair object referenced by this connection

        • The connection object

      • Set the connection state to Ended.

    • Otherwise, if the following conditions are all TRUE:

      • The Is Warm field of the LU Pair object referenced by this connection is TRUE.

      • The LUW List of the LU Pair object referenced by this connection is not empty.

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

        Then perform the following actions:

      • Signal the Synchronization Inconsistent event with the following arguments:

        • The LU Pair object referenced by this connection

      • Send a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_XLN message using the connection.

        • The XlnConfirmation field MUST be set to DTCLUXLNCOMFIRMATION_COLDWARMMISMATCH.

      • Signal the Local LU Initiated Recovery Worker Ended event with the following arguments:

        • The LU Pair object referenced by this connection

        • The connection object

      • Set the connection state to Ended.

    • Otherwise:

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

        • The LU Pair object referenced by this connection

        • The value of 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 arguments:

        • The LU Pair object referenced by this connection

      • Send a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_XLN message using the connection.

        • The XlnConfirmation field MUST be set to DTCLUXLNCOMFIRMATION_CONFIRM.

      • If the Compare State Query Received field of the connection object is TRUE:

        • If the LUW To Recover field of the connection object is set:

          • Set the connection state to Awaiting Compare States Response.

        • Otherwise:

          • Signal the Local LU Initiated Recovery Worker Ended event with the following arguments:

            • The LU Pair object referenced by this connection

            • The connection object

          • Set the connection state to Ended.

      • Otherwise:

        • Set the state to Awaiting Compare States Query.

  • Otherwise, if the connection state is either Is Obsolete Awaiting Response To Cold XLN or Is Obsolete Awaiting Response To Warm XLN:

    • Set the connection state to Is Obsolete Processing Response.

    • Send a TXUSER_DTCLURECOVERYINITIATEDBYDTC_MTAG_CONFIRMATION_FOR_THEIR_XLN message using the connection.

      • The XlnConfirmation field MUST be set to DTCLUXLNCONFIRMATION_OBSOLETE.

    • Signal the Local LU Initiated Recovery Worker Ended event with the following arguments:

      • The LU Pair object referenced by this connection

      • The connection object

    • Set the connection state to Ended.

  • Otherwise, if the connection state is Ended (section 3.3.1.5.20):

    • Ignore the message.

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