VTC for connect_timeout?

Geoff Simmons geoff at uplex.de
Sun Nov 15 18:58:21 CET 2015


Hello all,

I noticed that there is no test case for backend connect_timeout among
the Varnish *.vtc's, so I tried to cook one up for a VMOD, but I can't
seem to get a backend connection to fail due to the timeout when I think
it should.

The attached VTC just uses standard Varnish, and doesn't pass. I can't
see what could be wrong about VTCP_connect(), so I assume that my
reasoning about the test case must be flawed.

The first request gets "Connection: close" from the backend, and I can
see BackendClose in the log.

Then the client sends the second request:

**   c1    0.6 === txreq
**** c1    0.6 txreq| GET / HTTP/1.1\r\n
**** c1    0.6 txreq| \r\n
**   c1    0.6 === rxresp

But the backend delays 1.5 seconds, which is longer than
connect_timeout, before accepting again:

**   s1    0.6 === delay 1.5
***  s1    0.6 delaying 1.5 second(s)
[...]
**   s1    2.1 === accept
**** s1    2.1 Accepting
***  s1    2.1 Accepted socket fd is 4
**   s1    2.1 === rxreq

So I thought the timeout should elapse and the response should be 503,
but it's 200, no failure.

How am I getting this wrong?


Thanks,
Geoff
-- 
** * * UPLEX - Nils Goroll Systemoptimierung

Scheffelstraße 32
22301 Hamburg

Tel +49 40 2880 5731
Mob +49 176 636 90917
Fax +49 40 42949753

http://uplex.de
-------------- next part --------------
varnishtest "test connect_timeout"

server s1 {
	rxreq
	txresp -hdr "Connection: close"
	delay 1.5
	accept
	rxreq
	txresp
} -start

varnish v1 -vcl {

	backend default { .host = "${s1_addr}"; .port = "${s1_port}";
			  .connect_timeout = 1s;
	}

	sub vcl_recv {
		return(pass);
	}

	sub vcl_backend_fetch {
		set bereq.connect_timeout = 1s;
	}

	sub vcl_backend_response {
		set beresp.do_stream = false;
	}
} -start

varnish v1 -cliok "param.set connect_timeout 1"

client c1 {
	txreq
	rxresp
	expect resp.status == 200
	txreq
	rxresp
	expect resp.status == 503
} -run

server s1 {
	rxreq
	txresp -hdr "Connection: close"
	delay 0.5
	accept
	rxreq
	txresp
} -start

client c1 {
	txreq
	rxresp
	expect resp.status == 200
	txreq
	rxresp
	expect resp.status == 200
} -run
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <https://www.varnish-cache.org/lists/pipermail/varnish-dev/attachments/20151115/542b112c/attachment.pgp>


More information about the varnish-dev mailing list