Skip to content
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

gRPC Client creates new streams even after receiving GOAWAY frames #19969

Closed
yashykt opened this issue Aug 15, 2019 · 0 comments · Fixed by #19968
Closed

gRPC Client creates new streams even after receiving GOAWAY frames #19969

yashykt opened this issue Aug 15, 2019 · 0 comments · Fixed by #19968

Comments

@yashykt
Copy link
Member

yashykt commented Aug 15, 2019

There is a race within gRPC where the following events can happen -

  1. Client starts a new RPC on a connected channel.
  2. Client channel routes the RPC to the connected channel during the pick.
  3. Client transport receives a GOAWAY frame from the server, and marks the channel to be in TRANSIENT_FAILURE.
  4. Since we have already picked the connected channel, the client transport tries to create a new stream.

The HTTP2 spec says that clients should not start new streams if a GOAWAY has already been received. Also, if the GOAWAY frame mentioned a last_stream_id, the server is free to ignore/discard frames from the new stream. This means that the client will keep waiting for a response from the server till the deadline exceeds, even though we know that a GOAWAY has already been received.

@yashykt yashykt self-assigned this Aug 15, 2019
@lock lock bot locked as resolved and limited conversation to collaborators Nov 14, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant