@@ -57,6 +57,7 @@ public class ConnectionConfig implements Cloneable {
5757
5858 private final Timeout connectTimeout ;
5959 private final Timeout socketTimeout ;
60+ private final Timeout idleTimeout ;
6061 private final TimeValue validateAfterInactivity ;
6162 private final TimeValue timeToLive ;
6263
@@ -81,12 +82,13 @@ public class ConnectionConfig implements Cloneable {
8182 * Intended for CDI compatibility
8283 */
8384 protected ConnectionConfig () {
84- this (DEFAULT_CONNECT_TIMEOUT , null , null , null , false , DEFAULT_HE_ATTEMPT_DELAY , DEFAULT_HE_OTHER_FAMILY_DELAY , ProtocolFamilyPreference .INTERLEAVE );
85+ this (DEFAULT_CONNECT_TIMEOUT , null , null , null , null , false , DEFAULT_HE_ATTEMPT_DELAY , DEFAULT_HE_OTHER_FAMILY_DELAY , ProtocolFamilyPreference .INTERLEAVE );
8586 }
8687
8788 ConnectionConfig (
8889 final Timeout connectTimeout ,
8990 final Timeout socketTimeout ,
91+ final Timeout idleTimeout ,
9092 final TimeValue validateAfterInactivity ,
9193 final TimeValue timeToLive ,
9294 final boolean staggeredConnectEnabled ,
@@ -96,6 +98,7 @@ protected ConnectionConfig() {
9698 super ();
9799 this .connectTimeout = connectTimeout ;
98100 this .socketTimeout = socketTimeout ;
101+ this .idleTimeout = idleTimeout ;
99102 this .validateAfterInactivity = validateAfterInactivity ;
100103 this .timeToLive = timeToLive ;
101104 this .staggeredConnectEnabled = staggeredConnectEnabled ;
@@ -118,6 +121,13 @@ public Timeout getConnectTimeout() {
118121 return connectTimeout ;
119122 }
120123
124+ /**
125+ * @see Builder#setIdleTimeout(Timeout)
126+ */
127+ public Timeout getIdleTimeout () {
128+ return idleTimeout ;
129+ }
130+
121131 /**
122132 * @see Builder#setValidateAfterInactivity(TimeValue)
123133 */
@@ -183,6 +193,7 @@ public String toString() {
183193 builder .append ("[" );
184194 builder .append ("connectTimeout=" ).append (connectTimeout );
185195 builder .append (", socketTimeout=" ).append (socketTimeout );
196+ builder .append (", idleTimeout=" ).append (idleTimeout );
186197 builder .append (", validateAfterInactivity=" ).append (validateAfterInactivity );
187198 builder .append (", timeToLive=" ).append (timeToLive );
188199 builder .append (", staggeredConnectEnabled=" ).append (staggeredConnectEnabled );
@@ -213,6 +224,7 @@ public static class Builder {
213224
214225 private Timeout socketTimeout ;
215226 private Timeout connectTimeout ;
227+ private Timeout idleTimeout ;
216228 private TimeValue validateAfterInactivity ;
217229 private TimeValue timeToLive ;
218230
@@ -237,7 +249,15 @@ public Builder setSocketTimeout(final int soTimeout, final TimeUnit timeUnit) {
237249 }
238250
239251 /**
240- * Determines the default socket timeout value for I/O operations.
252+ * Determines the default socket timeout value for I/O operations on
253+ * connections created by this configuration.
254+ * A timeout value of zero is interpreted as an infinite timeout.
255+ * <p>
256+ * This value acts as a baseline at the connection management layer.
257+ * This parameter overrides the socket timeout setting applied at the I/O layer
258+ * and in its tuen can overridden by settings applied at the protocol layer
259+ * for the duration of a message exchange.
260+ * </p>
241261 * <p>
242262 * Default: {@code null} (undefined)
243263 * </p>
@@ -274,6 +294,35 @@ public Builder setConnectTimeout(final long connectTimeout, final TimeUnit timeU
274294 return this ;
275295 }
276296
297+ /**
298+ * Determines the maximum period of idleness for a connection.
299+ * Connections that are idle for longer than {@code idleTimeout} are no
300+ * longer eligible for reuse.
301+ * <p>
302+ * A timeout value of zero is interpreted as an infinite timeout.
303+ * </p>
304+ * <p>
305+ * Default: {@code null} (undefined)
306+ * </p>
307+ *
308+ * @return this instance.
309+ *
310+ * @since 5.6
311+ */
312+ public Builder setIdleTimeout (final Timeout idleTimeout ) {
313+ this .idleTimeout = idleTimeout ;
314+ return this ;
315+ }
316+
317+ /**
318+ * @return this instance.
319+ * @see #setIdleTimeout(Timeout)
320+ */
321+ public Builder setIdleTimeout (final long idleTimeout , final TimeUnit timeUnit ) {
322+ this .idleTimeout = Timeout .of (idleTimeout , timeUnit );
323+ return this ;
324+ }
325+
277326 /**
278327 * Defines period of inactivity after which persistent connections must
279328 * be re-validated prior to being leased to the consumer. Negative values passed
@@ -369,6 +418,7 @@ public ConnectionConfig build() {
369418 return new ConnectionConfig (
370419 connectTimeout != null ? connectTimeout : DEFAULT_CONNECT_TIMEOUT ,
371420 socketTimeout ,
421+ idleTimeout ,
372422 validateAfterInactivity ,
373423 timeToLive ,
374424 staggeredConnectEnabled ,
0 commit comments