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

Karsten Vileid commented on CAMEL-8718:
---------------------------------------

I am working in a project that has been hit by this problem with leaking 
sockets, and great to see that problem is attacked.
However I have some comments to the chosen solution.

1. In FtpBadLoginConnectionLeakTest.java using maximumReconnectAttempts=3 
(which is camel default), causes leaking sockets, and hence test to fail.

2. In RemoteFileConsumer.java. Some FTP servers (at least one of ours), 
responds OK to getOperations().sendNoop(), even though user has not been 
authorized.
This again causes leaking sockets where;
            isConnected = getOperations().sendNoop();  // isConnected is true

and loggedIn is always false (since credentials are wrong in this case), 
causing new connect, without disconnecting previous connection, for every poll.

        if (!loggedIn || !isConnected) {
            loggedIn = getOperations().connect((RemoteFileConfiguration) 
endpoint.getConfiguration());

3. Problem with leaking connections is also seen for Ftp producers, suggesting 
that solution could be done in common part for consumers and producers.

----------

Possible solutions:
1. In FtpOperations.java could disconnect if login failed
            if (!login) {
                throw new 
GenericFileOperationFailedException(client.getReplyCode(), 
client.getReplyString());
            }

Changed to:
            if (!login) {
                client.disconnect();
                throw new 
GenericFileOperationFailedException(client.getReplyCode(), 
client.getReplyString());
            }


2. Disconnect regardless of what goes wrong, maybe a more robust solution. In 
FtpOperations.java
    public boolean connect(RemoteFileConfiguration configuration) throws 
GenericFileOperationFailedException {

Changed to:
    public boolean connect(RemoteFileConfiguration configuration) throws 
GenericFileOperationFailedException {
        try {
            return connectInternal(configuration);
        } catch (GenericFileOperationFailedException e) {
            if (isConnected()) {
                disconnect();
            }
            throw e;
        }
    }
   
    private boolean connectInternal(RemoteFileConfiguration configuration) 
throws GenericFileOperationFailedException {


> Connection leak with ftp consumer and invalid credentials
> ---------------------------------------------------------
>
>                 Key: CAMEL-8718
>                 URL: https://issues.apache.org/jira/browse/CAMEL-8718
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-ftp
>    Affects Versions: 2.12.5, 2.13.4, 2.14.2, 2.15.1
>            Reporter: Grzegorz Grzybek
>            Assignee: Grzegorz Grzybek
>             Fix For: 2.14.3, 2.16.0, 2.15.3
>
>
> In each iteration new socket connection is created, but never closed. This 
> leads to growth of {{ESTABLISHED}} connections to FTP server.



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

Reply via email to