We have been having an issue in our applications using RFA (versions used 7.6.0.E9/8.0.1E1 ). This issue was around the time we had a scheduled hardware upgrade on the infrastructure side. Before the upgrade, we used adsmon to disable ports on the those ADS and dropped the mounts/client connections. As mentioned in the RFA documentation and by the TR team, RFA should move over to the next ADS in the serverList. A number of applications experienced locked threads (refer the trace below) and had to be bounced.
Based on the trace, I had the following queries -
- Is the thread waiting to get the ServiceDirectory list?
- What does RFA do if the ADS does allow a Login, but not send over the service Directory information? Will it result in the issue ?
- Is there a way to move to the Next ADS in the serverList of we do not receive specific events in a certain amount of time.
- Any input on preventing this lock from happening?
Our config is in the following format -
RFASessionName = Marketdata::ADS
Connections.delayedADS1.connectionType = RSSL
Connections.delayedADS1.serverList = Delayed1_NOPT1, Delayed1_NOPT2, Delayed1_NOPT3, Delayed1_NOPT4
Connections.delayedADS1.portNumber = 1004
Connections.delayedADS1.throttleType = timer
Connections.delayedADS1.throttleTimerInterval = 1
Connections.delayedADS1.throttleRequestsPerInterval = 10000
Connections.delayedADS1.logFileName = console
Connections.delayedADS2.connectionType = RSSL
Connections.delayedADS2.serverList = Delayed2_OPT1, Delayed2_OPT2, Delayed2_OPT3, Delayed2_OPT4
Connections.delayedADS2.portNumber = 1004
Connections.delayedADS2.throttleType = timer
Connections.delayedADS2.throttleTimerInterval = 1
Connections.delayedADS2.throttleRequestsPerInterval = 10000
Connections.delayedADS2.logFileName = console
Connections.realtimeADS1.connectionType = RSSL
Connections.realtimeADS1.serverList = Realtime1_NOPT1, Realtime1_NOPT2, Realtime1_NOPT3, Realtime1_NOPT4
Connections.realtimeADS1.portNumber = 1002
Connections.realtimeADS1.throttleType = timer
Connections.realtimeADS1.throttleTimerInterval = 1
Connections.realtimeADS1.throttleRequestsPerInterval = 10000
Connections.realtimeADS1.logFileName = console
Connections.realtimeADS2.connectionType = RSSL
Connections.realtimeADS2.serverList = Realtime2_OPT1, Realtime2_OPT2, Realtime2_OPT3, Realtime2_OPT4
Connections.realtimeADS2.portNumber = 1002
Connections.realtimeADS2.throttleType = timer
Connections.realtimeADS2.throttleTimerInterval = 1
Connections.realtimeADS2.throttleRequestsPerInterval = 10000
Connections.realtimeADS2.logFileName = console
Marketdata.Sessions.ADS.connectionList = delayedADS1, delayedADS2, realtimeADS1, realtimeADS1
Thread stack -
- locked <0x000000039c73f828> (a com.reuters.rfa.internal.session.omm.OMMItemEventMsg)
at com.reuters.rfa.internal.connection.ConnectionImpl.dispatch(ConnectionImpl.java:538)
at com.reuters.rfa.internal.connection.rssl.RSSLDirectoryHandler.createRefreshForRequestFromCache(RSSLDirectoryHandler.java:1025)
at com.reuters.rfa.internal.connection.rssl.RSSLDirectoryHandler.processMsg(RSSLDirectoryHandler.java:94)
at com.reuters.rfa.internal.connection.rssl.RSSLConnection.processTransportData(RSSLConnection.java:709)
at com.reuters.rfa.internal.rssl.RsslClientConnectionManager.processTransportData(RsslClientConnectionManager.java:672)
at com.reuters.rfa.internal.rssl.RsslClientConnection.processTransportData(RsslClientConnection.java:319)
at com.reuters.ipc.ConnectionImpl.dispatchTransportData(ConnectionImpl.java:688)
at com.reuters.ipc.ConnectionImpl.dispatchData(ConnectionImpl.java:681)
at com.reuters.ipc.ConnectionImpl.readAndDispatchData(ConnectionImpl.java:304)
at com.reuters.ipc.ConnectionImpl.readDispatch(ConnectionImpl.java:140)
at com.reuters.ipc.SubConnection.readDispatch(SubConnection.java:412)
at com.reuters.mainloop.channel.ChannelSession.readDispatch(ChannelSession.java:382)
at com.reuters.mainloop.channel.ChannelSession.readSelected(ChannelSession.java:294)
at com.reuters.mainloop.channel.ChannelMainLoop.processSelection(ChannelMainLoop.java:81)
at com.reuters.mainloop.channel.ChannelMainLoop.selectFor(ChannelMainLoop.java:342)
at com.reuters.mainloop.channel.ChannelMainLoop.run(ChannelMainLoop.java:199)
at com.reuters.rfa.internal.common.EventQueueMLThread.runImpl(EventQueueMLThread.java:46)
at com.reuters.rfa.internal.common.InterruptibleThread.run(InterruptibleThread.java:80)
at java.lang.Thread.run(Thread.java:682)
"Timer-0" daemon prio=10 tid=0x00002ba0856a2340 nid=0x7870 in Object.wait() [0x00002ba0a4a43000]