From 421eaed2361e76756ecd3e3d6273e3f64924a293 Mon Sep 17 00:00:00 2001 From: Sanghwa Min Date: Tue, 26 Aug 2025 16:13:31 +0900 Subject: [PATCH] HTTPCLIENT-2388: fix builder default evictor sleepTime min 1 second --- .../hc/client5/http/impl/async/HttpAsyncClientBuilder.java | 7 ++++++- .../hc/client5/http/impl/classic/HttpClientBuilder.java | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpAsyncClientBuilder.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpAsyncClientBuilder.java index 028604744e..02914a6e7c 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpAsyncClientBuilder.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpAsyncClientBuilder.java @@ -37,6 +37,7 @@ import java.util.LinkedList; import java.util.List; import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.function.UnaryOperator; @@ -158,6 +159,8 @@ */ public class HttpAsyncClientBuilder { + private static final TimeValue ONE_SECOND = TimeValue.ofSeconds(1L); + private static class RequestInterceptorEntry { enum Position { FIRST, LAST } @@ -1094,8 +1097,10 @@ public CloseableHttpAsyncClient build() { } if (evictExpiredConnections || evictIdleConnections) { if (connManagerCopy instanceof ConnPoolControl) { + TimeValue sleepTime = maxIdleTime.divide(10, TimeUnit.NANOSECONDS); + sleepTime = sleepTime.compareTo(ONE_SECOND) < 0 ? ONE_SECOND : sleepTime; final IdleConnectionEvictor connectionEvictor = new IdleConnectionEvictor((ConnPoolControl) connManagerCopy, - maxIdleTime, maxIdleTime); + sleepTime, maxIdleTime); closeablesCopy.add(connectionEvictor::shutdown); connectionEvictor.start(); } diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/HttpClientBuilder.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/HttpClientBuilder.java index 9d17ff78d7..e065881535 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/HttpClientBuilder.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/HttpClientBuilder.java @@ -37,6 +37,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.function.UnaryOperator; @@ -145,6 +146,8 @@ */ public class HttpClientBuilder { + private static final TimeValue ONE_SECOND = TimeValue.ofSeconds(1L); + private static class RequestInterceptorEntry { enum Position { FIRST, LAST } @@ -1105,8 +1108,10 @@ public CloseableHttpClient build() { } if (evictExpiredConnections || evictIdleConnections) { if (connManagerCopy instanceof ConnPoolControl) { + TimeValue sleepTime = maxIdleTime.divide(10, TimeUnit.NANOSECONDS); + sleepTime = sleepTime.compareTo(ONE_SECOND) < 0 ? ONE_SECOND : sleepTime; final IdleConnectionEvictor connectionEvictor = new IdleConnectionEvictor((ConnPoolControl) connManagerCopy, - maxIdleTime, maxIdleTime); + sleepTime, maxIdleTime); closeablesCopy.add(() -> { connectionEvictor.shutdown(); try {