Do not discard remaining data when cancelling h2c upgrade [Fixes #4643] #6300
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.
#4643 is caused by removing the HttpServerCodec from the pipeline when there is no upgrade request.
In normal operation, the
getHandlerForProtocol(HTTP_1_1)
will return a new HttpServerCodec that takes over decoding. However, when the request is processed, the old HttpServerCodec may not yet have completed reading all data, and removing it causes that data to be lost.This fix instead reuses the existing HttpServerCodec. We also have to carefully place the other relevant handlers around it in the pipeline. It would be more convenient if we could simply remove it and then readd it, but netty does not support that unfortunately.