Re: New Version Notification for draft-nottingham-httpbis-retry-01.txt

Willy Tarreau <> Tue, 07 February 2017 07:35 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id F3CED129A9A for <>; Mon, 6 Feb 2017 23:35:25 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -6.921
X-Spam-Status: No, score=-6.921 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id Z5bU8SPHAZ3S for <>; Mon, 6 Feb 2017 23:35:24 -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 132D7129A57 for <>; Mon, 6 Feb 2017 23:35:23 -0800 (PST)
Received: from lists by with local (Exim 4.80) (envelope-from <>) id 1cb0Fm-0004yA-6X for; Tue, 07 Feb 2017 07:31:54 +0000
Resent-Date: Tue, 07 Feb 2017 07:31:54 +0000
Resent-Message-Id: <>
Received: from ([]) by with esmtps (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from <>) id 1cb0Fh-0004xP-EX for; Tue, 07 Feb 2017 07:31:49 +0000
Received: from ([] by with esmtp (Exim 4.84_2) (envelope-from <>) id 1cb0FY-0006tJ-UH for; Tue, 07 Feb 2017 07:31:43 +0000
Received: (from willy@localhost) by pcw.home.local (8.15.2/8.15.2/Submit) id v177VBfw003575; Tue, 7 Feb 2017 08:31:11 +0100
Date: Tue, 07 Feb 2017 08:31:11 +0100
From: Willy Tarreau <>
To: Mark Nottingham <>
Cc: Alex Rousskov <>, HTTP Working Group <>
Message-ID: <>
References: <> <> <> <>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <>
User-Agent: Mutt/1.6.1 (2016-04-27)
Received-SPF: pass client-ip=;;
X-W3C-Hub-Spam-Status: No, score=-7.0
X-W3C-Hub-Spam-Report: AWL=0.929, BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, W3C_AA=-1, W3C_IRA=-1, W3C_IRR=-3, W3C_WL=-1
X-W3C-Scan-Sig: 1cb0FY-0006tJ-UH 7fc3f43eccaee9a8f2b28381538d542f
Subject: Re: New Version Notification for draft-nottingham-httpbis-retry-01.txt
Archived-At: <>
X-Mailing-List: <> archive/latest/33459
Precedence: list
List-Id: <>
List-Help: <>
List-Post: <>
List-Unsubscribe: <>

On Tue, Feb 07, 2017 at 02:35:32PM +1100, Mark Nottingham wrote:
> > On 7 Feb 2017, at 8:04 am, Alex Rousskov <> wrote:
> > 
> > On 02/01/2017 01:26 AM, Mark Nottingham wrote:
> >> FYI; fairly minor update. Would love to hear what people think about the
> >> various suggested paths forward.
> > 
> > FWIW, Squid mind-boggling algorithm for retries is partially summarized
> > at
> >
> > 
> > Your draft already mentions a single Squid decision point, but the
> > actual logic is a lot more complex than the draft currently implies.
> > Some of that complexity is Squid's fault, as the source code comment you
> > quoted illustrates, but a lot of it is genuine.
> Ah, I should have remembered that one; thanks. I've added a link.
> > Recommending a unified (but necessarily parameterized) approach to
> > retries would be useful for future implementors, but I suspect that
> > doing so properly would take too much time while oversimplifying the
> > situation would not help much. Just cataloging various retry factors to
> > consider may be very helpful on its own, even if you then suggest
> > nothing more than "keep these factors in mind when implementing retries".
> That's a reasonable outcome. Some folks might want more, e.g., a recommended algorithm that itself isn't mandatory for all implementations (yet). Whether we go that far (and when) is still an open question, I think.

I like a lot the way it's presented in Squid's doc above. It's indeed
much better to enumerate a number of conditions that should prevent a
retry than to suggest when it's possible. As seen above, that makes
the list much easier to understand (shorter and simpler conditions)
and easier to adapt to other products.

HAProxy currently doesn't implement retry if at least one byte was sent.
The main reason is that once forwarded, these bytes are lost, but I
contemplated the possibility to pin and rewind the buffer to deal with
failures on persistent shared connections (by default we don't share them).
I've come to a number of conditions (much less) and some are common with
Squid's, so it's encouraging to read this :-)

I tend to think that just like we audited many implementations when
trying to redefine the state of deployed stacks for RFC723x, by
enumerating what various implementations do combined with their successes
or failures, we may end up with MAY and SHOULD that can be considered as
safe guidelines for future implementations, just because existing code
has had to adapt to what these current implementations do as well.