APAR status
Closed as program error.
Error description
An IBM MQ 9.3 Managed File Transfer (MFT) agent has been configured with the agent property: monitorMaxResourcesInPoll set to the value of 10. A resource monitor defined on the agent has been configured to poll a directory every 30 seconds and trigger on: - Files that end in *.xml - And have a size that remains unchanged for 1 poll. When the agent is running MQ MFT 9.3.0.6, the monitor runs as expected and triggers on any XML files that it finds have remained unchanged for 1 poll. However, after the agent is upgraded to use MQ MFT 9.3.0.10, the monitor sometimes fails to trigger and generates an FFDC file containing a java.lang.NullPointerException. An example of the FFDC is shown below: --------------------------------------------------------- .......... Level: p930-010-230816 Time: 07/09/2023 14:42:32:756 EDT Thread: 43 (pool-4-thread-1) Class: com.ibm.wmqfte.monitor.management.MonitorWork Method: generateFFDC Probe: FFDC_005 Cause: java.lang.NullPointerException java.lang.NullPointerException at com.ibm.wmqfte.monitor.resource.MonitorResourceItems.<init>(Moni torResourceItems.java:101) at com.ibm.wmqfte.monitor.matcher.MonitorMatcher.executeWorker(Moni torMatcher.java:484) at com.ibm.wmqfte.monitor.management.MonitorWork.buildListOfResourc esUsingWorkerThread(MonitorWork.java:753) at com.ibm.wmqfte.monitor.management.MonitorWork.buildListOfResourc es(MonitorWork.java:636) at com.ibm.wmqfte.monitor.management.MonitorWork.execute(MonitorWor k.java:387) at com.ibm.wmqfte.monitor.management.MonitorImpl.run(MonitorImpl.ja va:171) at com.ibm.wmqfte.monitor.management.MonitorTimerTask.run(MonitorTi merTask.java:78) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.ja va:522) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:319) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFuture Task.access$301(ScheduledThreadPoolExecutor.java:191) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFuture Task.run(ScheduledThreadPoolExecutor.java:305) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExec utor.java:1160) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExe cutor.java:635) at java.lang.Thread.run(Thread.java:825) .......... ---------------------------------------------------------
Local fix
Problem summary
**************************************************************** USERS AFFECTED: This issue affects two categories of user: Category 1: -------------- Users of MQ 9.3.0.10 and 9.3.3 CD Managed File Transfer (MFT) who have an agent configured with the agent property: monitorMaxResourcesInPoll set in the agent.properties file. Category 2: -------------- Users of MQ 9.3.0.10 and 9.3.3 CD MFT who have queue resource monitors defined on an agent, where the monitor is configured to trigger on complete message groups, or individual messages not in a group. Platforms affected: MultiPlatform **************************************************************** PROBLEM DESCRIPTION: When an IBM MQ Managed File Transfer resource monitor performs a poll, it will collect a list of items that match its trigger condition using one of two methods: Method 1: -------------- When an agent has the: moniorMaxResourcesInPoll property set, any directory resource monitors that are defined on it will use an internal Worker Thread to collect the list of items that match its trigger condition. Queue resource monitors that have been configured to trigger on complete message groups, or individual messages not in a group, will also use a Worker Thread. Method 2: -------------- If an agent does not have the property: moniorMaxResourcesInPoll set, then any directory resource monitors running within it will collect the list of items that match the trigger condition on the monitor's main thread. The same mechanism is used by queue resource monitors that are configured to trigger on a non-empty queue. Now, as part of the work on APAR IT43806 (https://www.ibm.com/support/pages/apar/IT43806), some additional trace statements were added to allow IBM Support to diagnose how a resource monitor was managing its history. Unfortunately, this inadvertently changed some of the logic in the Worker Thread (mentioned in Method 1 above) so that it could use an uninitialized variable when working out what to remove from a monitor's history. When this happened, the monitor would stop triggering and generate an FFDC containing the following information: --------------------------------------------------------- .......... Class: com.ibm.wmqfte.monitor.management.MonitorWork Method: generateFFDC Probe: FFDC_005 Cause: java.lang.NullPointerException java.lang.NullPointerException at com.ibm.wmqfte.monitor.resource.MonitorResourceItems.<init>(Moni torResourceItems.java:101) at com.ibm.wmqfte.monitor.matcher.MonitorMatcher.executeWorker(Moni torMatcher.java:484) at com.ibm.wmqfte.monitor.management.MonitorWork.buildListOfResourc esUsingWorkerThread(MonitorWork.java:753) at com.ibm.wmqfte.monitor.management.MonitorWork.buildListOfResourc es(MonitorWork.java:636) at com.ibm.wmqfte.monitor.management.MonitorWork.execute(MonitorWor k.java:387) at com.ibm.wmqfte.monitor.management.MonitorImpl.run(MonitorImpl.ja va:171) at com.ibm.wmqfte.monitor.management.MonitorTimerTask.run(MonitorTi merTask.java:78) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.ja va:522) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:319) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFuture Task.access$301(ScheduledThreadPoolExecutor.java:191) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFuture Task.run(ScheduledThreadPoolExecutor.java:305) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExec utor.java:1160) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExe cutor.java:635) at java.lang.Thread.run(Thread.java:825) .......... ---------------------------------------------------------
Problem conclusion
To resolve this issue, MQ Managed File Transfer (MFT) has been updated so that resource monitor Worker Threads use the correct internal variable when removing items from a monitor's history. This ensures that the history is updated correctly, and prevents the NullPointerException reported in this APAR from occurring. --------------------------------------------------------------- The fix is targeted for delivery in the following PTFs: Version Maintenance Level v9.3 LTS 9.3.0.15 v9.x CD 9.3.5 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
IT44567
Reported component name
MQ BASE V9.3
Reported component ID
5724H7291
Reported release
930
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt / Xsystem
Submitted date
2023-09-19
Closed date
2023-10-20
Last modified date
2023-10-20
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.3
Fixed component ID
5724H7291
Applicable component levels
[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSYHRD","label":"IBM MQ"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"9.3","Line of Business":{"code":"LOB45","label":"Automation"}}]
Document Information
Modified date:
21 October 2023