On Tue, 24 Feb 2004, Adrian Chadd wrote:

> It doesn't look like a "trivial" fix. Would you mind if I committed
> the current work, sans re-working the do_next_read flag, so it gets
> some testing? I'm trying to get squid-3 stable before I jump in
> to try and improve someo f the code.

Go ahead. The code is a lot better with your patch than before.

But please verify that the keep-alives work in all cases. With the split 
logics this is not so simple to verify by inspecting the patch.

  * Simple keep-alive, no request buffered

  * Partial pipelined request. 2.5 requests sent by client, 2 parsed, 1 
executed, 0.5 buffered. Needs to read more.

  * Fully pipelined request. 3 requests sent by client, 2 parsed, 1 
buffered, 1 executed. Should parse what it have. Ne need for reading.

  * Half-closed simple. 2 requests sent by client. 2 parsed. Buffer empty. 
Needs to read more.

  * Half-closed 1 pipelined. 2 requests sent by client. Connection
half-closed. no request data pending in buffer. Should just kick alive the
next parsed request.  No parsing or reading.

  * Half-closed fully pipeline. As the fully pipelined case above.

  * Half-closed aborted. 2.5 requests sent by client, connection 
half-closed, 0.5 requests in buffer. this should abort the connection.


All tests are easily reproduciple with nc. Just make request files with 1,
2, 2.5 and 3 requests.

To simulate a normal connection run

  cat testfile - | nc proxy 3128

and in the 2.5 request case press enter after a short while to complete
the request.

to simulate a half-closed connection run

  cat testfile | nc proxy 3128


The first requests should be for something which takes a while to respond
to allow things to settle in a reproducible manner, for example this small
cgi. With pipeline prefetch disabled (default) it does not matter much
what the second and third requests are.

#!/bin/sh
sleep 2
cat << EOF
Content-Type: text/html
Connection: keep-alive
Content-Length: 6

hello
EOF

Regards
Henrik

Reply via email to