PDJB-NONE: Inject singleton S3Presigner to fix native memory leak#1341
Open
Travis-Softwire wants to merge 1 commit into
Open
PDJB-NONE: Inject singleton S3Presigner to fix native memory leak#1341Travis-Softwire wants to merge 1 commit into
Travis-Softwire wants to merge 1 commit into
Conversation
2 tasks
JasminConterioSW
approved these changes
May 18, 2026
Contributor
JasminConterioSW
left a comment
There was a problem hiding this comment.
Sounds plausible 🤞
Contributor
|
out of interest, what documents that injecting |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ticket number
PDJB-NONE
Goal of change
Stop
AwsS3FileDownloaderleaking native memory by reusing a singleS3Presignerinstead of constructing a new one per request.Description of main change(s)
AwsS3FileDownloadernow injects the singletonS3Presignerauto-configured byspring-cloud-aws-starter-s3, instead of callingS3Presigner.create()on everygetDownloadUrlcall.ByteBuffers. Creating one per call (and never closing it) leaked off-heap memory until ECS killed the task for exceeding its container memory limit. Reusing a single thread-safe instance removes the leak and matches the pattern already used forS3Client/S3TransferManagerin the otherAwsS3*services.Anything you'd like to highlight to the reviewer?
AwsS3*services (AwsS3FileUploader,AwsS3SafeFileDeleter,AwsS3QuarantinedFileDeleter,AwsS3DequarantiningFileCopier) were checked and already inject singleton SDK clients - no change needed there.-XX:NativeMemoryTracking=summary,-XX:MaxDirectMemorySize,-XX:+HeapDumpOnOutOfMemoryError, a sensible-XX:MaxRAMPercentage) so the next native-memory incident is debuggable rather than just an ECS kill. Those flags live in the deployment infra repo, not here.Checklist
AwsS3FileDownloaderhas no existing tests