package voldemort.utils.pool; import java.util.concurrent.TimeUnit; /** * Resource pool config class. * * */ public class ResourcePoolConfig { /* Note: if you change the defaults you must update the javadoc as well. */ private int poolMaxSize = 20; private long timeoutNs = Long.MAX_VALUE; private int maxInvalidResourceCreations = Integer.MAX_VALUE; private boolean isFair = true; public ResourcePoolConfig() { super(); } /** * Get the size of the pool */ public int getMaxPoolSize() { return poolMaxSize; } /** * The size of the pool to maintain for each key. * * The default pool size is 20 * * @param poolSize The desired per-key pool size */ public ResourcePoolConfig setMaxPoolSize(int poolSize) { if(poolSize <= 0) throw new IllegalArgumentException("Pool size must be a positive number."); this.poolMaxSize = poolSize; return this; } /** * Get the the pool timeout in the given units * * @param unit The units in which to fetch the timeout * @return The timeout */ public long getTimeout(TimeUnit unit) { return unit.convert(timeoutNs, TimeUnit.NANOSECONDS); } /** * The timeout which we block for when a resource is not available * * @param timeout The timeout * @param unit The units of the timeout */ public ResourcePoolConfig setTimeout(long timeout, TimeUnit unit) { if(timeout < 0) throw new IllegalArgumentException("The timeout must be a non-negative number."); this.timeoutNs = TimeUnit.NANOSECONDS.convert(timeout, unit); return this; } /** * The maximum number of successive invalid resources that can be created in * a single checkout. The purpose of this parameter is to avoid churning the * created objects in the case that the created object is immediately * invalid. * * Default is unlimited. * * @param limit The desired limit */ public ResourcePoolConfig setMaxInvalidAttempts(int limit) { if(limit <= 0) throw new IllegalArgumentException("Limit must be a positive number."); this.maxInvalidResourceCreations = limit; return this; } /** * Get the maximum number of invalid resources that can be created before * throwing an exception. */ public int getMaximumInvalidResourceCreationLimit() { return this.maxInvalidResourceCreations; } /** * Controls whether the pool gives resources to threads in the order they * arrive or not */ public boolean isFair() { return this.isFair; } /** * Controls whether the pool gives resources to threads in the order they * arrive or not. An unfair pool is approximately 10x faster, but gives not * guarantee on the order in which waiting threads get a resource. */ public ResourcePoolConfig setIsFair(boolean isFair) { this.isFair = isFair; return this; } }