commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gilles Gaillard (JIRA)" <j...@apache.org>
Subject [jira] Commented: (NET-249) FtpClient hangs 20 minutes in FTPClient.completePendingCommand from retrieveFile or listFiles
Date Fri, 03 Apr 2009 17:58:12 GMT

    [ https://issues.apache.org/jira/browse/NET-249?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12695518#action_12695518
] 

Gilles Gaillard commented on NET-249:
-------------------------------------

- If you use 2.0, you should, set timeouts for connections and transfers.
- if you are polling the FTP server, you should also keep open the FTP sessions and reuse
them (and not close them asap, only close them after some timeout period if they are not reused).



> FtpClient hangs 20 minutes in FTPClient.completePendingCommand from retrieveFile or listFiles
> ---------------------------------------------------------------------------------------------
>
>                 Key: NET-249
>                 URL: https://issues.apache.org/jira/browse/NET-249
>             Project: Commons Net
>          Issue Type: Bug
>    Affects Versions: 1.4, 2.0
>         Environment: Client and Server running on Solaris 9
>            Reporter: David Tavoularis
>
> I have a Ftp Client with several connections in multi-thread that connects to a remote
Ftp Server to list files and download new ones.
> After 3 minutes of runtime, I get a 20-minute timeout for all running Ftp connections.
> Here are the logs for 1 thread :
> 20090114 142216 (Command Sent Message): PASV
> 20090114 142216 (Reply Received Message): 227 Entering Passive Mode (10,250,10,116,224,172)
> 20090114 142216 (Command Sent Message): LIST /Dir1/Dir2/Dir3
> 20090114 142216 (Reply Received Message): 150 Opening BINARY mode data connection for
/bin/ls.
> 20090114 142216 (Reply Received Message): 226 Transfer complete.
> 20090114 142216 (Command Sent Message): PASV
> 20090114 142216 (Reply Received Message): 227 Entering Passive Mode (10,250,10,116,138,240)
> 20090114 142216 (Command Sent Message): RETR /Dir1/Dir2/Dir3/File1
> 20090114 142216 (Reply Received Message): 150 Opening BINARY mode data connection for
/Dir1/Dir2/Dir3/File1 (12364 bytes).
> *** 20 minutes without any message ***
> 20090114 144216 (Reply Received Message): 426 Data connection: Interrupted system call.
> 20090114 144216 (Command Sent Message): PASV
> 20090114 144216 (Reply Received Message): 227 Entering Passive Mode (10,250,10,116,109,169)
> 20090114 144216 (Command Sent Message): RETR /Dir1/Dir2/Dir3/File1
> 20090114 144216 (Reply Received Message): 150 Opening BINARY mode data connection for
/Dir1/Dir2/Dir3/File2 (12387 bytes).
> 20090114 144216 (Reply Received Message): 226 Transfer complete.
> Here are the logs for another thread :
> 20090114 142216 (Command Sent Message): PASV
> 20090114 142216 (Reply Received Message): 227 Entering Passive Mode (10,250,10,116,174,233)
> 20090114 142216 (Command Sent Message): RETR /DirA/DirB/DirC/FileA
> 20090114 142216 (Reply Received Message): 150 Opening BINARY mode data connection for
/DirA/DirB/DirC/FileA (14209 bytes).
> 20090114 142216 (Reply Received Message): 226 Transfer complete.
> 20090114 142216 (Command Sent Message): PASV
> 20090114 142216 (Reply Received Message): 227 Entering Passive Mode (10,250,10,116,202,81)
> 20090114 142216 (Command Sent Message): LIST /DirA/DirB/DirD
> 20090114 142216 (Reply Received Message): 150 Opening BINARY mode data connection for
/bin/ls.
> *** 20 minutes without any message ***
> 20090114 144216 (Reply Received Message): 426 Data connection: Interrupted system call.
> 20090114 144216 (Command Sent Message): PASV
> 20090114 144216 (Reply Received Message): 227 Entering Passive Mode (10,250,10,116,11,16)
> 20090114 144216 (Command Sent Message): RETR /DirA/DirB/DirD/FileB
> 20090114 144216 (Reply Received Message): 150 Opening BINARY mode data connection for
/DirA/DirB/DirD/FileB (14145 bytes).
> So it happens during LIST or during RETR command.
> The issue is always reproducible when connecting to this Ftp server.
> What is the meaning of the error message "426 Data connection: Interrupted system call."
?
> Here are the stack-traces where the FtpClient is blocked during 20 minutes.
> For 1st connection :
> Stack 30 - Wed Jan 14 14:40:00 CET 2009
> "FTPMediationTask" prio=3 tid=0x00aac800 nid=0x156 runnable [0x6877e000..0x6877fb70]
>    java.lang.Thread.State: RUNNABLE
> 	at java.net.SocketInputStream.socketRead0(Native Method)
> 	at java.net.SocketInputStream.read(SocketInputStream.java:129)
> 	at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
> 	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
> 	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
> 	- locked <0x8fc23880> (a java.io.InputStreamReader)
> 	at java.io.InputStreamReader.read(InputStreamReader.java:167)
> 	at java.io.BufferedReader.fill(BufferedReader.java:136)
> 	at java.io.BufferedReader.readLine(BufferedReader.java:299)
> 	- locked <0x8fc23880> (a java.io.InputStreamReader)
> 	at java.io.BufferedReader.readLine(BufferedReader.java:362)
> 	at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:294)
> 	at org.apache.commons.net.ftp.FTP.getReply(FTP.java:619)
> 	at org.apache.commons.net.ftp.FTPClient.completePendingCommand(FTPClient.java:1244)
> 	at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2309)
> 	at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2269)
> 	at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2046)
> [...]
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
> 	at java.lang.Thread.run(Thread.java:619)
> And for the second connection :
> Stack 27 - Wed Jan 14 14:37:00 CET 2009
> "FTPMediationTask" prio=3 tid=0x0140b800 nid=0xe7 runnable [0x6967e000..0x6967f8f0]
>    java.lang.Thread.State: RUNNABLE
> 	at java.net.SocketInputStream.socketRead0(Native Method)
> 	at java.net.SocketInputStream.read(SocketInputStream.java:129)
> 	at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
> 	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
> 	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
> 	- locked <0x7ea6cd20> (a java.io.InputStreamReader)
> 	at java.io.InputStreamReader.read(InputStreamReader.java:167)
> 	at java.io.BufferedReader.fill(BufferedReader.java:136)
> 	at java.io.BufferedReader.readLine(BufferedReader.java:299)
> 	- locked <0x7ea6cd20> (a java.io.InputStreamReader)
> 	at java.io.BufferedReader.readLine(BufferedReader.java:362)
> 	at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:294)
> 	at org.apache.commons.net.ftp.FTP.getReply(FTP.java:619)
> 	at org.apache.commons.net.ftp.FTPClient.completePendingCommand(FTPClient.java:1244)
> 	at org.apache.commons.net.ftp.FTPClient.retrieveFile(FTPClient.java:1301)
> [...]
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
> 	at java.lang.Thread.run(Thread.java:619)
> The issue originally happened on commons-net 1.4, but I have upgraded to 2.0, and the
issue is still there.
> Here is the normal configuration :
> Client1 connects to FtpServer to download files -> No issue
> Client2 connects to FtpServer to download files -> 20-min timeout issue
> (Client1 and Client2 are 2 different servers)
> But when I try : Client2 connects to Client1 (instead of FtpServer) to download files
-> No issue
> Please help me find out a workaround or tell me if this is a bug in commons-net, or on
remote FtpServer (but this would be strange, because Client1 has no issue)
> Thanks in advance

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message