Re: [Editorial Errata Reported] RFC7540 (4871)

Martin Thomson <> Wed, 30 November 2016 23:23 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id BF33C129963 for <>; Wed, 30 Nov 2016 15:23:00 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -9.897
X-Spam-Status: No, score=-9.897 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-2.896, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (2048-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id XYSDd4GRCSvA for <>; Wed, 30 Nov 2016 15:22:59 -0800 (PST)
Received: from ( []) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id E2AFE1293DF for <>; Wed, 30 Nov 2016 15:22:58 -0800 (PST)
Received: from lists by with local (Exim 4.80) (envelope-from <>) id 1cCE9q-0002Sd-Fv for; Wed, 30 Nov 2016 23:19:22 +0000
Resent-Date: Wed, 30 Nov 2016 23:19:22 +0000
Resent-Message-Id: <>
Received: from ([]) by with esmtps (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from <>) id 1cCE9j-0002Qi-0r for; Wed, 30 Nov 2016 23:19:15 +0000
Received: from ([]) by with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <>) id 1cCE9c-00019N-Dl for; Wed, 30 Nov 2016 23:19:09 +0000
Received: by with SMTP id m48so21507677qta.2 for <>; Wed, 30 Nov 2016 15:18:47 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=Z9rpLz796nV/j8fArYjd6Q7mYOdDBefPE2NPfmYjdi8=; b=NhV9WBt5+EDciItPUP8mzRRMtbF/f7ekx0HpNjULkcuy+XyoM611DrPIeaIECYKeKA TGCSZFGHrbyhq634z2HOgOkW816FrNiD/AwQn25LBUcpBP2NfA2UyOtexOnx0JT2Hpp+ KEXxujgGBULyIHdyqGOReHs1EQPN/NkyNsrTIO04hf6BkQwohdQlE7dvyM8SUKBmlypH 7c7rby/Obn6/1+ykL72crXL6mQ2N7Em2VX1Z+TPmasSIFrM3axrTsp8op5kXjsk2wrRI 79Yy8F3xRc34RuhyHne24Zp2oVK4hxnuBeeLR+GyZBtBYHQVrQKCnpF7b26rTkJjTq4F hdRA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=Z9rpLz796nV/j8fArYjd6Q7mYOdDBefPE2NPfmYjdi8=; b=ch/5S3gYiHyJUxF65rPVcysUey4qWMk1hEvbapsmVgbmMrM1ugN5jxQIp7adXCb7Hn HrolXv6bzEGGwnOcpz6uGE065Thfn4gLqtdIbNaTmHmqRQ2ksI1OPqA4B4Fusya5HXAa ju/WMeW31BArrogbBw8D2sO44XzHHRqbQz0SNBfdwQrV3reODjRTaxF5kxBMnOQd3eKv JZR8Z+LThd/HfsCuKgd/gcM3AmOETr/XERjVEKL+dHPij61RtgMR+AUcvdQO73+AE+RB iMAfU2L3YjtE8RBF5zq9BJsyBK9XQxkjZ5VtMdVLtTmYvHIyUWt46YPFt3ORhiztk4Co hDxQ==
X-Gm-Message-State: AKaTC01doW1n+So+S5WH5N8OW63fuRBJMlGzLgxX7G5nMqLOZ//Jt+vwbnbrFSyegFXycoKeDsQuSmKY3NdB9g==
X-Received: by with SMTP id 53mr34573672qtt.3.1480547017742; Wed, 30 Nov 2016 15:03:37 -0800 (PST)
MIME-Version: 1.0
Received: by with HTTP; Wed, 30 Nov 2016 15:03:37 -0800 (PST)
In-Reply-To: <>
References: <> <> <> <> <> <>
From: Martin Thomson <>
Date: Thu, 01 Dec 2016 10:03:37 +1100
Message-ID: <>
To: Cory Benfield <>
Cc: Kazuho Oku <>, RFC Errata System <>, Mike Belshe <>, Roberto Peon <>, Ben Campbell <>, Alissa Cooper <>, Alexey Melnikov <>, Patrick McManus <>, Mark Nottingham <>, HTTP Working Group <>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass client-ip=;;
X-W3C-Hub-Spam-Status: No, score=-6.0
X-W3C-Hub-Spam-Report: AWL=0.003, BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001, W3C_AA=-1, W3C_DB=-1, W3C_IRA=-1, W3C_WL=-1
X-W3C-Scan-Sig: 1cCE9c-00019N-Dl 93b24f17e30b463511b335bbb73327a2
Subject: Re: [Editorial Errata Reported] RFC7540 (4871)
Archived-At: <>
X-Mailing-List: <> archive/latest/33056
Precedence: list
List-Id: <>
List-Help: <>
List-Post: <>
List-Unsubscribe: <>

On 1 December 2016 at 00:05, Cory Benfield <> wrote:
> My understanding of what Martin is suggesting is that that isn’t true:
> blocked streams do not distribute their weight to their dependants. However,
> that’s also what the Python Priority implementation does.

And this was my error in writing up the errata and my earlier emails.
The spec is clear that there is no functional distinction between
blocked and finished.  The original text is correct.

It's pretty obvious however that it's not clear.  I'd answered on the
basis of first principles, and that was an error on my part.

Mike's algorithm is almost correct, but I would revise it.  Starting
at the top level:

Given a set of dependents of S,
  find all S where not TreeBlocked(S) as S'
  allocate resources to S' proportional to their weights
    for a stream s in S', if StreamBlocked(s), repeat algorithm with
its dependents

Not treating closed as special keeps this simple.  If you were to
treat closed as different to blocked, then you have the issues that
Cory was digging into.

Kazuho points out:
> I also do not see why it would be beneficial to treat them [closed streams] differently.

It's beneficial if you have other streams that are not blocked that
don't have dependencies.

Imagine that you have two HTML files and then images for each as
dependents.  If one HTML file is blocked, then there is potentially
less value in loading the images that depend on it than there is in
making progress on the other HTML file.  Now, that is arguably not
valuable because HTML/image dependencies are sort of loose, but if you
have an application that has absolute dependencies (I can't use this
until you give me that) and other constraints (not enough memory to
buffer), then you can see a way to treating closed and blocked

Of course, that isn't what the spec says and we don't get to change that :)

BTW, in answer to what people suggested about flow control, that is
only one reason a resource might be blocked.  A resource might be
blocked because the server hasn't finished building it, that might be
IO or processing.