Package reactor.pool

Interface PoolConfig<POOLABLE>

All Known Implementing Classes:
DefaultPoolConfig

public interface PoolConfig<POOLABLE>
A representation of the common configuration options of a Pool. For a default implementation that is open for extension, see DefaultPoolConfig.
Author:
Simon Baslé
  • Method Details

    • allocator

      Mono<POOLABLE> allocator()
      The asynchronous factory that produces new resources, represented as a Mono.
    • allocationStrategy

      AllocationStrategy allocationStrategy()
      AllocationStrategy defines a strategy / limit for the number of pooled object to allocate.
    • maxPending

      int maxPending()
      The maximum number of pending borrowers to enqueue before failing fast. 0 will immediately fail any acquire when no idle resource is available and the pool cannot grow. Use a negative number to deactivate.
    • releaseHandler

      Function<POOLABLE,? extends Publisher<Void>> releaseHandler()
      When a resource is released, defines a mechanism of resetting any lingering state of the resource in order for it to become usable again. The evictionPredicate() is applied AFTER this reset.

      For example, a buffer could have a readerIndex and writerIndex that need to be flipped back to zero.

    • destroyHandler

      Function<POOLABLE,? extends Publisher<Void>> destroyHandler()
      Defines a mechanism of resource destruction, cleaning up state and OS resources it could maintain (eg. off-heap objects, file handles, socket connections, etc...).

      For example, a database connection could need to cleanly sever the connection link by sending a message to the database.

    • evictionPredicate

      BiPredicate<POOLABLE,PooledRefMetadata> evictionPredicate()
      A BiPredicate that checks if a resource should be destroyed (true) or is still in a valid state for recycling. This is primarily applied when a resource is released, to check whether or not it can immediately be recycled, but could also be applied during an acquire attempt (detecting eg. idle resources) or by a background reaping process. Both the resource and some metrics about the resource's life within the pool are provided.
    • evictInBackgroundInterval

      default Duration evictInBackgroundInterval()
      If the pool is configured to perform regular eviction checks on the background, returns the Duration representing the interval at which such checks are made. Otherwise returns Duration.ZERO (the default).
    • evictInBackgroundScheduler

      default Scheduler evictInBackgroundScheduler()
      If the pool is configured to perform regular eviction checks on the background, returns the Scheduler on which these checks are made. Otherwise returns Schedulers.immediate() (the default).
    • acquisitionScheduler

      Scheduler acquisitionScheduler()
      When set, Pool implementation MAY decide to use the Scheduler to publish resources in a more deterministic way: the publishing thread would then always be the same, independently of which thread called Pool.acquire() or PooledRef.release() or on which thread the allocator() produced new resources. Note that not all pool implementations are guaranteed to enforce this, as they might have their own thread publishing semantics.

      Defaults to Schedulers.immediate(), which inhibits this behavior.

    • metricsRecorder

      PoolMetricsRecorder metricsRecorder()
      The PoolMetricsRecorder to use to collect instrumentation data of the Pool implementations.
    • clock

      Clock clock()
      The Clock to use to timestamp pool lifecycle events like allocation and eviction, which can influence eg. the evictionPredicate().
    • reuseIdleResourcesInLruOrder

      boolean reuseIdleResourcesInLruOrder()
      The order in which idle (aka available) resources should be used when the pool was under-utilized and a new Pool.acquire() is performed. Returns true if LRU (Least-Recently Used, the resource that was released first is emitted) or false for MRU (Most-Recently Used, the resource that was released last is emitted).
      Returns:
      true for LRU, false for MRU
    • pendingAcquireTimer

      default BiFunction<Runnable,Duration,Disposable> pendingAcquireTimer()
      The function that defines how timeouts are scheduled when a Pool.acquire(Duration) call is made and the acquisition is pending. i.e. there is no idle resource and no new resource can be created currently, so a timeout is scheduled using the returned function.

      By default, the Schedulers.parallel() scheduler is used.

      Returns:
      the function to apply when scheduling timers for pending acquisitions
    • maxLifeTime

      default Duration maxLifeTime()
      The maximum lifetime for pooled resources. Resources that have been alive for longer than this duration will be evicted on acquire, release, or during background eviction.

      Duration.ZERO disables lifetime-based eviction (the default).

      When configured, this is composed with the evictionPredicate() using OR logic — a resource is evicted if either condition triggers.

      Returns:
      the maximum lifetime for pooled resources, or Duration.ZERO if disabled
      Since:
      1.2.4
      See Also:
    • maxLifeTimeVariance

      default double maxLifeTimeVariance()
      A variance percentage (0–100) applied to maxLifeTime() to introduce per-resource jitter. Each resource's effective max lifetime will fall in the range [maxLifeTime * (1 - variance/100), maxLifeTime], spreading resource renewal over a window instead of a single point in time.

      Only meaningful when maxLifeTime() is configured (non-zero). Default is 0 (no variance — all resources expire at exactly maxLifeTime()).

      Returns:
      the variance percentage, between 0 and 100
      Since:
      1.2.4
      See Also:
    • generateMaxLifeTimeMs

      default long generateMaxLifeTimeMs()
      Generate an effective max lifetime in milliseconds for a single resource, applying maxLifeTimeVariance() jitter to maxLifeTime(). Each call may return a different value — call once per resource at creation time.
      Returns:
      effective max lifetime in milliseconds, or 0L if disabled
      Since:
      1.2.4