Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 1.6.2
-
Fix Version/s: 1.6.3
-
Component/s: None
-
Labels:None
Description
Youyu Shao provided some fixes on the mailing list.
Original mail:
On 23/06/16 02:35, Youyu Shao wrote:
> QuickFIX/J Documentation: http://www.quickfixj.org/documentation/
> QuickFIX/J Support: http://www.quickfixj.org/support/
>
>
> Recently we have been seriously looking into using QuickFixJ (code base
> 1.6.2).
> In so doing, we have discovered several problems and subsequently resolved
> in house.
>
> 1. Mina would throw org.apache.mina.core.RuntimeIoException wrapping
> java.net.SocketException at various places.
> For example, this happens at:
> org.apache.mina.core.RuntimeIoException: java.net.SocketException:
> Invalid argument: no further information
> at
> org.apache.mina.transport.socket.nio.NioSocketSession$SessionConfigImpl.setTcpNoDelay(NioSocketSession.java:208)
> at quickfix.mina.NetworkingOptions.apply(NetworkingOptions.java:155)
> at
> quickfix.mina.AbstractIoHandler.sessionCreated(AbstractIoHandler.java:93)
> at
> quickfix.mina.initiator.InitiatorIoHandler.sessionCreated(InitiatorIoHandler.java:50)
> .....
> When this happens, exceptionCaught method of AbstractIoHandler is not
> able to properly detect there was an underlying socket IOException.
> AbstractIoHandler has been modified to un-wrap the exception and see if
> along the exception chain there is an IOException.
>
> 2. org.apache.mina.core.session.IoSession internal state is problematic. On
> and off,
> IoSession.isConnected() does not return the correct value after QuickFixJ
> called IoSession.close() method(up on experiencing IOException).
> quickfix.mina.initiator.IoSessionInitiator has been refactored to replace
> the old IoConnector with a new one upon experiencing IOException.
> quickfix.mina.AbstractIoHandler is adjusted accordingly to signal the
> IoSessionInitiator to do so.
>
> 3. Modified the run() method of ConnectTask in IoSessionInitiator to be
> protected by try block. This is to prevent the scheduled Task from
> stop running in presence of exception. (see javadoc on
> scheduleWithFixedDelay(...) method of
> java.util.concurrent.ScheduledExecutorService
> which states that "...If any execution of the task encounters an
> exception, subsequent executions are suppressed...")
>
> 4. Again, org.apache.mina.core.session.IoSession internal state is
> problematic. Even after the
> normal disconnect() from IoSessionResponder, on and off the
> IoSession.isConnected() still does not return the correct value.
> quickfix.mina.IoSessionResponder is adjusted to signal the
> IoSessionInitiator to replace the IoConnector. IoSessionResponderTest is
> adjusted accordingly.
>
>
> 5. quickfix.ThreadedSocketAcceptor leaks resources when stoped.
> Instead of calling stopSessionTimer() in the stop() method, it should
> call stopInitiators().
>
> Problems identified in 1, 2, 3, and 4 ultimately manifested them in ways
> that reconnecting would stop working (forever), even absent of IOExceptions.
>
> With the fix, we have the QuickFixJ engine running for a week where
> reconnecting works with no problem. During this period the counterparty
> logged out and severed the TCP connection more than 20000 times. Our test
> also indicates that the fix works equally SSL vs non-SSL.
>
> Modified files are attached.
>
> AbstractIoHandler.java
> <http://quickfix-j.364392.n2.nabble.com/file/n7579557/AbstractIoHandler.java>
> IoSessionInitiator.java
> <http://quickfix-j.364392.n2.nabble.com/file/n7579557/IoSessionInitiator.java>
> IoSessionResponder.java
> <http://quickfix-j.364392.n2.nabble.com/file/n7579557/IoSessionResponder.java>
> IoSessionResponderTest.java
> <http://quickfix-j.364392.n2.nabble.com/file/n7579557/IoSessionResponderTest.java>
> ThreadedSocketInitiator.java
> <http://quickfix-j.364392.n2.nabble.com/file/n7579557/ThreadedSocketInitiator.java>
>