aws-sdk-java-v2 icon indicating copy to clipboard operation
aws-sdk-java-v2 copied to clipboard

Fix request cancellation issue in the AWS CRT-based S3 client that co…

Open zoewangg opened this issue 1 year ago • 1 comments

…uld lead to memory leak

Motivation and Context

Currently, if a request is cancelled in AWS CRT-based S3 client, CRT resource will not be cancelled and cleaned up properly, leaking to memory leak.

The root cause is that we are calling S3MetaRequest.close() before S3MetaRequest.cancel().

Modifications

  • Updated the code to invoke cancel before close.
  • Created S3MetaRequestWrapper class to make sure we don't invoke S3MetaRequest if it's closed. All interactions with S3MetaRequest must be through S3MetaRequestWrapper going forward.
  • Added checkstyle rule to make sure S3MetaRequestWrapper is used instead of S3MetaRequest.

Testing

Tested it locally and added new functional tests.

Screenshots (if appropriate)

Types of changes

  • [ ] Bug fix (non-breaking change which fixes an issue)
  • [ ] New feature (non-breaking change which adds functionality)

Checklist

  • [ ] I have read the CONTRIBUTING document
  • [ ] Local run of mvn install succeeds
  • [ ] My code follows the code style of this project
  • [ ] My change requires a change to the Javadoc documentation
  • [ ] I have updated the Javadoc documentation accordingly
  • [ ] I have added tests to cover my changes
  • [ ] All new and existing tests passed
  • [ ] I have added a changelog entry. Adding a new entry must be accomplished by running the scripts/new-change script and following the instructions. Commit the new file created by the script in .changes/next-release with your changes.
  • [ ] My change is to implement 1.11 parity feature and I have updated LaunchChangelog

License

  • [x] I confirm that this pull request can be released under the Apache 2 license

zoewangg avatar Feb 21 '24 22:02 zoewangg