package org.infinispan.persistence.remote.configuration;
import static org.infinispan.persistence.remote.configuration.ConnectionPoolConfiguration.EXHAUSTED_ACTION;
import static org.infinispan.persistence.remote.configuration.ConnectionPoolConfiguration.MAX_ACTIVE;
import static org.infinispan.persistence.remote.configuration.ConnectionPoolConfiguration.MAX_IDLE;
import static org.infinispan.persistence.remote.configuration.ConnectionPoolConfiguration.MAX_TOTAL;
import static org.infinispan.persistence.remote.configuration.ConnectionPoolConfiguration.MIN_EVICTABLE_IDLE_TIME;
import static org.infinispan.persistence.remote.configuration.ConnectionPoolConfiguration.MIN_IDLE;
import static org.infinispan.persistence.remote.configuration.ConnectionPoolConfiguration.TEST_WHILE_IDLE;
import static org.infinispan.persistence.remote.configuration.ConnectionPoolConfiguration.TIME_BETWEEN_EVICTION_RUNS;
import org.infinispan.commons.configuration.Builder;
import org.infinispan.configuration.global.GlobalConfiguration;
/**
* ConnectionPoolConfigurationBuilder. Specifies connection pooling properties for the HotRod client.
*
* @author Tristan Tarrant
* @since 5.2
*/
public class ConnectionPoolConfigurationBuilder extends AbstractRemoteStoreConfigurationChildBuilder<RemoteStoreConfigurationBuilder> implements
Builder<ConnectionPoolConfiguration> {
ConnectionPoolConfigurationBuilder(RemoteStoreConfigurationBuilder builder) {
super(builder, ConnectionPoolConfiguration.attributeDefinitionSet());
}
/**
* Specifies what happens when asking for a connection from a server's pool, and that pool is
* exhausted.
*/
public ConnectionPoolConfigurationBuilder exhaustedAction(ExhaustedAction exhaustedAction) {
this.attributes.attribute(EXHAUSTED_ACTION).set(exhaustedAction);
return this;
}
/**
* Controls the maximum number of connections per server that are allocated (checked out to
* client threads, or idle in the pool) at one time. When non-positive, there is no limit to the
* number of connections per server. When maxActive is reached, the connection pool for that
* server is said to be exhausted. The default setting for this parameter is -1, i.e. there is no
* limit.
*/
public ConnectionPoolConfigurationBuilder maxActive(int maxActive) {
this.attributes.attribute(MAX_ACTIVE).set(maxActive);
return this;
}
/**
* Sets a global limit on the number persistent connections that can be in circulation within the
* combined set of servers. When non-positive, there is no limit to the total number of
* persistent connections in circulation. When maxTotal is exceeded, all connections pools are
* exhausted. The default setting for this parameter is -1 (no limit).
*/
public ConnectionPoolConfigurationBuilder maxTotal(int maxTotal) {
this.attributes.attribute(MAX_TOTAL).set(maxTotal);
return this;
}
/**
* Controls the maximum number of idle persistent connections, per server, at any time. When
* negative, there is no limit to the number of connections that may be idle per server. The
* default setting for this parameter is -1.
*/
public ConnectionPoolConfigurationBuilder maxIdle(int maxIdle) {
this.attributes.attribute(MAX_IDLE).set(maxIdle);
return this;
}
/**
* Sets a target value for the minimum number of idle connections (per server) that should always
* be available. If this parameter is set to a positive number and timeBetweenEvictionRunsMillis
* > 0, each time the idle connection eviction thread runs, it will try to create enough idle
* instances so that there will be minIdle idle instances available for each server. The default
* setting for this parameter is 1.
*/
public ConnectionPoolConfigurationBuilder minIdle(int minIdle) {
this.attributes.attribute(MIN_IDLE).set(minIdle);
return this;
}
/**
* Indicates how long the eviction thread should sleep before "runs" of examining idle
* connections. When non-positive, no eviction thread will be launched. The default setting for
* this parameter is 2 minutes.
*/
public ConnectionPoolConfigurationBuilder timeBetweenEvictionRuns(long timeBetweenEvictionRuns) {
this.attributes.attribute(TIME_BETWEEN_EVICTION_RUNS).set(timeBetweenEvictionRuns);
return this;
}
/**
* Specifies the minimum amount of time that an connection may sit idle in the pool before it is
* eligible for eviction due to idle time. When non-positive, no connection will be dropped from
* the pool due to idle time alone. This setting has no effect unless
* timeBetweenEvictionRunsMillis > 0. The default setting for this parameter is 1800000(30
* minutes).
*/
public ConnectionPoolConfigurationBuilder minEvictableIdleTime(long minEvictableIdleTime) {
this.attributes.attribute(MIN_EVICTABLE_IDLE_TIME).set(minEvictableIdleTime);
return this;
}
/**
* Indicates whether or not idle connections should be validated by sending an TCP packet to the
* server, during idle connection eviction runs. Connections that fail to validate will be
* dropped from the pool. This setting has no effect unless timeBetweenEvictionRunsMillis > 0.
* The default setting for this parameter is true.
*/
public ConnectionPoolConfigurationBuilder testWhileIdle(boolean testWhileIdle) {
this.attributes.attribute(TEST_WHILE_IDLE).set(testWhileIdle);
return this;
}
@Override
public void validate() {
}
@Override
public void validate(GlobalConfiguration globalConfig) {
}
@Override
public ConnectionPoolConfiguration create() {
return new ConnectionPoolConfiguration(attributes.protect());
}
@Override
public ConnectionPoolConfigurationBuilder read(ConnectionPoolConfiguration template) {
this.attributes.read(template.attributes());
return this;
}
}