- From: Martin Thomson <martin.thomson@gmail.com>
- Date: Wed, 9 Aug 2017 10:45:17 +1000
- 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" <ietf-http-wg@w3.org>, Mike Bishop <Michael.Bishop@microsoft.com>
- Message-ID: <CABkgnnXfOtJu4Pg85yH7JibTnVeyHz40=xGOKTTK_ohpWunLMw@mail.gmail.com>
Just to follow up on this, I've opened https://github.com/quicwg/ base-drafts/pull/711 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 00:45:40 UTC