[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jakarta-commons-dev
Subject:    [jira] [Commented] (NET-548) FTPClient Hangs on connect method and never timeout
From:       "thompson franklin (JIRA)" <jira () apache ! org>
Date:       2015-09-29 5:23:04
Message-ID: JIRA.12727329.1405427082000.99295.1443504184433 () Atlassian ! JIRA
[Download RAW message or body]


    [ 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)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic