Fixed the issue where the SDK did not offload future completion #3034
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.
Motivation and Context
Fixed the issue where the SDK did not offload future completion to the future completion executor
RCA
Happy case workflow (Always complete on futureCompletionExecutor)
responseFuture
gets completed byfutureCompletionExecutor
after the future in theAsyncResponseHandler#prepare
gets completedaws-sdk-java-v2/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/http/pipeline/stages/MakeAsyncHttpRequestStage.java
Lines 210 to 216 in e4c4612
toReturn
future gets completed afterresponseFuture
gets completed. This will happen in thefutureCompletionExecutor
.aws-sdk-java-v2/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/http/pipeline/stages/MakeAsyncHttpRequestStage.java
Lines 103 to 108 in e4c4612
Error case workflow (Most of the time complete on futureCompletionExecutor)
responseFuture
gets completed exceptionally beforeresponseHandlerFuture
gets completed.aws-sdk-java-v2/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/http/pipeline/stages/MakeAsyncHttpRequestStage.java
Lines 158 to 160 in e4c4612
responseFuture
gets completed. This will happen in the event loop thread due to the use ofwhenComplete
.aws-sdk-java-v2/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/http/pipeline/stages/MakeAsyncHttpRequestStage.java
Lines 103 to 108 in e4c4612
Modifications
WrappedErrorForwardingResponseHandler
. I'm not sure why it's needed since we are relying onresponseHandlerFuture
to complete theresponseFuture
anyway.- Updated to offload the metrics reporting to futureCompletionExecutorTesting
Added unit tests
Screenshots (if appropriate)
Types of changes
Checklist
mvn install
succeedsscripts/new-change
script and following the instructions. Commit the new file created by the script in.changes/next-release
with your changes.License