Resource Leak When Using S3Client.getObject() with ResponseTransformer.toInputStream()
- 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
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