IBM Support

IT35701: Messages left on source queue at the end of a successful message-to-file transfer.

Subscribe to this APAR

By subscribing, you receive periodic emails alerting you to the status of the APAR, along with a link to the fix after it becomes available. You can track this item individually or track all items by product.

Notify me when this APAR changes.

Notify me when an APAR for this component changes.

 

APAR status

  • Closed as program error.

Error description

  • An MQ Managed File Transfer agent is acting as the source agent
    for a message-to-file transfer when it is stopped unexpectedly.
    
    When the agent restarts, the managed transfer resumes and
    completes successfully. However, the message that was included
    in the managed transfer is not deleted from the source queue
    when the transfer finishes.
    
    An MQ Managed File Transfer agent trace covering the time when
    the agent restarts shows that it encountered a
    NullPointerException while processing the source disposition for
    the message-to-file transfer. Here is an extract from a trace
    file that shows this:
    
    -----------------------------------------------
    [26/02/21 00:04:47.199.5Q]  00000016  @6fc809df
    c.i.w.t.frame.impl.TransferFrameSenderImpl
           ----+----+----+  X  deleteOpenFile
    [26/02/21 00:04:47.199.5Q]  00000016 <null>
    [java.lang.NullPointerException] at:
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.io.queue.FTEQueueChannel.openForRead(FTEQueueChan
    nel.java:336)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.io.queue.FTEQueueFilterChannel.openForRead(FTEQue
    ueFilterChannel.java:135)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.frame.impl.TransferFrameSenderImpl.openA
    ndLockFile(TransferFrameSenderImpl.java:1454)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.frame.impl.TransferFrameSenderImpl.delet
    eOpenFile(TransferFrameSenderImpl.java:1846)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.impl.TransferSenderRunnable.deleteFile(T
    ransferSenderRunnable.java:1562)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.impl.TransferSenderImpl.deleteFile(Trans
    ferSenderImpl.java:382)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.statestore.impl.FTEMutableSenderState.processSour
    ceDisposition(FTEMutableSenderState.java:1155)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.statestore.impl.FTEMutableSenderState.addProgress
    Audit(FTEMutableSenderState.java:854)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.statestore.impl.FTEStateStoreImpl.publishProgress
    Audit(FTEStateStoreImpl.java:1827)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.statestore.impl.FTEStateStoreImpl.publishProgress
    Audit(FTEStateStoreImpl.java:1625)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.impl.TransferSenderRunnable.generateAudi
    tInformation(TransferSenderRunnable.java:1342)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.impl.TransferSenderRunnable.auditComplet
    e(TransferSenderRunnable.java:1499)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.impl.TransferSenderImpl.onComplete(Trans
    ferSenderImpl.java:353)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.statestore.impl.FTEStateStoreImpl.sendForgetToFar
    End(FTEStateStoreImpl.java:1411)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.cmdhandler.impl.FTECommandHandlerStateStoreImpl.p
    rocessInternalCommand(FTECommandHandlerStateStoreImpl.java:765)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.cmdhandler.impl.MessageHandlerImpl.internalMessag
    eHandler(MessageHandlerImpl.java:434)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.cmdhandler.impl.MessageHandlerImpl.processCommand
    (MessageHandlerImpl.java:165)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.cmdhandler.impl.FTECommandHandlerWorkerThread.pro
    cessCommand(FTECommandHandlerWorkerThread.java:282)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.cmdhandler.impl.FTECommandHandlerWorkerThread.run
    (FTECommandHandlerWorkerThread.java:173)
    [26/02/21 00:04:47.199.5Q]  00000016
    java.lang.Thread.run(Thread.java:822)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.thread.FTEThread.run(FTEThread.java:70)
    -----------------------------------------------
    

Local fix

