- From: Jana Iyengar <jri@google.com>
- Date: Wed, 9 Aug 2017 15:00:27 -0700
- To: Martin Thomson <martin.thomson@gmail.com>, Mike Bishop <Michael.Bishop@microsoft.com>
- Cc: Ian Swett <ianswett@google.com>, Kazuho Oku <kazuhooku@gmail.com>, QUIC WG <quic@ietf.org>, "ietf-http-wg@w3.org" <ietf-http-wg@w3.org>
- Message-ID: <CAGD1bZZa1+ZQfWtPetzqX0Spbu9pDkKA3v4G_i9Dug9oXLH4Sg@mail.gmail.com>
I think it's useful to avoid HoLB since the first request and the MAX_PUSH_ID frame may get reordered and/or the MAX_PUSH_ID frame may need retransmission. Push is already weak on benefits, so (without any evidence) I wonder whether any benefits due to it would be sensitive to this small variation. That said, this isn't a strong opinion, so I'm not going to argue for it. - jana On Wed, Aug 9, 2017 at 9:15 AM, Mike Bishop <Michael.Bishop@microsoft.com> wrote: > Agreed that the SETTINGS entry and the frame are the same 5-8 bytes > consumed, and it would be simpler to have a single code path. Since this > whole thing is a departure from HTTP/2, I’m not personally upset about > diverging a little further in the name of simpler code. This isn’t a value > that either party needs to know before sending traffic to behave properly, > which is the case with QUIC’s limits of this type that have the dual > parameter/frame structure. > > > > *From:* Martin Thomson [mailto:martin.thomson@gmail.com] > *Sent:* Tuesday, August 8, 2017 5:45 PM > *To:* Jana Iyengar <jri@google.com> > *Cc:* Ian Swett <ianswett@google.com>; Kazuho Oku <kazuhooku@gmail.com>; > QUIC WG <quic@ietf.org>; ietf-http-wg@w3.org; Mike Bishop < > Michael.Bishop@microsoft.com> > *Subject:* Re: Push ID - Merge Imminent > > > > Just to follow up on this, I've opened https://github.com/quicwg/ > base-drafts/pull/711 > <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fquicwg%2Fbase-drafts%2Fpull%2F711&data=02%7C01%7CMichael.Bishop%40microsoft.com%7Ce79ff894e53147e720b208d4debfe880%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636378363209427335&sdata=4Ln%2Fu8AIWLTpnKdEDysMC6D6LWhlec0j0ISFCjOWHuo%3D&reserved=0> > > > > It defines a new frame type that sets the limit to Push ID. In a fit of > inspiration, I called it MAX_PUSH_ID. > > > > I have repurposed SETTINGS_ENABLE_PUSH for setting the initial limit. The > newly renamed SETTINGS_MAX_PUSH_ID sets the initial MAX_PUSH_ID. > > > > I want to discuss whether we might remove the setting. Sending > MAX_PUSH_ID immediately after SETTINGS doesn't add any more bytes and I'm > not sure that there is any particular need to optimize for HoLB here. I'm > ambivalent, so I kept it, but it is easy to remove. > > > > > > On 5 August 2017 at 10:55, Jana Iyengar <jri@google.com> wrote: > > Martin, > > > > I think the idea of sequential Push ID is a good one. You have to specify > a MAX_PUSH_ID, without which the client won't know how far out to expect > CANCEL_PUSHes can be... this also requires then a MAX_PUSH_ID_UPDATE > message which can be used to move the MAX up. > > > > One note: > > > > PUSH_PROMISE is sent by the server, and CANCEL_PUSH may be sent by the > server. The text currently says that CANCEL_PUSH on a non-existent Push ID > results in error, which does not work with the possibility of reordering > between PUSH_PROMISE and CANCEL_PUSH. > > > > That's just a bug. > > > > I don't think so. The spec allows it, and I can easily see it happen in > practice. > > > > - jana > > > > > > Similarly, it's also possible for the PUSH_PROMISE to not have been > received because the stream on which it was sent was reset... basically > it's possible for a client to receive a CANCEL_PUSH without seeing the > corresponding PUSH_PROMISE. > > > > This is more interesting. It creates state on the client: it says that > clients are required to ignore pushes that it *might* receive in the > future. That suggests a different fix, akin to what we use for other > similar pieces of state: > > > > 1. make Push ID sequential (right now the only requirement is for > connection-wide uniqueness) > > > > I think that using a sequential ID will be a good idea not only for fixing > this issue but that it might be possible to use the sequentiality to fix > the first issue raised in the PR (i.e. client knowing "when the server will > stop referencing a push ID in PUSH_PROMISE"). > > > > If there is a sequential ordering guarantee for Push ID, a client can, by > looking at the Push ID, determine whether if it has already consumed the > pushed request. If it has, it will immediately lookup its cache, and in > case it fails to find a cached object, then issue a pull. If it has not > consumed the pushed request, it should wait for the pushed response to > arrive. > > > > > > > > 2. have the client advertise a MAX_PUSH_ID (in SETTINGS, and with a new > frame type; the setting might {ab|re}use ENABLE_PUSH) > > > > This would bound state for clients. A client couldn't receive an > arbitrary number of CANCEL_PUSH messages that are distributed over the > 32-bit Push ID space, so tracking cancellations is easy. Clients could use > a simple bitvector to track which pushes are potentially interesting, > clearing bits as pushes or cancellations arrive. > > > > MAX_PUSH_ID would give clients a finer-grained lever to control push. > > > > We could have CANCEL_PUSH be sent on the same streams as the PUSH_PROMISE, > but that doesn't help with the case where the PUSH_PROMISE may not have > been received due to a stream reset. > > > > This makes me wonder if it makes sense to always send the PUSH_PROMISE on > the control stream *in addition to* any stream that it is sent on. This > would ensure that no matter what, the PUSH_PROMISE is always received, and > additionally ensures that CANCEL_PUSH is received after a PUSH_PROMISE. > > > > I don't think that is a good idea. PUSH_PROMISE includes a headers block, > which is pretty big, even with effective compression. HoLB won't affect > this stream, so size shouldn't be an issue, but still. > > > > I did consider moving the header block to the control stream completely as > part of addressing the issue with duplication that I mentioned earlier. > The basic problem there is that you don't guarantee that the client see the > PUSH_PROMISE before it processes the response content. > > > > > > - jana > > > > On Thu, Aug 3, 2017 at 5:49 PM, Mike Bishop <Michael.Bishop@microsoft.com> > wrote: > > Bah, QUIC too. 😊 > > > > *From:* Mike Bishop [mailto:Michael.Bishop@microsoft.com] > *Sent:* Thursday, August 3, 2017 10:36 AM > *To:* ietf-http-wg@w3.org > *Subject:* Push ID - Merge Imminent > > > > This is Martin’s Push ID PR split off from unidirectional. Given that it > has already been picked over in those contexts and the feedback from that > and in-person discussion was to bring this change in separately, I’m about > ready to merge this. Everything anyone has quibbled with has been > editorial. However, I don’t see reviews from many folks, so I want to make > sure that everyone interested has had a chance to express an opinion. > > > > https://github.com/quicwg/base-drafts/pull/701 > <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fquicwg%2Fbase-drafts%2Fpull%2F701&data=04%7C01%7CMichael.Bishop%40microsoft.com%7C8c68a743428c43fd9e9508d4da9692a7%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636373787673436338%7CUnknown%7CVW5rbm93bnx7IlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiT3RoZXIifQ%3D%3D%7C-1&sdata=lF5Cr5Fe1RuY5BOvPgiy9iaGqHS27%2B7jeM1IOipSxu4%3D&reserved=0> > > > > I’ll give it a few hours (until everyone’s had at least a little bit of a > work day), then merge unless I hear otherwise. > > > > > > > > > -- > > Kazuho Oku > > > > > > >
Received on Wednesday, 9 August 2017 22:00:55 UTC