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

thompson franklin commented on NET-548:
---------------------------------------

FTPClient Thread hangs for 1 day

Code Hangs at ::        boolean fileUploadStatus = 
ftpclient.storeFile(remoteDestinationFileName,fis);

Exception

Trace at : Mon, 28 Sep 15, 21:55:52 PDT
java.net.PlainSocketImpl.socketAccept(Native Method)
java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)
java.net.ServerSocket.implAccept(ServerSocket.java:530)
java.net.ServerSocket.accept(ServerSocket.java:498)
org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:560)
org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:425)
org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1548)
com.manageengine.eum.ftp.datacollection.FTPDataCollector.doFTPDataCollection(FTPDataCollector.java:1017)

---------------------------

Sample Code

public void doFTPDataCollection()
        {
                EUMLog.log(module, monitorid+" : FTP DataCollection : 
HostName="+hostName+", Port="+portNumber+", TimeOut="+timeOut+", 
LocalDest="+localDestinationFileName+", 
RemoteSourceFile="+remoteSourceFileName+", 
RemoteDest="+remoteDestinationFileName+", 
LocalSourceFile="+localSourceFileName+", uploadFileName="+uploadFileName+", 
Upload="+uploadEnabled+", Download="+downloadEnabled);
                long tempStartTime=0L;
                long tempEndTime=0L;
                FileOutputStream fos = null;
                FileInputStream fis = null;
                
resolvedIp=java.net.InetAddress.getByName(hostName).getHostAddress();
                
                FTPClient ftpclient = null;
                try
                {
                        ftpclient = new FTPClient();
                        ftpclient.setDefaultTimeout(timeOut*1000);
                        ftpclient.setConnectTimeout(timeOut*1000);//FTP Set 
Timeout
                        tempStartTime = System.currentTimeMillis();
                        try
                        {
                                ftpclient.connect(hostName,portNumber);//FTP 
Connection
                                ftpclient.setSoTimeout(soTimeOut);//set socket 
timeout
                                isFTPConnected = true;
                                tempEndTime = System.currentTimeMillis();
                                connectionTime = tempEndTime - tempStartTime;
                        }
                        catch(Exception ex)
                        {
                                exceptionErrorMsg = Util.trim(ex.getMessage());
                                errorcode = Constants.DC_CONNECT_ERR;
                        }
                        if(isFTPConnected)
                        {
                                EUMLog.log(module, monitorid+" : FTP Connected 
Sucessfully : Duration="+connectionTime);
                                tempStartTime=0L;
                                tempEndTime=0L;
                                /*
                                 * FTP Login
                                 */
                                tempStartTime = System.currentTimeMillis();
                                try
                                {
                                        isLoggedIn = 
ftpclient.login(userName,password);
                                }
                                catch(Exception ex)
                                {
                                        exceptionErrorMsg = 
Util.trim(ex.getMessage());
                                        errorcode = 
Constants.FTP_AUTHENTICATION_FAILED;
                                        EUMLog.log(module, monitorid+" : FTP 
Login : Exception : "+exceptionErrorMsg);
                                        if(printlogs)
                                        {
                                                EUMLog.log(module, 
Util.getStackTrace(ex));
                                        }
                                }
                                tempEndTime = System.currentTimeMillis();
                                if(isLoggedIn)
                                {
                                        loginTime = tempEndTime - tempStartTime;
                                        EUMLog.log(module, monitorid+" : FTP 
Logged in Sucessfully : Duration="+loginTime);
                                        
if(ftpConnectionMode==Constants.FTP_CONNECTION_MODE_PASSIVE)
                                        {
                                                
ftpclient.enterLocalPassiveMode();
                                        }
                                        
ftpclient.setFileType(FTP.BINARY_FILE_TYPE);
                                        
ftpclient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
                                        tempStartTime=0L;
                                        tempEndTime=0L;
                                        /*
                                         * FTP Upload File from Local to Remote 
Server
                                         */
                                        if(uploadEnabled && 
localSourceFileName.length()>0 && remoteDestinationFileName.length()>0)
                                        {
                                                EUMLog.log(module, monitorid+" 
: FTP Upload : Starting...");
                                                File localFile = new 
File(localSourceFileName);
                                                /*
                                                 * Check if the file is present 
in the local server
                                                 */
                                                if(localFile.exists())
                                                {
                                                        uploadSize = 
localFile.length();
                                                        uploadSizeInKB = 
Util.getSizeInKB(uploadSize);
                                                        uploadSizeInMB = 
Util.getSizeInMB(uploadSize);
                                                        
if(isWithinTransferLimit(uploadSize))
                                                        {
                                                                String sFile[] 
= ftpclient.listNames(remoteDestinationFolder);
                                                                /*
                                                                 * Check if the 
destination directory is available in the remote server
                                                                 */
                                                                if(sFile!=null)
                                                                {
                                                                        /*
                                                                         * 
Upload File from local serevr to remote server
                                                                         */
                                                                        
tempStartTime = System.currentTimeMillis();
                                                                        fis = 
new FileInputStream(new File(localSourceFileName));
                                                                        boolean 
fileUploadStatus = ftpclient.storeFile(remoteDestinationFileName,fis);
                                                                        
tempEndTime = System.currentTimeMillis();
                                                                        
EUMLog.log(module, monitorid+" : FTP FileUploadStatus="+fileUploadStatus+", 
Start="+tempStartTime+", End="+tempEndTime+", 
Duration="+(tempEndTime-tempStartTime));
                                                                        
if(fileUploadStatus)
                                                                        {
                                                                                
uploadTime = tempEndTime - tempStartTime;
                                                                                
if(uploadTime>0)
                                                                                
{
                                                                                
        uploadTimeInKBperSec = uploadSizeInKB / ((double)uploadTime/1000.0);
                                                                                
}
                                                                        }
                                                                        else


> FTPClient Hangs on connect method and never timeout
> ---------------------------------------------------
>
>                 Key: NET-548
>                 URL: https://issues.apache.org/jira/browse/NET-548
>             Project: Commons Net
>          Issue Type: Bug
>          Components: FTP
>    Affects Versions: 2.0
>            Reporter: Raj
>
> Periodically, we are experiencing the FTP client thread is hang when we
> initiate a connection to the FTP server. See the following thread dump from 
> WAS server. It seem like
> after the common net FTP.sendCommand, it will call the
> "FTP.__getReply()" to get the status code, and this should be the point that 
> causing the thread hang.
> There is no Socket connection timeout error be thrown, and the thread 
> justhang there forever.
> here is the Thread Dump.. Please provide your guidance as to what is wrong 
> here and how can we fix it.
> at java/net/SocketInputStream.socketRead0(Native Method)
>  at java/net/SocketInputStream.read(SocketInputStream.java:155(Compiled Code))
>  at java/net/SocketInputStream.read(SocketInputStream.java:116(Compiled Code))
>  at 
> sun/nio/cs/StreamDecoder$ConverterSD.implRead(StreamDecoder.java:346(Compiled 
> Code))
>  at sun/nio/cs/StreamDecoder.read(StreamDecoder.java:252(Compiled Code))
>  at java/io/InputStreamReader.read(InputStreamReader.java:212(Compiled Code))
>  at java/io/BufferedReader.fill(BufferedReader.java:126(Compiled Code))
>  at java/io/BufferedReader.readLine(BufferedReader.java:320(Compiled Code))
>  at java/io/BufferedReader.readLine(BufferedReader.java:383(Compiled Code))
>  at org/apache/commons/net/ftp/FTP.__getReply(FTP.java:291(Compiled Code))
>  at org/apache/commons/net/ftp/FTP.sendCommand(FTP.java:490(Compiled Code))
>  at org/apache/commons/net/ftp/FTP.sendCommand(FTP.java:534(Compiled Code))
>  at org/apache/commons/net/ftp/FTP.pass(FTP.java:701(Compiled Code))
>  at org/apache/commons/net/ftp/FTPClient.login(FTPClient.java:630(Compiled 
> Code))
> In the Code..
> we are setting connection timeout & data timeout before FTPClient.connect 
> method being called.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to