gRPC Trailers-Only response doesn't mark a streaming request as finished #2313
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:
If server returns a
Trailers-Only
response for a streaming request, wenever drain the response message-body, because
concat
never subscribesto the next source if the first source fails. As the result, concurrency
controller won't mark the request as finished. If the request publisher
never completes we will start leaking h2 connections because streams
won’t be closed.
Modifications:
TrailersOnlyErrorTest
to cover blocking client and make surethe HTTP response terminates;
Trailers-Only
response, subscribe and cancelthe response message body to abort the request;
Trailers-Only
response doesn't have any furtherframes on the wire;
Result:
gRPC response correctly terminates even if client receives a
Trailers-Only
response.