Re: WGLC: p1 MUST NOT pipeline until connection is persistent

Alex Rousskov <> Tue, 30 April 2013 23:23 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 45A8921F8415 for <>; Tue, 30 Apr 2013 16:23:45 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -10.499
X-Spam-Status: No, score=-10.499 tagged_above=-999 required=5 tests=[AWL=0.100, BAYES_00=-2.599, RCVD_IN_DNSWL_HI=-8]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id WbkOhz147Voc for <>; Tue, 30 Apr 2013 16:23:38 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id C5A9521F8411 for <>; Tue, 30 Apr 2013 16:23:38 -0700 (PDT)
Received: from lists by with local (Exim 4.72) (envelope-from <>) id 1UXJtI-0002tW-UC for; Tue, 30 Apr 2013 23:23:20 +0000
Resent-Date: Tue, 30 Apr 2013 23:23:20 +0000
Resent-Message-Id: <>
Received: from ([]) by with esmtp (Exim 4.72) (envelope-from <>) id 1UXJt8-0002rs-Lk for; Tue, 30 Apr 2013 23:23:10 +0000
Received: from ([]) by with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.72) (envelope-from <>) id 1UXJt8-00075i-4M for; Tue, 30 Apr 2013 23:23:10 +0000
Received: from [] (localhost []) (authenticated bits=0) by (8.14.3/8.14.3) with ESMTP id r3UNMlPu044646 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for <>; Tue, 30 Apr 2013 17:22:48 -0600 (MDT) (envelope-from
Message-ID: <>
Date: Tue, 30 Apr 2013 17:22:39 -0600
From: Alex Rousskov <>
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130329 Thunderbird/17.0.5
MIME-Version: 1.0
References: <> <> <>
In-Reply-To: <>
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Received-SPF: pass client-ip=;;
X-W3C-Hub-Spam-Status: No, score=-2.5
X-W3C-Hub-Spam-Report: RP_MATCHES_RCVD=-2.509, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001
X-W3C-Scan-Sig: 1UXJt8-00075i-4M 57f2288785b5f7af7e18d60443a426a6
Subject: Re: WGLC: p1 MUST NOT pipeline until connection is persistent
Archived-At: <>
X-Mailing-List: <> archive/latest/17737
Precedence: list
List-Id: <>
List-Help: <>
List-Post: <>
List-Unsubscribe: <>

On 04/30/2013 01:40 PM, Willy Tarreau wrote:

>>> A client [...] MUST NOT pipeline on a retry connection until it
>>> knows the connection is persistent.

>> Is it really possible to know that a connection _is_ persistent?

> Well, it's by definition until a "connection: close" response is seen.

You are right. My complains about not being able to know whether a
connection is persistent were invalid because the rules in "p1 6.3
Persistence" determine whether the connection is considered persistent.
However, there are two related problems with those rules:

a) They do not apply to connections on which no responses have been

b) They do not mention that a persistent connection may close without
warning at any time.

Let's start with (a): To know that a connection "is persistent", the
client has to receive a response on that connection. This implies that
the client MUST NOT retry a failed pipelined request on a connection it
just opened. What if there are no other connections and not other
requests to send, except for the failed one? Is the proxy going to be
stuck because it is not allowed to use a new connection to retry the
failed pipeline request?

To fix this, I think we have to add a rule that declares a freshly
opened, unused connection "persistent" OR allow retries on such
connections without declaring them persistent.

As for (b), depending on the intent of this MIST NOT, it may be useful
to discourage developers from using connections that were idle for a
long time for retries because those connections are more likely to fail
when [re]used.

Thank you,