directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Emmanuel Lecharny (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DIRAPI-342) Unbind breaks connection
Date Sun, 02 Jun 2019 15:11:01 GMT

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

Emmanuel Lecharny commented on DIRAPI-342:
------------------------------------------

There is some more work to do. Typically, when doing a {{bind}}, it may fail, and in this
case, we should be sure we close the connection in a proper way.

FTR, I'm using a {{CountdownLatch}} with a value of {{1}} when disconnecting, and I decrement
this counter when the disconnection is completed or aborted. This can be done in the {{sessionClosed()},
or it should be done 'manually' whenever we get an exception (typically, when trying to establish
a TLS connection, we might have a timeout and never call {{sessionClosed()}}.

All in all, it's messy and has to be carefully checked, with all the 'i' dotted and 't' crossed...

> Unbind breaks connection
> ------------------------
>
>                 Key: DIRAPI-342
>                 URL: https://issues.apache.org/jira/browse/DIRAPI-342
>             Project: Directory Client API
>          Issue Type: Bug
>    Affects Versions: 2.0.0.AM2
>            Reporter: Stefan Seelmann
>            Priority: Major
>             Fix For: 2.0.0.AM4, 2.0.0
>
>         Attachments: latch.patch
>
>
> The DelegatedAuthIT/DelegatedAuthOverSslIT/DelegatedAuthOverTlsIT tests fail randomly
(I try to stabilize tests on Windows, but also happens on Jenkins). They all do multiple bind()
and unbind() on the same connection, it seems the unbind() is the reason.
> A simple test to reproduce the problem (on Linux):
> {code}
>     @Test
>     public void testSimpleBindAndUnbindLoop() throws Exception
>     {
>         try ( LdapConnection connection = new LdapNetworkConnection( Network.LOOPBACK_HOSTNAME,
>             getLdapServer().getPort() ) )
>         {
>             for ( int i = 0; i < 10000; i++ )
>             {
>                 System.out.println( i );
>                 connection.bind( "uid=admin,ou=system", "secret" );
>                 assertTrue( connection.isAuthenticated() );
>                 connection.unBind();
>                 assertFalse( connection.isAuthenticated() );
>                 // Thread.sleep( 10L );
>             }
>         }
>     }
> {code}
> Without the unbind() or when sleeping for 10ms it works fine.
> Otherwise I saw 3 different errors:
> {code}
> org.apache.directory.ldap.client.api.exception.InvalidConnectionException: ERR_04108_INVALID_CONNECTION
Cannot connect on the server, the connection is invalid
> 	at org.apache.directory.ldap.client.api.LdapNetworkConnection.checkSession(LdapNetworkConnection.java:574)
> 	at org.apache.directory.ldap.client.api.LdapNetworkConnection.bindAsync(LdapNetworkConnection.java:1596)
> 	at org.apache.directory.ldap.client.api.LdapNetworkConnection.bind(LdapNetworkConnection.java:1488)
> 	at org.apache.directory.ldap.client.api.AbstractLdapConnection.bind(AbstractLdapConnection.java:134)
> 	at org.apache.directory.ldap.client.api.AbstractLdapConnection.bind(AbstractLdapConnection.java:118)
> {code}
> {code}
> org.apache.directory.api.ldap.model.exception.LdapException: ERR_04169_RESPONSE_QUEUE_EMPTIED
The response queue has been emptied, no response was found.
> 	at org.apache.directory.ldap.client.api.LdapNetworkConnection.bind(LdapNetworkConnection.java:1534)
> 	at org.apache.directory.ldap.client.api.AbstractLdapConnection.bind(AbstractLdapConnection.java:134)
> 	at org.apache.directory.ldap.client.api.AbstractLdapConnection.bind(AbstractLdapConnection.java:118)
> Caused by: org.apache.directory.api.ldap.model.exception.LdapException: ERR_04170_TIMEOUT_OCCURED
TimeOut occurred
> 	at org.apache.directory.ldap.client.api.LdapNetworkConnection.bind(LdapNetworkConnection.java:1505)
> {code}
> {code}
> org.apache.directory.api.ldap.model.exception.LdapProtocolErrorException: PROTOCOL_ERROR:
The server will disconnect!
> 	at org.apache.directory.api.ldap.model.message.ResultCodeEnum.processResponse(ResultCodeEnum.java:2137)
> 	at org.apache.directory.ldap.client.api.AbstractLdapConnection.bind(AbstractLdapConnection.java:136)
> 	at org.apache.directory.ldap.client.api.AbstractLdapConnection.bind(AbstractLdapConnection.java:118)
> 	at org.apache.directory.shared.client.api.operations.bind.SimpleBindRequestTest.testSimpleBindAndUnbindLoop(SimpleBindRequestTest.java:664)
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@directory.apache.org
For additional commands, e-mail: dev-help@directory.apache.org


Mime
View raw message