aws / aws/aws-sdk-java-v2

Resource Leak When Using S3Client.getObject() with ResponseTransformer.toInputStream()

Offen
#6,567 5 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug p2
Vorherrschende Sprache
Java
Sterne
2.6k
Forks
1k
Ø Merge
2 T. 9 Std.
Gemergte PRs (30 T.)
51

Beschreibung

### Describe the bug

A resource leak is observed when retrieving an Amazon S3 object as a stream using `S3Client.getObject()` with `ResponseTransformer.toInputStream()`. This leak occurs despite using both `try-with-resources` for automatic resource management and manual calls to `close()` on the `InputStream`.

**Thread dump observation:**
The thread `response-input-stream-timeout-scheduler` is visible in the dump.

### Regression Issue

- [ ] Select this option if this issue appears to be a regression.

### Expected Behavior

When the `ResponseInputStream` returned by `s3Client.getObject(..., ResponseTransformer.toInputStream())` is closed, all associated resources should be released and closed.

### Current Behavior

The thread `response-input-stream-timeout-scheduler` is visible in the dump preventing the module to perform a clean and graceful shutdown.

### Reproduction Steps

**Code Snippet:**
```
import org.apache.commons.io.IOUtils;

try (InputStream inputStream = s3Client.getObject(getObjectRequest, ResponseTransformer.toInputStream())) {
return IOUtils.toString(inputStream, StandardCharsets.UTF_8);
}
```

### Possible Solution

_No response_

### Additional Information/Context

As a workaround, `s3Client.getObject(getObjectRequest, ResponseTransformer.toBytes()).asByteArray();` was used to eliminate stream management.

### AWS Java SDK version used

2.33.4

### JDK version used

JDK17

### Operating System and version

Linux

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne damit, das Leak mit S3Client.getObject() und ResponseTransformer.toInputStream() unter JDK 17 zu reproduzieren, und untersuche anschließend den zurückgegebenen ResponseInputStream und den Thread response-input-stream-timeout-scheduler. Überprüfe, dass das Schließen des Streams den Scheduler freigibt und ein sauberes Herunterfahren des SDK ermöglicht; vergleiche das Verhalten mit dem Workaround toBytes().

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
aws, java
Bereich
backend, cloud
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.