Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,24 +48,27 @@ public class ConnectionConfig implements Cloneable {

private final Timeout connectTimeout;
private final Timeout socketTimeout;
private final Timeout idleTimeout;
private final TimeValue validateAfterInactivity;
private final TimeValue timeToLive;

/**
* Intended for CDI compatibility
*/
protected ConnectionConfig() {
this(DEFAULT_CONNECT_TIMEOUT, null, null, null);
this(DEFAULT_CONNECT_TIMEOUT, null, null, null, null);
}

ConnectionConfig(
final Timeout connectTimeout,
final Timeout socketTimeout,
final Timeout idleTimeout,
final TimeValue validateAfterInactivity,
final TimeValue timeToLive) {
super();
this.connectTimeout = connectTimeout;
this.socketTimeout = socketTimeout;
this.idleTimeout = idleTimeout;
this.validateAfterInactivity = validateAfterInactivity;
this.timeToLive = timeToLive;
}
Expand All @@ -84,6 +87,13 @@ public Timeout getConnectTimeout() {
return connectTimeout;
}

/**
* @see Builder#setIdleTimeout(Timeout)
*/
public Timeout getIdleTimeout() {
return idleTimeout;
}

/**
* @see Builder#setValidateAfterInactivity(TimeValue)
*/
Expand All @@ -109,6 +119,7 @@ public String toString() {
builder.append("[");
builder.append("connectTimeout=").append(connectTimeout);
builder.append(", socketTimeout=").append(socketTimeout);
builder.append(", idleTimeout=").append(idleTimeout);
builder.append(", validateAfterInactivity=").append(validateAfterInactivity);
builder.append(", timeToLive=").append(timeToLive);
builder.append("]");
Expand All @@ -131,6 +142,7 @@ public static class Builder {

private Timeout socketTimeout;
private Timeout connectTimeout;
private Timeout idleTimeout;
private TimeValue validateAfterInactivity;
private TimeValue timeToLive;

Expand Down Expand Up @@ -194,6 +206,35 @@ public Builder setConnectTimeout(final long connectTimeout, final TimeUnit timeU
return this;
}

/**
* Determines the maximum period of idleness for a connection.
* Connections that are idle for longer than {@code idleTimeout} are no
* longer eligible for reuse.
* <p>
* A timeout value of zero is interpreted as an infinite timeout.
* </p>
* <p>
* Default: {@code null} (undefined)
* </p>
*
* @return this instance.
*
* @since 5.6
*/
public Builder setIdleTimeout(final Timeout idleTimeout) {
this.idleTimeout = idleTimeout;
return this;
}

/**
* @return this instance.
* @see #setIdleTimeout(Timeout)
*/
public Builder setIdleTimeout(final long idleTimeout, final TimeUnit timeUnit) {
this.idleTimeout = Timeout.of(idleTimeout, timeUnit);
return this;
}

/**
* Defines period of inactivity after which persistent connections must
* be re-validated prior to being leased to the consumer. Negative values passed
Expand Down Expand Up @@ -244,6 +285,7 @@ public ConnectionConfig build() {
return new ConnectionConfig(
connectTimeout != null ? connectTimeout : DEFAULT_CONNECT_TIMEOUT,
socketTimeout,
idleTimeout,
validateAfterInactivity,
timeToLive);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,14 @@ public ConnectionEndpoint get(
}
}
}
if (poolEntry.hasConnection()) {
final TimeValue idleTimeout = connectionConfig.getIdleTimeout();
if (TimeValue.isPositive(idleTimeout)) {
if (Deadline.calculate(poolEntry.getUpdated(), idleTimeout).isExpired()) {
poolEntry.discardConnection(CloseMode.GRACEFUL);
}
}
}
if (poolEntry.hasConnection()) {
final TimeValue timeValue = resolveValidateAfterInactivity(connectionConfig);
if (TimeValue.isNonNegative(timeValue)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,14 @@ public void completed(final PoolEntry<HttpRoute, ManagedAsyncClientConnection> p
}
}
}
if (poolEntry.hasConnection()) {
final TimeValue idleTimeout = connectionConfig.getIdleTimeout();
if (TimeValue.isPositive(idleTimeout)) {
if (Deadline.calculate(poolEntry.getUpdated(), idleTimeout).isExpired()) {
poolEntry.discardConnection(CloseMode.GRACEFUL);
}
}
}
if (poolEntry.hasConnection()) {
final ManagedAsyncClientConnection connection = poolEntry.getConnection();
final TimeValue timeValue = connectionConfig.getValidateAfterInactivity();
Expand Down
Loading