You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2014/04/26 22:44:31 UTC

svn commit: r1590296 - in /directory/shared/trunk/ldap/client/api/src: main/java/org/apache/directory/ldap/client/api/ test/java/org/ test/java/org/apache/ test/java/org/apache/directory/ test/java/org/apache/directory/ldap/ test/java/org/apache/direct...

Author: seelmann
Date: Sat Apr 26 20:44:31 2014
New Revision: 1590296

URL: http://svn.apache.org/r1590296
Log:
Fix timeout for search operations (DIRAPI-190, DIRSTUDIO-967)

Added:
    directory/shared/trunk/ldap/client/api/src/test/java/org/
    directory/shared/trunk/ldap/client/api/src/test/java/org/apache/
    directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/
    directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/
    directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/
    directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/
    directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/LdapNetworkConnectionTest.java
Modified:
    directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java

Modified: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java?rev=1590296&r1=1590295&r2=1590296&view=diff
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java (original)
+++ directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java Sat Apr 26 20:44:31 2014
@@ -308,25 +308,23 @@ public class LdapNetworkConnection exten
 
 
     /**
-     * Get the smallest timeout from the client timeout and the connection
+     * Get the largest timeout from the search time limit and the connection
      * timeout.
      */
-    private long getTimeout( long clientTimeout )
+    static long getTimeout( long connectionTimoutInMS, int searchTimeLimitInSeconds )
     {
-        if ( clientTimeout <= 0 )
+        if ( searchTimeLimitInSeconds < 0 )
         {
-            return ( timeout <= 0 ) ? Long.MAX_VALUE : timeout;
+            return connectionTimoutInMS;
         }
-
-        long timeoutMs = clientTimeout * 1000L;
-
-        if ( timeout <= 0 )
+        else if ( searchTimeLimitInSeconds == 0 )
         {
-            return timeoutMs;
+            return Long.MAX_VALUE;
         }
         else
         {
-            return timeout < timeoutMs ? timeout : timeoutMs;
+            long searchTimeLimitInMS = searchTimeLimitInSeconds * 1000L;
+            return Math.max( searchTimeLimitInMS, connectionTimoutInMS );
         }
     }
 
@@ -1709,7 +1707,7 @@ public class LdapNetworkConnection exten
 
         SearchFuture searchFuture = searchAsync( searchRequest );
 
-        long timeout = getTimeout( searchRequest.getTimeLimit() );
+        long timeout = getTimeout( this.timeout, searchRequest.getTimeLimit() );
 
         return new SearchCursorImpl( searchFuture, timeout, TimeUnit.MILLISECONDS );
     }

Added: directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/LdapNetworkConnectionTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/LdapNetworkConnectionTest.java?rev=1590296&view=auto
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/LdapNetworkConnectionTest.java (added)
+++ directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/LdapNetworkConnectionTest.java Sat Apr 26 20:44:31 2014
@@ -0,0 +1,67 @@
+package org.apache.directory.ldap.client.api;
+
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+
+@RunWith(Parameterized.class)
+public class LdapNetworkConnectionTest
+{
+
+    private long connectionTimeoutInMS;
+    private int searchTimeLimitInSeconds;
+    private long expectedTimeoutInMS;
+
+
+    @Parameters(name = "{index}: {0},{1}->{2}")
+    public static Collection<Object[]> data()
+    {
+        return Arrays.asList( new Object[][]
+            {
+                    // index 0: connection timout in ms
+                    // index 1: search time limit in seconds
+                    // index 2: expected timeout in ms
+                    { 2000, -1, 2000, "Invalid search time limit, use connection timeout" },
+                    { 2000, 0, Long.MAX_VALUE, "Search time limit is 0, use max value" },
+                    { 2000, 1, 2000, "search time limit < connection timeout, use connection timeout" },
+                    { 2000, 5, 5000, "search time limit > connection timeout, use search time limit" },
+                    { 2000, Integer.MAX_VALUE, 2147483647000L, "Integer overflow" },
+                    { 30000, -1, 30000, "Invalid search time limit, use connection timeout" },
+                    { 30000, 0, Long.MAX_VALUE, "Search time limit is 0, use max value" },
+                    { 30000, 1, 30000, "search time limit < connection timeout, use connection timeout" },
+                    { 30000, 29, 30000, "search time limit < connection timeout, use connection timeout" },
+                    { 30000, 31, 31000, "search time limit > connection timeout, use search time limit" },
+                    { 30000, 60, 60000, "search time limit > connection timeout, use search time limit" },
+                    { Long.MAX_VALUE, -1, Long.MAX_VALUE, "Invalid search time limit, use connection timeout" },
+                    { Long.MAX_VALUE, 0, Long.MAX_VALUE, "Search time limit is 0, use max value" },
+                    { Long.MAX_VALUE, 1, Long.MAX_VALUE,
+                        "search time limit < connection timeout, use connection timeout" },
+            } );
+    }
+
+
+    public LdapNetworkConnectionTest( long connectionTimeoutInMS, int searchTimeLimitInSeconds,
+        long expectedTimeoutInMS, String testDescription )
+    {
+        this.connectionTimeoutInMS = connectionTimeoutInMS;
+        this.searchTimeLimitInSeconds = searchTimeLimitInSeconds;
+        this.expectedTimeoutInMS = expectedTimeoutInMS;
+    }
+
+
+    @Test
+    public void testGetClientTimeout()
+    {
+        long timeout = LdapNetworkConnection.getTimeout( connectionTimeoutInMS, searchTimeLimitInSeconds );
+        assertEquals( expectedTimeoutInMS, timeout );
+    }
+
+}