public class DefaultPoolConfig<POOLABLE> extends Object implements PoolConfig<POOLABLE>
PoolConfig that can be extended to bear more configuration options
with access to a copy constructor for the basic options.| Modifier and Type | Field and Description |
|---|---|
protected Scheduler |
acquisitionScheduler |
protected AllocationStrategy |
allocationStrategy |
protected Mono<POOLABLE> |
allocator |
protected java.time.Clock |
clock |
protected java.util.function.Function<POOLABLE,? extends Publisher<Void>> |
destroyHandler |
protected java.util.function.BiPredicate<POOLABLE,PooledRefMetadata> |
evictionPredicate |
protected int |
maxPending |
protected PoolMetricsRecorder |
metricsRecorder |
protected java.util.function.Function<POOLABLE,? extends Publisher<Void>> |
releaseHandler |
| Modifier | Constructor and Description |
|---|---|
|
DefaultPoolConfig(Mono<POOLABLE> allocator,
AllocationStrategy allocationStrategy,
int maxPending,
java.util.function.Function<POOLABLE,? extends Publisher<Void>> releaseHandler,
java.util.function.Function<POOLABLE,? extends Publisher<Void>> destroyHandler,
java.util.function.BiPredicate<POOLABLE,PooledRefMetadata> evictionPredicate,
Scheduler acquisitionScheduler,
PoolMetricsRecorder metricsRecorder,
java.time.Clock clock) |
protected |
DefaultPoolConfig(PoolConfig<POOLABLE> toCopy)
Copy constructor for the benefit of specializations of
PoolConfig. |
| Modifier and Type | Method and Description |
|---|---|
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 PoolConfig.allocator() produced new
resources. |
AllocationStrategy |
allocationStrategy()
AllocationStrategy defines a strategy / limit for the number of pooled object to allocate. |
Mono<POOLABLE> |
allocator()
The asynchronous factory that produces new resources, represented as a
Mono. |
java.time.Clock |
clock()
The
Clock to use to timestamp pool lifecycle events like allocation
and eviction, which can influence eg. |
java.util.function.Function<POOLABLE,? extends Publisher<Void>> |
destroyHandler()
Defines a mechanism of resource destruction, cleaning up state and OS resources it could maintain (eg.
|
java.util.function.BiPredicate<POOLABLE,PooledRefMetadata> |
evictionPredicate()
A
BiPredicate that checks if a resource should be destroyed (true) or is still in a valid state
for recycling. |
int |
maxPending()
The maximum number of pending borrowers to enqueue before failing fast.
|
PoolMetricsRecorder |
metricsRecorder()
The
PoolMetricsRecorder to use to collect instrumentation data of the Pool
implementations. |
java.util.function.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. |
protected final AllocationStrategy allocationStrategy
protected final int maxPending
protected final java.util.function.Function<POOLABLE,? extends Publisher<Void>> releaseHandler
protected final java.util.function.Function<POOLABLE,? extends Publisher<Void>> destroyHandler
protected final java.util.function.BiPredicate<POOLABLE,PooledRefMetadata> evictionPredicate
protected final Scheduler acquisitionScheduler
protected final PoolMetricsRecorder metricsRecorder
protected final java.time.Clock clock
public DefaultPoolConfig(Mono<POOLABLE> allocator, AllocationStrategy allocationStrategy, int maxPending, java.util.function.Function<POOLABLE,? extends Publisher<Void>> releaseHandler, java.util.function.Function<POOLABLE,? extends Publisher<Void>> destroyHandler, java.util.function.BiPredicate<POOLABLE,PooledRefMetadata> evictionPredicate, Scheduler acquisitionScheduler, PoolMetricsRecorder metricsRecorder, java.time.Clock clock)
protected DefaultPoolConfig(PoolConfig<POOLABLE> toCopy)
PoolConfig.toCopy - the original PoolConfig to copy (only standard PoolConfig
options are copied)public Mono<POOLABLE> allocator()
PoolConfigMono.allocator in interface PoolConfig<POOLABLE>public AllocationStrategy allocationStrategy()
PoolConfigAllocationStrategy defines a strategy / limit for the number of pooled object to allocate.allocationStrategy in interface PoolConfig<POOLABLE>public int maxPending()
PoolConfigmaxPending in interface PoolConfig<POOLABLE>public java.util.function.Function<POOLABLE,? extends Publisher<Void>> releaseHandler()
PoolConfigreleased, defines a mechanism of resetting any lingering state of
the resource in order for it to become usable again. The PoolConfig.evictionPredicate() is applied AFTER this reset.
For example, a buffer could have a readerIndex and writerIndex that need to be flipped back to zero.
releaseHandler in interface PoolConfig<POOLABLE>public java.util.function.Function<POOLABLE,? extends Publisher<Void>> destroyHandler()
PoolConfigFor example, a database connection could need to cleanly sever the connection link by sending a message to the database.
destroyHandler in interface PoolConfig<POOLABLE>public java.util.function.BiPredicate<POOLABLE,PooledRefMetadata> evictionPredicate()
PoolConfigBiPredicate 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.evictionPredicate in interface PoolConfig<POOLABLE>public Scheduler acquisitionScheduler()
PoolConfigPool 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 PoolConfig.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.
acquisitionScheduler in interface PoolConfig<POOLABLE>public PoolMetricsRecorder metricsRecorder()
PoolConfigPoolMetricsRecorder to use to collect instrumentation data of the Pool
implementations.metricsRecorder in interface PoolConfig<POOLABLE>public java.time.Clock clock()
PoolConfigClock to use to timestamp pool lifecycle events like allocation
and eviction, which can influence eg. the PoolConfig.evictionPredicate().clock in interface PoolConfig<POOLABLE>