@NotMutable @ThreadSafety(level=COMPLETELY_THREADSAFE) public final class ConcurrentRequestLimiterRequestHandler extends LDAPListenerRequestHandler
Semaphore
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 and 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.
|
Modifier and Type | Method and 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.
|
closeInstance, processUnbindRequest
public ConcurrentRequestLimiterRequestHandler(@NotNull LDAPListenerRequestHandler downstreamRequestHandler, int maxConcurrentRequests, long rejectTimeoutMillis)
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.public ConcurrentRequestLimiterRequestHandler(@NotNull LDAPListenerRequestHandler downstreamRequestHandler, @NotNull java.util.concurrent.Semaphore semaphore, long rejectTimeoutMillis)
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.public ConcurrentRequestLimiterRequestHandler(@NotNull LDAPListenerRequestHandler downstreamRequestHandler, @Nullable java.util.concurrent.Semaphore abandonSemaphore, @Nullable java.util.concurrent.Semaphore addSemaphore, @Nullable java.util.concurrent.Semaphore bindSemaphore, @Nullable java.util.concurrent.Semaphore compareSemaphore, @Nullable java.util.concurrent.Semaphore deleteSemaphore, @Nullable java.util.concurrent.Semaphore extendedSemaphore, @Nullable java.util.concurrent.Semaphore modifySemaphore, @Nullable java.util.concurrent.Semaphore modifyDNSemaphore, @Nullable java.util.concurrent.Semaphore searchSemaphore, long rejectTimeoutMillis)
modifySemaphore
and
searchSemaphore
arguments).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 be
null
.abandonSemaphore
- The semaphore to use when processing
abandon operations. It may be
null
if no concurrent request
limiting should be performed for abandon
operations.addSemaphore
- The semaphore to use when processing add
operations. It may be null
if no
concurrent request limiting should be
performed for add operations.bindSemaphore
- The semaphore to use when processing
bind operations. It may be
null
if no concurrent request
limiting should be performed for bind
operations.compareSemaphore
- The semaphore to use when processing
compare operations. It may be
null
if no concurrent request
limiting should be performed for compare
operations.deleteSemaphore
- The semaphore to use when processing
delete operations. It may be
null
if no concurrent request
limiting should be performed for delete
operations.extendedSemaphore
- The semaphore to use when processing
extended operations. It may be
null
if no concurrent request
limiting should be performed for extended
operations.modifySemaphore
- The semaphore to use when processing
modify operations. It may be
null
if no concurrent request
limiting should be performed for modify
operations.modifyDNSemaphore
- The semaphore to use when processing
modify DN operations. It may be
null
if no concurrent request
limiting should be performed for modify
DN operations.searchSemaphore
- The semaphore to use when processing
search operations. It may be
null
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.@NotNull public ConcurrentRequestLimiterRequestHandler newInstance(@NotNull LDAPListenerClientConnection connection) throws LDAPException
newInstance
in class LDAPListenerRequestHandler
connection
- The connection with which this request handler instance
will be associated.LDAPException
- If the connection should not be accepted.public void processAbandonRequest(int messageID, @NotNull AbandonRequestProtocolOp request, @NotNull java.util.List<Control> controls)
processAbandonRequest
in class LDAPListenerRequestHandler
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 be
null
.@NotNull public LDAPMessage processAddRequest(int messageID, @NotNull AddRequestProtocolOp request, @NotNull java.util.List<Control> controls)
processAddRequest
in class LDAPListenerRequestHandler
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 be
null
.LDAPMessage
containing the response to send to the
client. The protocol op in the LDAPMessage
must be an
AddResponseProtocolOp
.@NotNull public LDAPMessage processBindRequest(int messageID, @NotNull BindRequestProtocolOp request, @NotNull java.util.List<Control> controls)
processBindRequest
in class LDAPListenerRequestHandler
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 be
null
.LDAPMessage
containing the response to send to the
client. The protocol op in the LDAPMessage
must be a
BindResponseProtocolOp
.@NotNull public LDAPMessage processCompareRequest(int messageID, @NotNull CompareRequestProtocolOp request, @NotNull java.util.List<Control> controls)
processCompareRequest
in class LDAPListenerRequestHandler
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 be
null
.LDAPMessage
containing the response to send to the
client. The protocol op in the LDAPMessage
must be a
CompareResponseProtocolOp
.@NotNull public LDAPMessage processDeleteRequest(int messageID, @NotNull DeleteRequestProtocolOp request, @NotNull java.util.List<Control> controls)
processDeleteRequest
in class LDAPListenerRequestHandler
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 be
null
.LDAPMessage
containing the response to send to the
client. The protocol op in the LDAPMessage
must be a
DeleteResponseProtocolOp
.@NotNull public LDAPMessage processExtendedRequest(int messageID, @NotNull ExtendedRequestProtocolOp request, @NotNull java.util.List<Control> controls)
processExtendedRequest
in class LDAPListenerRequestHandler
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 be
null
.LDAPMessage
containing the response to send to the
client. The protocol op in the LDAPMessage
must be an
ExtendedResponseProtocolOp
.@NotNull public LDAPMessage processModifyRequest(int messageID, @NotNull ModifyRequestProtocolOp request, @NotNull java.util.List<Control> controls)
processModifyRequest
in class LDAPListenerRequestHandler
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 be
null
.LDAPMessage
containing the response to send to the
client. The protocol op in the LDAPMessage
must be an
ModifyResponseProtocolOp
.@NotNull public LDAPMessage processModifyDNRequest(int messageID, @NotNull ModifyDNRequestProtocolOp request, @NotNull java.util.List<Control> controls)
processModifyDNRequest
in class LDAPListenerRequestHandler
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 be
null
.LDAPMessage
containing the response to send to the
client. The protocol op in the LDAPMessage
must be an
ModifyDNResponseProtocolOp
.@NotNull public LDAPMessage processSearchRequest(int messageID, @NotNull SearchRequestProtocolOp request, @NotNull java.util.List<Control> controls)
processSearchRequest
in class LDAPListenerRequestHandler
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 be
null
.LDAPMessage
containing the response to send to the
client. The protocol op in the LDAPMessage
must be an
SearchResultDoneProtocolOp
.