Class ConcurrentRequestLimiterRequestHandler

java.lang.Object
com.unboundid.ldap.listener.LDAPListenerRequestHandler
com.unboundid.ldap.listener.ConcurrentRequestLimiterRequestHandler

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 more 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 Details

    • ConcurrentRequestLimiterRequestHandler

      public ConcurrentRequestLimiterRequestHandler(@NotNull 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(@NotNull LDAPListenerRequestHandler downstreamRequestHandler, @NotNull 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(@NotNull LDAPListenerRequestHandler downstreamRequestHandler, @Nullable Semaphore abandonSemaphore, @Nullable Semaphore addSemaphore, @Nullable Semaphore bindSemaphore, @Nullable Semaphore compareSemaphore, @Nullable Semaphore deleteSemaphore, @Nullable Semaphore extendedSemaphore, @Nullable Semaphore modifySemaphore, @Nullable Semaphore modifyDNSemaphore, @Nullable 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 the modifySemaphore and searchSemaphore 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 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.
  • Method Details