Skip to content

Commit 53d9d93

Browse files
committed
Close S3 lifecycle leaks of AWS classes
1 parent a41bba5 commit 53d9d93

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

src/main/java/edu/harvard/iq/dataverse/dataaccess/S3AccessIO.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1555,4 +1555,16 @@ public static String getNewIdentifier(String driverId) {
15551555
return driverId + DataAccess.SEPARATOR + getConfigParamForDriver(driverId, BUCKET_NAME) + ":"
15561556
+ FileUtil.generateStorageIdentifier();
15571557
}
1558+
1559+
public static void closeAll() {
1560+
logger.info("Closing all S3 clients and transfer managers.");
1561+
driverTMMap.values().forEach(S3TransferManager::close);
1562+
driverTMMap.clear();
1563+
driverClientMap.values().forEach(S3AsyncClient::close);
1564+
driverClientMap.clear();
1565+
driverPresignerMap.values().forEach(S3Presigner::close);
1566+
driverPresignerMap.clear();
1567+
// AwsCredentialsProvider does not need to be closed unless it's a specific implementation that requires it.
1568+
driverCredentialsProviderMap.clear();
1569+
}
15581570
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package edu.harvard.iq.dataverse.dataaccess;
2+
3+
import jakarta.annotation.PreDestroy;
4+
import jakarta.ejb.Singleton;
5+
import jakarta.ejb.Startup;
6+
7+
@Singleton
8+
@Startup
9+
public class S3LifecycleBean {
10+
11+
@PreDestroy
12+
public void cleanup() {
13+
S3AccessIO.closeAll();
14+
}
15+
}

0 commit comments

Comments
 (0)