From b4d2a000f902d6cb668f8960bdbf37c9c742b0f8 Mon Sep 17 00:00:00 2001 From: Zoe Wang <33073555+zoewangg@users.noreply.github.com> Date: Fri, 9 Jun 2023 11:16:59 -0700 Subject: [PATCH 1/2] Use WeakHashMap in IdleConenctionReaper to not prevent connection manager from getting GC'd --- .changes/next-release/feature-AWSSDKforJavav2-15df2d6.json | 6 ++++++ .../http/apache/internal/conn/IdleConnectionReaper.java | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 .changes/next-release/feature-AWSSDKforJavav2-15df2d6.json diff --git a/.changes/next-release/feature-AWSSDKforJavav2-15df2d6.json b/.changes/next-release/feature-AWSSDKforJavav2-15df2d6.json new file mode 100644 index 000000000000..7eda3cf3ed90 --- /dev/null +++ b/.changes/next-release/feature-AWSSDKforJavav2-15df2d6.json @@ -0,0 +1,6 @@ +{ + "type": "feature", + "category": "AWS SDK for Java v2", + "contributor": "", + "description": "`IdleConnectionReaper` now does not prevent `HttpClientConnectionManager` from getting GC'd in the case where an SDK client is created per request and not closed." +} diff --git a/http-clients/apache-client/src/main/java/software/amazon/awssdk/http/apache/internal/conn/IdleConnectionReaper.java b/http-clients/apache-client/src/main/java/software/amazon/awssdk/http/apache/internal/conn/IdleConnectionReaper.java index c40d7671f86d..51b6055712d7 100644 --- a/http-clients/apache-client/src/main/java/software/amazon/awssdk/http/apache/internal/conn/IdleConnectionReaper.java +++ b/http-clients/apache-client/src/main/java/software/amazon/awssdk/http/apache/internal/conn/IdleConnectionReaper.java @@ -16,7 +16,9 @@ package software.amazon.awssdk.http.apache.internal.conn; import java.time.Duration; +import java.util.Collections; import java.util.Map; +import java.util.WeakHashMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -48,7 +50,7 @@ public final class IdleConnectionReaper { private volatile ReaperTask reaperTask; private IdleConnectionReaper() { - this.connectionManagers = new ConcurrentHashMap<>(); + this.connectionManagers = Collections.synchronizedMap(new WeakHashMap<>()); this.executorServiceSupplier = () -> { ExecutorService e = Executors.newSingleThreadExecutor(r -> { From 60ccd300fe4dd4bfcaf3ea6e1b0f6d3bebea7c74 Mon Sep 17 00:00:00 2001 From: Zoe Wang <33073555+zoewangg@users.noreply.github.com> Date: Fri, 9 Jun 2023 14:05:36 -0700 Subject: [PATCH 2/2] Checkstyle fix --- .../awssdk/http/apache/internal/conn/IdleConnectionReaper.java | 1 - 1 file changed, 1 deletion(-) diff --git a/http-clients/apache-client/src/main/java/software/amazon/awssdk/http/apache/internal/conn/IdleConnectionReaper.java b/http-clients/apache-client/src/main/java/software/amazon/awssdk/http/apache/internal/conn/IdleConnectionReaper.java index 51b6055712d7..af46691e5a19 100644 --- a/http-clients/apache-client/src/main/java/software/amazon/awssdk/http/apache/internal/conn/IdleConnectionReaper.java +++ b/http-clients/apache-client/src/main/java/software/amazon/awssdk/http/apache/internal/conn/IdleConnectionReaper.java @@ -19,7 +19,6 @@ import java.util.Collections; import java.util.Map; import java.util.WeakHashMap; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit;