Search operation with explicit specification of operation timeout (DIRAPI-378).
diff --git a/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java b/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
index 842acad..a8b8dc0 100644
--- a/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
+++ b/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
@@ -2400,23 +2400,45 @@
if ( searchRequest == null )
{
String msg = I18n.err( I18n.ERR_04130_CANNOT_PROCESS_NULL_SEARCH_REQ );
-
+
if ( LOG.isDebugEnabled() )
{
LOG.debug( msg );
}
-
+
+ throw new IllegalArgumentException( msg );
+ }
+ long localSearchTimeout = getTimeout( readOperationTimeout, searchRequest.getTimeLimit() );
+ return search( searchRequest, localSearchTimeout );
+ }
+
+ /**
+ * Search operation with explicit specification of operation timeout.
+ * This is very useful for special-purpose search operations, such as connection liveliness test.
+ * In that case we want to make a very quick search with a very short timeout.
+ * We do not want to use the default search timeout in this case, as that is likely to be in order of seconds.
+ * That is too long for quick connection check.
+ * searchRequest.timeLimit is not going to work either, as it has very rough granularity (seconds).
+ */
+ public SearchCursor search( SearchRequest searchRequest, long localSearchTimeout ) throws LdapException
+ {
+ if ( searchRequest == null )
+ {
+ String msg = I18n.err( I18n.ERR_04130_CANNOT_PROCESS_NULL_SEARCH_REQ );
+
+ if ( LOG.isDebugEnabled() )
+ {
+ LOG.debug( msg );
+ }
+
throw new IllegalArgumentException( msg );
}
SearchFuture searchFuture = searchAsync( searchRequest );
- long localSearchTimeout = getTimeout( readOperationTimeout, searchRequest.getTimeLimit() );
-
return new SearchCursorImpl( searchFuture, localSearchTimeout, TimeUnit.MILLISECONDS );
}
-
//------------------------ The LDAP operations ------------------------//
// Unbind operations //
//---------------------------------------------------------------------//