You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Fred Moore (JIRA)" <ji...@apache.org> on 2010/03/24 17:57:27 UTC

[jira] Updated: (FTPSERVER-359) Race condition during requestPassivePort() hanging FTP(S) server with one passive data connection port

     [ https://issues.apache.org/jira/browse/FTPSERVER-359?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Fred Moore updated FTPSERVER-359:
---------------------------------

    Attachment: FTPSERVER-359-ReproSrcAndCfg.zip

repro source & config

> 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.