Package com.unboundid.ldap.listener
Class ConcurrentRequestLimiterRequestHandler
- java.lang.Object
-
- com.unboundid.ldap.listener.LDAPListenerRequestHandler
-
- com.unboundid.ldap.listener.ConcurrentRequestLimiterRequestHandler
-
@NotMutable @ThreadSafety(level=COMPLETELY_THREADSAFE) public final class ConcurrentRequestLimiterRequestHandler extends LDAPListenerRequestHandler
This class provides an implementation of an LDAP listener request handler that can be used to limit the number of requests that may be processed concurrently. It uses one or moreSemaphore
instances to limit the number of requests that may be processed at any time, and provides the ability to impose limiting on a per-operation-type basis.
-
-
Constructor Summary
Constructors Constructor Description ConcurrentRequestLimiterRequestHandler(LDAPListenerRequestHandler downstreamRequestHandler, int maxConcurrentRequests, long rejectTimeoutMillis)
Creates a new concurrent request limiter request handler that will impose the specified limit on the number of operations that may be in progress at any time.ConcurrentRequestLimiterRequestHandler(LDAPListenerRequestHandler downstreamRequestHandler, java.util.concurrent.Semaphore semaphore, long rejectTimeoutMillis)
Creates a new concurrent request limiter request handler that will use the provided semaphore to limit on the number of operations that may be in progress at any time.ConcurrentRequestLimiterRequestHandler(LDAPListenerRequestHandler downstreamRequestHandler, java.util.concurrent.Semaphore abandonSemaphore, java.util.concurrent.Semaphore addSemaphore, java.util.concurrent.Semaphore bindSemaphore, java.util.concurrent.Semaphore compareSemaphore, java.util.concurrent.Semaphore deleteSemaphore, java.util.concurrent.Semaphore extendedSemaphore, java.util.concurrent.Semaphore modifySemaphore, java.util.concurrent.Semaphore modifyDNSemaphore, java.util.concurrent.Semaphore searchSemaphore, long rejectTimeoutMillis)
Creates a new concurrent request limiter request handler that can use the provided semaphore instances to limit the number of operations in progress concurrently for each type of operation.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description ConcurrentRequestLimiterRequestHandler
newInstance(LDAPListenerClientConnection connection)
Creates a new instance of this request handler that will be used to process requests read by the provided connection.void
processAbandonRequest(int messageID, AbandonRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided abandon request.LDAPMessage
processAddRequest(int messageID, AddRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided add request.LDAPMessage
processBindRequest(int messageID, BindRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided bind request.LDAPMessage
processCompareRequest(int messageID, CompareRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided compare request.LDAPMessage
processDeleteRequest(int messageID, DeleteRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided delete request.LDAPMessage
processExtendedRequest(int messageID, ExtendedRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided extended request.LDAPMessage
processModifyDNRequest(int messageID, ModifyDNRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided modify DN request.LDAPMessage
processModifyRequest(int messageID, ModifyRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided modify request.LDAPMessage
processSearchRequest(int messageID, SearchRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided search request.-
Methods inherited from class com.unboundid.ldap.listener.LDAPListenerRequestHandler
closeInstance, processUnbindRequest
-
-
-
-
Constructor Detail
-
ConcurrentRequestLimiterRequestHandler
public ConcurrentRequestLimiterRequestHandler(LDAPListenerRequestHandler downstreamRequestHandler, int maxConcurrentRequests, long rejectTimeoutMillis)
Creates a new concurrent request limiter request handler that will impose the specified limit on the number of operations that may be in progress at any time. The limit will be enforced for all types of operations except abandon and unbind operations, which will not be limited.- Parameters:
downstreamRequestHandler
- The downstream request handler that will be used to actually process the requests after any appropriate limiting has been performed.maxConcurrentRequests
- The maximum number of requests that may be processed at any given time. This limit will be enforced for all operation types except abandon and unbind, which will not be limited.rejectTimeoutMillis
- A timeout value (expressed in milliseconds) that will cause a requested operation to be rejected rather than processed if the associate semaphore cannot be acquired in this length of time. A value of zero indicates that the operation should be rejected immediately if the maximum number of concurrent requests are already in progress. A value that is less than zero indicates that no timeout should be imposed and that requests should be forced to wait as long as necessary until they can be processed.
-
ConcurrentRequestLimiterRequestHandler
public ConcurrentRequestLimiterRequestHandler(LDAPListenerRequestHandler downstreamRequestHandler, java.util.concurrent.Semaphore semaphore, long rejectTimeoutMillis)
Creates a new concurrent request limiter request handler that will use the provided semaphore to limit on the number of operations that may be in progress at any time. The limit will be enforced for all types of operations except abandon and unbind operations, which will not be limited.- Parameters:
downstreamRequestHandler
- The downstream request handler that will be used to actually process the requests after any appropriate limiting has been performed.semaphore
- The semaphore that will be used to limit the number of concurrent operations in progress, for all operation types except abandon and unbind.rejectTimeoutMillis
- A timeout value (expressed in milliseconds) that will cause a requested operation to be rejected rather than processed if the associate semaphore cannot be acquired in this length of time. A value of zero indicates that the operation should be rejected immediately if the maximum number of concurrent requests are already in progress. A value that is less than zero indicates that no timeout should be imposed and that requests should be forced to wait as long as necessary until they can be processed.
-
ConcurrentRequestLimiterRequestHandler
public ConcurrentRequestLimiterRequestHandler(LDAPListenerRequestHandler downstreamRequestHandler, java.util.concurrent.Semaphore abandonSemaphore, java.util.concurrent.Semaphore addSemaphore, java.util.concurrent.Semaphore bindSemaphore, java.util.concurrent.Semaphore compareSemaphore, java.util.concurrent.Semaphore deleteSemaphore, java.util.concurrent.Semaphore extendedSemaphore, java.util.concurrent.Semaphore modifySemaphore, java.util.concurrent.Semaphore modifyDNSemaphore, java.util.concurrent.Semaphore searchSemaphore, long rejectTimeoutMillis)
Creates a new concurrent request limiter request handler that can use the provided semaphore instances to limit the number of operations in progress concurrently for each type of operation. The same semaphore instance can be provided for multiple operation types if performance for those operations should be limited in aggregate rather than individually (e.g., if you don't want the total combined number of search and modify operations in progress at any time to exceed a given threshold, then you could provide the same semaphore instance for themodifySemaphore
andsearchSemaphore
arguments).- Parameters:
downstreamRequestHandler
- The downstream request handler that will be used to actually process the requests after any appropriate rate limiting has been performed. It must not benull
.abandonSemaphore
- The semaphore to use when processing abandon operations. It may benull
if no concurrent request limiting should be performed for abandon operations.addSemaphore
- The semaphore to use when processing add operations. It may benull
if no concurrent request limiting should be performed for add operations.bindSemaphore
- The semaphore to use when processing bind operations. It may benull
if no concurrent request limiting should be performed for bind operations.compareSemaphore
- The semaphore to use when processing compare operations. It may benull
if no concurrent request limiting should be performed for compare operations.deleteSemaphore
- The semaphore to use when processing delete operations. It may benull
if no concurrent request limiting should be performed for delete operations.extendedSemaphore
- The semaphore to use when processing extended operations. It may benull
if no concurrent request limiting should be performed for extended operations.modifySemaphore
- The semaphore to use when processing modify operations. It may benull
if no concurrent request limiting should be performed for modify operations.modifyDNSemaphore
- The semaphore to use when processing modify DN operations. It may benull
if no concurrent request limiting should be performed for modify DN operations.searchSemaphore
- The semaphore to use when processing search operations. It may benull
if no concurrent request limiting should be performed for search operations.rejectTimeoutMillis
- A timeout value (expressed in milliseconds) that will cause a requested operation to be rejected rather than processed if the associate semaphore cannot be acquired in this length of time. A value of zero indicates that the operation should be rejected immediately if the maximum number of concurrent requests are already in progress. A value that is less than zero indicates that no timeout should be imposed and that requests should be forced to wait as long as necessary until they can be processed.
-
-
Method Detail
-
newInstance
public ConcurrentRequestLimiterRequestHandler newInstance(LDAPListenerClientConnection connection) throws LDAPException
Creates a new instance of this request handler that will be used to process requests read by the provided connection.- Specified by:
newInstance
in classLDAPListenerRequestHandler
- Parameters:
connection
- The connection with which this request handler instance will be associated.- Returns:
- The request handler instance that will be used for the provided connection.
- Throws:
LDAPException
- If the connection should not be accepted.
-
processAbandonRequest
public void processAbandonRequest(int messageID, AbandonRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided abandon request.- Overrides:
processAbandonRequest
in classLDAPListenerRequestHandler
- Parameters:
messageID
- The message ID of the LDAP message containing the abandon request.request
- The abandon request that was included in the LDAP message that was received.controls
- The set of controls included in the LDAP message. It may be empty if there were no controls, but will not benull
.
-
processAddRequest
public LDAPMessage processAddRequest(int messageID, AddRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided add request.- Specified by:
processAddRequest
in classLDAPListenerRequestHandler
- Parameters:
messageID
- The message ID of the LDAP message containing the add request.request
- The add request that was included in the LDAP message that was received.controls
- The set of controls included in the LDAP message. It may be empty if there were no controls, but will not benull
.- Returns:
- The
LDAPMessage
containing the response to send to the client. The protocol op in theLDAPMessage
must be anAddResponseProtocolOp
.
-
processBindRequest
public LDAPMessage processBindRequest(int messageID, BindRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided bind request.- Specified by:
processBindRequest
in classLDAPListenerRequestHandler
- Parameters:
messageID
- The message ID of the LDAP message containing the bind request.request
- The bind request that was included in the LDAP message that was received.controls
- The set of controls included in the LDAP message. It may be empty if there were no controls, but will not benull
.- Returns:
- The
LDAPMessage
containing the response to send to the client. The protocol op in theLDAPMessage
must be aBindResponseProtocolOp
.
-
processCompareRequest
public LDAPMessage processCompareRequest(int messageID, CompareRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided compare request.- Specified by:
processCompareRequest
in classLDAPListenerRequestHandler
- Parameters:
messageID
- The message ID of the LDAP message containing the compare request.request
- The compare request that was included in the LDAP message that was received.controls
- The set of controls included in the LDAP message. It may be empty if there were no controls, but will not benull
.- Returns:
- The
LDAPMessage
containing the response to send to the client. The protocol op in theLDAPMessage
must be aCompareResponseProtocolOp
.
-
processDeleteRequest
public LDAPMessage processDeleteRequest(int messageID, DeleteRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided delete request.- Specified by:
processDeleteRequest
in classLDAPListenerRequestHandler
- Parameters:
messageID
- The message ID of the LDAP message containing the delete request.request
- The delete request that was included in the LDAP message that was received.controls
- The set of controls included in the LDAP message. It may be empty if there were no controls, but will not benull
.- Returns:
- The
LDAPMessage
containing the response to send to the client. The protocol op in theLDAPMessage
must be aDeleteResponseProtocolOp
.
-
processExtendedRequest
public LDAPMessage processExtendedRequest(int messageID, ExtendedRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided extended request.- Specified by:
processExtendedRequest
in classLDAPListenerRequestHandler
- Parameters:
messageID
- The message ID of the LDAP message containing the extended request.request
- The extended request that was included in the LDAP message that was received.controls
- The set of controls included in the LDAP message. It may be empty if there were no controls, but will not benull
.- Returns:
- The
LDAPMessage
containing the response to send to the client. The protocol op in theLDAPMessage
must be anExtendedResponseProtocolOp
.
-
processModifyRequest
public LDAPMessage processModifyRequest(int messageID, ModifyRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided modify request.- Specified by:
processModifyRequest
in classLDAPListenerRequestHandler
- Parameters:
messageID
- The message ID of the LDAP message containing the modify request.request
- The modify request that was included in the LDAP message that was received.controls
- The set of controls included in the LDAP message. It may be empty if there were no controls, but will not benull
.- Returns:
- The
LDAPMessage
containing the response to send to the client. The protocol op in theLDAPMessage
must be anModifyResponseProtocolOp
.
-
processModifyDNRequest
public LDAPMessage processModifyDNRequest(int messageID, ModifyDNRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided modify DN request.- Specified by:
processModifyDNRequest
in classLDAPListenerRequestHandler
- Parameters:
messageID
- The message ID of the LDAP message containing the modify DN request.request
- The modify DN request that was included in the LDAP message that was received.controls
- The set of controls included in the LDAP message. It may be empty if there were no controls, but will not benull
.- Returns:
- The
LDAPMessage
containing the response to send to the client. The protocol op in theLDAPMessage
must be anModifyDNResponseProtocolOp
.
-
processSearchRequest
public LDAPMessage processSearchRequest(int messageID, SearchRequestProtocolOp request, java.util.List<Control> controls)
Performs any processing necessary for the provided search request.- Specified by:
processSearchRequest
in classLDAPListenerRequestHandler
- Parameters:
messageID
- The message ID of the LDAP message containing the search request.request
- The search request that was included in the LDAP message that was received.controls
- The set of controls included in the LDAP message. It may be empty if there were no controls, but will not benull
.- Returns:
- The
LDAPMessage
containing the response to send to the client. The protocol op in theLDAPMessage
must be anSearchResultDoneProtocolOp
.
-
-