[
https://issues.apache.org/jira/browse/FTPSERVER-359?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12849659#action_12849659
]
Fred Moore commented on FTPSERVER-359:
--------------------------------------
I looks like the repro tends to be more effective when you run the repro client
-- which only issues LISTs -- against a directory preloaded with a several
hundreds files
> Race condition during requestPassivePort() hanging FTP(S) server with one
> passive data connection port
> ------------------------------------------------------------------------------------------------------
>
> Key: FTPSERVER-359
> URL: https://issues.apache.org/jira/browse/FTPSERVER-359
> Project: FtpServer
> Issue Type: Bug
> Components: Server
> Affects Versions: 1.0.4
> Environment: windows
> Reporter: Fred Moore
> Attachments: FTPSERVER-359-ReproSrcAndCfg.zip
>
>
> We have various situations where FTP(S) server is used with a limited range
> of Passive Ports available for connection (in some cases the range restricts
> to just ONE port).
> This configuration has been tested and it works with the normal drawback that
> users requesting simultaneous file transfers are queued but they can be still
> connected at the same time.
> However it clearly appears that there are some race conditions when multiple
> clients attempt to open simultaneously passive connections. In such case,
> instead of queueing up and slowly serve them up, the server is "forgetting"
> to notify properly the fact that Passive Ports are progressively freed
> effectively hanging up for ever the server which is not allowed to serve
> further connections unless killed and restarted.
> A repro of this unlucky situation can be easily obtained launching the
> attached EmptyServer.java with an aggressive 20-thread client
> (TestShortTimeOut.java).
> Each concurrent thread is simply connecting, logging-in as anonymous and
> listing a directory with 3 files (NO actual file transfer is done, just
> lookups), and then quitting and disconnecting.
> This test produces on my Windows XP machine almost instantly the following
> exception:
> connected thread 5
> Listed files #3 for thread 0
> Disconnected thread 0
> java.net.SocketTimeoutException: Read timed out
> Exception on thread 4 Read timed out
> at java.net.SocketInputStream.socketRead0(Native Method)
> at java.net.SocketInputStream.read(Unknown Source)
> at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
> at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
> at sun.nio.cs.StreamDecoder.read(Unknown Source)
> at java.io.InputStreamReader.read(Unknown Source)
> And the server is left in an inconsistent state not accepting further
> connections.
> They have been tested with current distributed FTPServer 1.0.4 version and
> commons net. Launching EmptyServer provides a server with a singleton port
> range (port 1024).
> Launching the TestShortTimeOut.java produces very quickly a situation where
> the server is hung with all the threads waiting to get a requestPassivePort()
> even if no client is still attached since all threads are quitting for
> timeout (in the client I put the timeout to 2 seconds to have quickly this
> situation, but nothing essentially changes when timeout is not set and so is
> the default.
> If it can be of any help, attached you can find the log4j debug
> trace.(test.log). Which might give some light to FTPServer gurus.
> NOTE.
> I originally found this problem with the FTPS implementation, but was able to
> reproduce the same problem even with simpler standard FTP (you can see that
> Empty Server is actually acting as a FTPS server and the client has still
> commented the FTPS client commands).
> I tried to use the minimal level of concurrency that is producing the
> RACE condition on my machine. If I use less than 15-16 threads the
> server appears behaving correctly, but with 20 threads it surely breaks down.
> PS.
> I have analyzed all problems present in FTPServer JIRA related to connected
> problems and passive ports and I've found the following:
> 1\ FTPServer-293 hang while transferring file (not our case since we are
> just listing and the patch is already on the distributed version),
> 2\ FTPServer-303 and FTPServer-177 seems related but already distributed
> 3\ FTPServer-240 which is still NOT been distributed and might solve (!) my
> problems since allows for serving multiple clients with a limited range
> of passive ports... even if it probably does not really fix the actual root
> cause (suspect race condition)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.