Subject: [quicwg/base-drafts] H3 GOAWAY guidance still refers to MAX_STREAM_ID (#2629)

From: Lucas Pardue <[email-masked]>
Date: Wed, 17 Apr 2019 14:09:20 +0000 (UTC)

So a while back @lnicco pointed out on #1717 that GOAWAY guidance wasn't great, and @MikeBishop fixed this with nice prose in #1712. This is presently located in https://tools.ietf.org/html/draft-ietf-quic-http-19#section-6.2

In the meantime, the transport has replaced `MAX_STREAM_ID` with `MAX_STREAMS`. The guidance for connection clousure is now a little stale and needs an update.

My one question is: if a server advertises `initial_max_streams_bidi` TP as 1, it processes one request on stream 0 and sends GOAWAY, is it expected that the GOAWAY contains a `stream_id` value of 4? NB: stream 4 was never a valid client-initiated bidirectional stream.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/2629

---

From: Lucas Pardue <[email-masked]>
Date: Wed, 17 Apr 2019 14:45:54 +0000 (UTC)

Also unless I'm missing it somewhere in the text, I don't see any guidance on sending multiple GOAWAY frames. I'd lean towards adding text similar to RFC 7540:

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/2629#issuecomment-484121296

---

From: Lucas Pardue <[email-masked]>
Date: Wed, 17 Apr 2019 08:19:22 -0700

I think there might also be an off-by-one problem. If you process a request on the last logical client-initiated bidirectional stream, what value should be sent in GOAWAY?

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/2629#issuecomment-484135766

---

From: afrind <[email-masked]>
Date: Wed, 17 Apr 2019 16:45:15 -0700

> My one question is: if a server advertises initial_max_streams_bidi TP as 1, it processes one request on stream 0 and sends GOAWAY, is it expected that the GOAWAY contains a stream_id value of 4? NB: stream 4 was never a valid client-initiated bidirectional stream.

My read is that you are supposed to send 4.  I don't think it matters that it was never a valid stream ID.

> I think there might also be an off-by-one problem. If you process a request on the last logical client-initiated bidirectional stream, what value should be sent in GOAWAY?

We discussed this some on the slack, but recording here.  If you process the last logical request on a connection (id=2^62 - 4), then you do not need to send a GOAWAY (in fact cannot, since what number would it have).  The client will automatically move to a new connection for new requests, and none of the existing requests can be retried, unless the server explicitly sends REJECTED.  Also, I strongly doubt this case will ever be hit in practice.  My back of the envelope math suggests it will take thousands of years at 1 million RPS to send this many (client initiated bidi) streams.

But the spec could probably use some text describing the edge case.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/2629#issuecomment-484302045

---

From: Dmitri Tikhonov <[email-masked]>
Date: Thu, 18 Apr 2019 13:30:42 -0700

> Also, I strongly doubt this case will ever be hit in practice. My back of the envelope math suggests it will take thousands of years at 1 million RPS to send this many (client initiated bidi) streams.

We should be consistent.  The drafts specify what to do when we run out of numbers in other places.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/2629#issuecomment-484679307

---

From: Mike Bishop <[email-masked]>
Date: Thu, 18 Apr 2019 14:06:41 -0700

And what happens here is covered by those -- the client cannot send any more requests.  If we add anything, I think it would simply be text stating that GOAWAY cannot be (and need not be) sent if all client-initiated bidirectional streams have been used.

And as Lucas noted initially, there's the lingering issue that the QUIC frame got renamed and HTTP hasn't updated.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/2629#issuecomment-484689841

---

From: Mike Bishop <[email-masked]>
Date: Tue, 23 Apr 2019 15:30:44 -0700

Closed #2629 via 4a5eea5c390b83b75422af3426f0869a8317e456.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/2629#event-2295541621