Problem summary

  • ****************************************************************
    USERS AFFECTED:
    This issue affects users of MQ Managed File Transfer, who have
    agents that participate in message-to-file transfers.
    
    
    Platforms affected:
    MultiPlatform
    
    ****************************************************************
    PROBLEM DESCRIPTION:
    If an MQ Managed File Transfer agent is acting as the source
    agent for a message-to-file transfer, it will:
    
    - Browse the messages on the source queue during the managed
    transfer.
    - And only remove the messages from the queue once the managed
    transfer has completed successfully.
    
    In order to do this, the internal TransferCompletedWorker thread
    (the thread within the agent that handles the source disposition
    for managed transfers) will use an internal FTEQueueChannel
    object to make a number of MQGET API calls to remove the
    messages from the queue.
    
    
    Now, if the source agent was stopped:
    
    - After it had sent the message data for a message-to-file
    transfer to the destination agent.
    - And before it had received a reply from the destination agent
    indicating that the message data had been received successfully
    and the destination file had been written.
    
    then when the source agent restarted, it would:
    
    - Pick up the reply from the destination agent.
    - Perform some processing on the managed transfer, to move it
    into a "Completed" state.
    - And then put a message onto an internal Java queue, to inform
    the TransferCompletedWorker thread that the source disposition
    could now be processed for the managed transfer.
    
    When the TransferCompletedWorker thread picked up the message
    and started to process the source disposition, it found that
    there wasn't an existing FTEQueueChannel for the managed
    transfer (as the agent hadn't actually read any messages from
    the source queue for the managed transfer since it had been
    restarted). However, when it tried to recreate the
    FTEQueueChannel and reopen the queue, a NullPointerException
    occurred. The thread caught the NullPointerException internally,
    swallowed it up and then skipped over the logic to delete the
    messages from the source queue.
    
    Here is an extract from an MQ Managed File Transfer trace which
    shows the NullPointerException:
    
    -----------------------------------------------
    [26/02/21 00:04:47.199.5Q]  00000016  @6fc809df
    c.i.w.t.frame.impl.TransferFrameSenderImpl
           ----+----+----+  X  deleteOpenFile
    [26/02/21 00:04:47.199.5Q]  00000016 <null>
    [java.lang.NullPointerException] at:
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.io.queue.FTEQueueChannel.openForRead(FTEQueueChan
    nel.java:336)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.io.queue.FTEQueueFilterChannel.openForRead(FTEQue
    ueFilterChannel.java:135)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.frame.impl.TransferFrameSenderImpl.openA
    ndLockFile(TransferFrameSenderImpl.java:1454)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.frame.impl.TransferFrameSenderImpl.delet
    eOpenFile(TransferFrameSenderImpl.java:1846)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.impl.TransferSenderRunnable.deleteFile(T
    ransferSenderRunnable.java:1562)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.impl.TransferSenderImpl.deleteFile(Trans
    ferSenderImpl.java:382)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.statestore.impl.FTEMutableSenderState.processSour
    ceDisposition(FTEMutableSenderState.java:1155)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.statestore.impl.FTEMutableSenderState.addProgress
    Audit(FTEMutableSenderState.java:854)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.statestore.impl.FTEStateStoreImpl.publishProgress
    Audit(FTEStateStoreImpl.java:1827)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.statestore.impl.FTEStateStoreImpl.publishProgress
    Audit(FTEStateStoreImpl.java:1625)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.impl.TransferSenderRunnable.generateAudi
    tInformation(TransferSenderRunnable.java:1342)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.impl.TransferSenderRunnable.auditComplet
    e(TransferSenderRunnable.java:1499)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.transfer.impl.TransferSenderImpl.onComplete(Trans
    ferSenderImpl.java:353)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.statestore.impl.FTEStateStoreImpl.sendForgetToFar
    End(FTEStateStoreImpl.java:1411)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.cmdhandler.impl.FTECommandHandlerStateStoreImpl.p
    rocessInternalCommand(FTECommandHandlerStateStoreImpl.java:765)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.cmdhandler.impl.MessageHandlerImpl.internalMessag
    eHandler(MessageHandlerImpl.java:434)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.cmdhandler.impl.MessageHandlerImpl.processCommand
    (MessageHandlerImpl.java:165)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.cmdhandler.impl.FTECommandHandlerWorkerThread.pro
    cessCommand(FTECommandHandlerWorkerThread.java:282)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.cmdhandler.impl.FTECommandHandlerWorkerThread.run
    (FTECommandHandlerWorkerThread.java:173)
    [26/02/21 00:04:47.199.5Q]  00000016
    java.lang.Thread.run(Thread.java:822)
    [26/02/21 00:04:47.199.5Q]  00000016
    com.ibm.wmqfte.thread.FTEThread.run(FTEThread.java:70)
    [26/02/21 00:04:47.199.5Q]  00000016 Object ClassLoader = null
    -----------------------------------------------
    

Problem conclusion

  • To resolve this issue, MQ Managed File Transfer agents have been
    updated so that if:
    
    - The internal TransferCompletedWorker thread is processing the
    source disposition for a message-to-file transfer.
    - And it finds that there isn't an existing FTEQueueChannel for
    the managed transfer.
    
    then it will successfully create one, and then use it to open
    the source queue and delete the messages from it.
    
    ---------------------------------------------------------------
    The fix is targeted for delivery in the following PTFs:
    
    Version    Maintenance Level
    v9.1 LTS   9.1.0.9
    v9.2 LTS   9.2.0.3
    v9.x CD    9.2.3
    
    The latest available maintenance can be obtained from
    'WebSphere MQ Recommended Fixes'
    http://www-1.ibm.com/support/docview.wss?rs=171&uid=swg27006037
    
    If the maintenance level is not yet available information on
    its planned availability can be found in 'WebSphere MQ
    Planned Maintenance Release Dates'
    http://www-1.ibm.com/support/docview.wss?rs=171&uid=swg27006309
    ---------------------------------------------------------------
    

Temporary fix

Comments

APAR Information

  • APAR number

    IT35701

  • Reported component name

    MQ BASE V9.2

  • Reported component ID

    5724H7281

  • Reported release

    920

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2021-01-26

  • Closed date

    2021-03-17

  • Last modified date

    2021-04-08

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    MQ BASE V9.2

  • Fixed component ID

    5724H7281

Applicable component levels

[{"Line of Business":{"code":"LOB45","label":"Automation"},"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Product":{"code":"SSYHRD","label":"IBM MQ"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"920"}]

Document Information

Modified date:
09 April 2021