Skip to content

Fix fd remaining open longer than necessary #2616

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

dagnir
Copy link
Contributor

@dagnir dagnir commented Jul 22, 2021

Motivation and Context

In FileAsyncRequestBody, the file was not being closed until a request()
read past the end of the file without ready any bytes; i.e. if a read()
call reads up to the end of the file, it would not complete the
subscription on the subsequent request() signal. This fixes this issue
by signaling complete if we know we've reached the end.

Description

This PR fixes the behavior by tracking how much of the file is has been read, closing the file as soon as we've read it entirely.

Testing

New tests, ran integ 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 read the README document
  • I have added tests to cover my changes
  • All new and existing tests passed
  • A short description of the change has been added to the CHANGELOG
  • My change is to implement 1.11 parity feature and I have updated LaunchChangelog

License

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

@dagnir dagnir force-pushed the file-publisher-fd-fix branch 3 times, most recently from d505415 to 12c4559 Compare July 22, 2021 00:10
Copy link
Contributor

@zoewangg zoewangg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we run stability tests job?

@dagnir
Copy link
Contributor Author

dagnir commented Jul 22, 2021

Integ tests failure looks unrelated (issue with S3 buckets). Will clean up and rerun

@dagnir
Copy link
Contributor Author

dagnir commented Jul 22, 2021

Can we run stability tests job?

Done

In FileAsyncRequestBody, the file was not being closed until a request()
read past the end of the file without ready any bytes; i.e. if a read()
call reads up to the end of the file, it would not complete the
subscription on the subsequent request() signal. This fixes this issue
by signaling complete if we know we've reached the end.
@dagnir dagnir force-pushed the file-publisher-fd-fix branch from 4bf5c4d to a39f2fb Compare July 22, 2021 18:21
@sonarqubecloud
Copy link

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

90.5% 90.5% Coverage
0.0% 0.0% Duplication

@dagnir dagnir merged commit 911e9ef into aws:feature/master/transfermanager Jul 22, 2021
@dagnir dagnir deleted the file-publisher-fd-fix branch July 22, 2021 19:28
zoewangg added a commit that referenced this pull request Aug 10, 2021
* Add download implementation for API requests

* Add S3CrtAsyncClient skeleton

* Add support for adapting the sdk configurations to crt configurations.

* Implement getObject in S3CrtAsyncClient

* Implement S3 CRT upload

* Fix checkstyle errors, add stability tests

* Upgrade crt to 0.11.5

* Update APIs

* Fix CRT S3 Client builder

 - Return the correct type from builder methods
 - Make max throughput and part size nullable

* Implement S3TransferManager#upload

* Implement TransferManager download and add s3-benchmarks module

* Move s3 crt related classes to s3-transfermanager

* Add requestLogger and requestIdLogger

* Various fixes and refactoring

* Add user-agent header in transfer manager

* Refactor UserAgentUtils and make it a protected API

* Fix sdk-benchmarks version

* Rename module and package for transfermanager

* Fix stability tests to not create a new client per request

* Various renaming

* Remove the option to pass bucket and key to DownloadRequest and UploadRequest and remove unused files

* Add README for S3TransferManager

* Add validation in S3ClientConfiguration

* Fix CRT/SDK POJO conversion and add more tests

* Update to use CRT DelegateCredentialsProvider

* Provide HTTP request-level data to PutObjectResponse

* Update Javadocs

* Fix the race condition in the FileAsyncRequestBody which causes the request to hang

* Add request cancellation logic and tests

* Fixed an issue where the future gets stuck when upload fails

* Offload completion of execution future to a separate thread

* Wrap CrtS3RuntimeException to SdkServiceException

* Revert "Wrap CrtS3RuntimeException to SdkServiceException"

* Update s3 crt client tests to verify resources are closed properly

* Wrap CrtS3RuntimeException to S3ServiceException

* Update version

* Bump up CRT version, clean up resources in tests, fix credential adapter TODO (#2594)

* Remove buffer copy since it's no longer needed (#2611)

* Fix fd remaining open longer than necessary (#2616)

In FileAsyncRequestBody, the file was not being closed until a request()
read past the end of the file without ready any bytes; i.e. if a read()
call reads up to the end of the file, it would not complete the
subscription on the subsequent request() signal. This fixes this issue
by signaling complete if we know we've reached the end.

* Cancel sub on finish and exception (#2619)

* Bump up crt version (#2640)

Bump up crt version

* Fix merge conflict

* Merge 'origin/master' into transfer manager branch (#2647)

Co-authored-by: Quanzzzz <[email protected]>
Co-authored-by: John Viegas <[email protected]>
Co-authored-by: Dongie Agnir <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants