-
Notifications
You must be signed in to change notification settings - Fork 4.7k
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
[release/6.0-staging] Send connection WINDOW_UPDATE before RTT PING #98385
[release/6.0-staging] Send connection WINDOW_UPDATE before RTT PING #98385
Conversation
…med_ResetsStreamAndThrowsOnRequestStreamWriteAndResponseStreamRead...
Tagging subscribers to this area: @dotnet/ncl Issue DetailsBackport of #97881 to release/6.0-staging /cc @antonfirsov Customer Impact
[Select one or both of the boxes. Describe how this issue impacts customers, citing the expected and actual behaviors and scope of the issue. If customer-reported, provide the issue number.] Regression
[If yes, specify when the regression was introduced. Provide the PR or commit if known.] Testing[How was the fix verified? How was the issue missed previously? What tests were added?] Risk[High/Medium/Low. Justify the indication by mentioning how risks were measured and addressed.] IMPORTANT: If this backport is for a servicing release, please verify that:
|
/azp run runtime-libraries-coreclr outerloop |
Azure Pipelines successfully started running 1 pipeline(s). |
Friendly reminder that Monday March 11th is the Code Complete date for the April Release. Please make sure to get a Tactics approval and merge this before that date. |
We are not backporting this to .NET 6 since EOL is close. |
Backport of #97881 to release/6.0-staging
Fixes #97131
Customer Impact
Problem: gRPC server-streaming connections may be closed by server when communicating with service on GCP behind Google Cloud L7 External Load Balancer. It depends on size and frequency of gRPC messages.
Reported by customers in grpc/grpc-dotnet#2361 and grpc/grpc-dotnet#2358
gRPC is built on top of HTTP/2 protocol. In 'HttpClient' we use PING frames to measure RTT (Round-Trip Time) to leverage connections efficiently. Our usage of PING frames triggers DoS protection in Google Cloud L7 External Load Balancer and they close the connection from the server side. They are unwilling to change their implementation.
We worked with them to design ordering of frames mixed with WINDOW_UPDATE frames in a way that will avoid triggering their DoS protection and will allow us to measure RTT.
Regression
No. The behavior is specific to Google Cloud L7 External Load Balancer.
Testing
Risk
Low-Medium
We are now sending higher volume of
WINDOW_UPDATE
frames. In theory, some servers might have problem with that. Mitigations:System.Net.SocketsHttpHandler.Http2FlowControl.DisableDynamicWindowSizing
WINDOW_UPDATE
frames.