Re: Unidirectional streams PR

Martin Thomson <martin.thomson@gmail.com> Thu, 22 June 2017 01:50 UTC

Return-Path: <martin.thomson@gmail.com>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 9C978129449 for <quic@ietfa.amsl.com>; Wed, 21 Jun 2017 18:50:14 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.7
X-Spam-Level:
X-Spam-Status: No, score=-2.7 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id IHIUfnihTzev for <quic@ietfa.amsl.com>; Wed, 21 Jun 2017 18:50:12 -0700 (PDT)
Received: from mail-lf0-x22a.google.com (mail-lf0-x22a.google.com [IPv6:2a00:1450:4010:c07::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 57CBE12940F for <quic@ietf.org>; Wed, 21 Jun 2017 18:50:12 -0700 (PDT)
Received: by mail-lf0-x22a.google.com with SMTP id p189so1185851lfe.2 for <quic@ietf.org>; Wed, 21 Jun 2017 18:50:12 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=Xu1IENbZLkMuR2pRxK6gAYZBvQUKcy1kVW82Rp166ao=; b=KmMZaqZyAk8D1elLO1TOyA69zxpWTcu++KVot7sEmXMdT7jBLbxEAFib3GQnvGebee 5R82FwPTJH2yJ283gvr8OC0j+AX85bwN02lA2TqiJSo92AawuSzq9V9ltcbkwEPFjtCI DWSNLDZKCdJ36+GSkTluFIz9+tCTAAcFEp6PcF6xtulT2zcp+AVsrJIvBLWUOR97+zXi HW1vbV04HB4CEPP6V9nneXVTsGUqiHKKQqdZ1VjTj4gDZmh0uQ7ROQDFbL8FWwgX3Qr8 yEIAIzJTKWkMNYlPAi8FhDlkuDPLG5Osh5EhdApCTySMEfpU3vzA0R7Wf3qN6stZC4wr I/YA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Xu1IENbZLkMuR2pRxK6gAYZBvQUKcy1kVW82Rp166ao=; b=Rzrw9lMyHTjqfjSkox4yXsCi+cyNIQRaQxw2obIqoHg2hTNLjlUSbt0VrSIZVvYCs0 pfHbOlzt5q7mwsCraCu6MydsZz7NHGD5epyjRxxv6X2v3bQhvu/JNfTcbsgjoBurrcsb 8fFqmXzQiAa3s6Pxt6jJF/HCEwlwSl9XKDhdMGMgG0v0RDqizbry8Z8EPq5S26Oe/GgW rmu/y0Kj9N+GRK7KjMl6qRC6I4osmItp92ja5IewDLtzJCXTESRNMh7IQQetLb0XpCLH yKGM8cVGQ9BnXTOa5wlF8dlKXnT+ifPqTIbS1BxJB8pVRNxtfAIe/zhM3K0FamwHMvDb xKyA==
X-Gm-Message-State: AKS2vOyAVUZX+I9gwRwe4FjbBjhYEe8iXVo2BAFfqc/mqqHViRW2y4zG nu0marEL0IBYTuRLjaMMNkivnY1j7PqbNEM=
X-Received: by 10.46.84.28 with SMTP id i28mr39513ljb.44.1498096210583; Wed, 21 Jun 2017 18:50:10 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.46.78.17 with HTTP; Wed, 21 Jun 2017 18:50:09 -0700 (PDT)
In-Reply-To: <CAGD1bZb9Na32z=Gg9JS+FzrGGN9Jhw=QDTMTYS=FVcNesoSMig@mail.gmail.com>
References: <CABkgnnW+veDVq27v+wTz0cA=eGPRTLQ1A90A0ynHLPU88Pg77Q@mail.gmail.com> <CAOdDvNpORYBr7+Q8M_nnGOm4MsWqVbm6koOtQ+=An8t7AbccGg@mail.gmail.com> <CAGD1bZb9Na32z=Gg9JS+FzrGGN9Jhw=QDTMTYS=FVcNesoSMig@mail.gmail.com>
From: Martin Thomson <martin.thomson@gmail.com>
Date: Thu, 22 Jun 2017 11:50:09 +1000
Message-ID: <CABkgnnV2yPP-qgLKZYPsvawXc7FP4RM7CZDDa7aFaNy0KxLfag@mail.gmail.com>
Subject: Re: Unidirectional streams PR
To: Jana Iyengar <jri@google.com>
Cc: Patrick McManus <pmcmanus@mozilla.com>, QUIC WG <quic@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/dzujOyMISjO_VrAdHQftvjqK_a4>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 22 Jun 2017 01:50:15 -0000

On 22 June 2017 at 09:48, Jana Iyengar <jri@google.com> wrote:
> My design sense says to optimize for the common case and to allow for the
> exceptions. Given that our scope is to really get things rolling for HTTP
> ASAP, I'd argue that request-response is the common case that we need to
> optimize for.

I think that this is a fair criticism, and I wanted to address it.

My concern is exactly the same as yours: I want get HTTP working.  And
unfortunately, HTTP/2 is not a simple request/response protocol.  This
is why HTTP/2 and now QUIC allow the server to initiate streams.  And
it's that exact gap that motivated me to propose this change.  In my
view, this change makes it *easier* to finish HTTP over QUIC.

The cost is that HTTP is marginally more complex.  My view is that the
overall protocol (HTTP+QUIC) is no more or less complex than before,
there are big savings in transport, and some minor savings in HTTP
that counteract the added cost: having to include explicit correlation
for request and response, and having to add a way to cancel requests
before the response starts. [1]

In terms of generality, we've already heard from Christian that this
is basically neutral for DNS, possibly with a tiny reduction in
complexity related to not having to check that redundant identifiers
in a response are consistent.

Ted suggested that we aim for a design that supports BOTH
unidirectional and bidirectional. Given how trivial it is to add an
identifier - as demonstrated by this PR - I don't see how building
that facility into the base transport is a net win.  Some protocols
can still use the stream identifiers as a correlator, for instance
those protocols that are properly request/response don't need explicit
correlators.  That choice - as with your proposal to retain
bidirectionality - creates a potential for head-of-line blocking under
certain circumstances, something that an explicit correlator at the
application layer neatly avoids.

[1] I don't consider HAS_BODY to be a cost, I'm now firmly of the
opinion that merging headers and body back into a single stream is the
right solution and that what I wrote up here is only temporary.