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

GOAWAY initiating a graceful shutdown can carry a huge stream ID #3343

Merged
merged 7 commits into from Jan 17, 2020
23 changes: 13 additions & 10 deletions draft-ietf-quic-http.md
Expand Up @@ -725,16 +725,19 @@ A client that is unable to retry requests loses all requests that are in flight
when the server closes the connection. A server MAY send multiple GOAWAY frames
indicating different stream IDs, but MUST NOT increase the value they send in
the last Stream ID, since clients might already have retried unprocessed
requests on another connection. A server that is attempting to gracefully shut
down a connection SHOULD send an initial GOAWAY frame with the last Stream ID
set to the maximum value allowed by the concurrency control of QUIC for the
client-initiated, bidirectional streams (see Section 4.5 of {{QUIC-TRANSPORT}})
or any value above that, and SHOULD NOT grant any more concurrency credit at the
transport layer thereafter. This signals to the client that a shutdown is
imminent and that initiating further requests is prohibited. After allowing
time for any in-flight requests (at least one round-trip time), the server MAY
send another GOAWAY frame with an updated last Stream ID. This ensures that a
connection can be cleanly shut down without causing requests to fail.
requests on another connection.

A server that is attempting to gracefully shut down a connection SHOULD send an
initial GOAWAY frame with the last Stream ID set to the maximum value currently
allowed by the concurrency control of QUIC for the client-initiated,
bidirectional streams (see Section 4.5 of {{QUIC-TRANSPORT}}) or any value above
that. This GOAWAY frame signals to the client that shutdown is imminent and
that initiating further requests is prohibited. In addition to sending this
GOAWAY frame, the server SHOULD stop granting additional concurrency credits at
the transport layer. After allowing time for any in-flight requests (at least
one round-trip time), the server MAY send another GOAWAY frame with an updated
last Stream ID. This ensures that a connection can be cleanly shut down without
causing requests to fail.

Once all accepted requests have been processed, the server can permit the
connection to become idle, or MAY initiate an immediate closure of the
Expand Down