@NotMutable @ThreadSafety(level=COMPLETELY_THREADSAFE) public final class RateLimiterRequestHandler extends LDAPListenerRequestHandler
FixedRateBarrier
instances to enforce the rate limiting, and
provides the ability to control rate limiting on a per-operation-type basis.Constructor and Description |
---|
RateLimiterRequestHandler(LDAPListenerRequestHandler downstreamRequestHandler,
FixedRateBarrier rateLimiter)
Creates a new rate limiter request handler that will use the provided
FixedRateBarrier to perform rate limiting for all types of
operations except abandon and unbind. |
RateLimiterRequestHandler(LDAPListenerRequestHandler downstreamRequestHandler,
FixedRateBarrier abandonRateLimiter,
FixedRateBarrier addRateLimiter,
FixedRateBarrier bindRateLimiter,
FixedRateBarrier compareRateLimiter,
FixedRateBarrier deleteRateLimiter,
FixedRateBarrier extendedRateLimiter,
FixedRateBarrier modifyRateLimiter,
FixedRateBarrier modifyDNRateLimiter,
FixedRateBarrier searchRateLimiter)
Creates a new rate limiter request handler that can use the provided
FixedRateBarrier instances to perform rate limiting for different
types of operations. |
RateLimiterRequestHandler(LDAPListenerRequestHandler downstreamRequestHandler,
int maxPerSecond)
Creates a new rate limiter request handler that will limit the rate of
operations to the specified maximum number per second.
|
Modifier and Type | Method and Description |
---|---|
RateLimiterRequestHandler |
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 RateLimiterRequestHandler(@NotNull LDAPListenerRequestHandler downstreamRequestHandler, int maxPerSecond)
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
.maxPerSecond
- The maximum number of operations that
will be allowed per second, across all
types of operations except abandon and
unbind. It must be greater than zero.public RateLimiterRequestHandler(@NotNull LDAPListenerRequestHandler downstreamRequestHandler, @Nullable FixedRateBarrier rateLimiter)
FixedRateBarrier
to perform rate limiting for all types of
operations except abandon and unbind. No rate limiting will be enforced
for abandon or unbind operations.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
.rateLimiter
- The fixed-rate barrier that will be used
to achieve the rate limiting for all
types of operations except abandon and
unbind. It may be null
if no
rate limiting should be performed for any
operation types.public RateLimiterRequestHandler(@Nullable LDAPListenerRequestHandler downstreamRequestHandler, @Nullable FixedRateBarrier abandonRateLimiter, @Nullable FixedRateBarrier addRateLimiter, @Nullable FixedRateBarrier bindRateLimiter, @Nullable FixedRateBarrier compareRateLimiter, @Nullable FixedRateBarrier deleteRateLimiter, @Nullable FixedRateBarrier extendedRateLimiter, @Nullable FixedRateBarrier modifyRateLimiter, @Nullable FixedRateBarrier modifyDNRateLimiter, @Nullable FixedRateBarrier searchRateLimiter)
FixedRateBarrier
instances to perform rate limiting for different
types of operations. The same barrier 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 rate of search and modify operations to exceed a given
threshold, then you could provide the same barrier instance for the
modifyRateLimiter
and searchRateLimiter
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
.abandonRateLimiter
- The fixed-rate barrier to use when
processing abandon operations. It may be
null
if no rate limiting should
be enforced for abandon operations.addRateLimiter
- The fixed-rate barrier to use when
processing add operations. It may be
null
if no rate limiting should
be enforced for add operations.bindRateLimiter
- The fixed-rate barrier to use when
processing bind operations. It may be
null
if no rate limiting should
be enforced for bind operations.compareRateLimiter
- The fixed-rate barrier to use when
processing compare operations. It may be
null
if no rate limiting should
be enforced for compare operations.deleteRateLimiter
- The fixed-rate barrier to use when
processing delete operations. It may be
null
if no rate limiting should
be enforced for delete operations.extendedRateLimiter
- The fixed-rate barrier to use when
processing extended operations. It may
be null
if no rate limiting
should be enforced for extended
operations.modifyRateLimiter
- The fixed-rate barrier to use when
processing modify operations. It may be
null
if no rate limiting should
be enforced for modify operations.modifyDNRateLimiter
- The fixed-rate barrier to use when
processing modify DN operations. It may
be null
if no rate limiting
should be enforced for modify DN
operations.searchRateLimiter
- The fixed-rate barrier to use when
processing search operations. It may be
null
if no rate limiting should
be enforced for search operations.@NotNull public RateLimiterRequestHandler 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
.