Skip to content

Commit

Permalink
varnishd: always shutdown both ends to a backend
Browse files Browse the repository at this point in the history
Signed-off-by: Asad Sajjad Ahmed <asadsa@varnish-software.com>
  • Loading branch information
asadsa92 authored and dridi committed Mar 1, 2024
1 parent 55fecc9 commit d92ca50
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
2 changes: 1 addition & 1 deletion bin/varnishd/cache/cache_conn_pool.c
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ VCP_Rel(struct conn_pool **cpp)
cp->n_conn--;
assert(pfd->state == PFD_STATE_AVAIL);
pfd->state = PFD_STATE_CLEANUP;
(void)shutdown(pfd->fd, SHUT_WR);
(void)shutdown(pfd->fd, SHUT_RDWR);
cp->n_kill++;
}
while (cp->n_kill) {
Expand Down
47 changes: 47 additions & 0 deletions bin/varnishtest/tests/b00083.vtc
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
varnishtest "VCP FIN-WAIT2"

server s1 {
rxreq
txresp

# Leave the TCP connection open in the FIN-WAIT2 state
delay 1000
} -start

server s2 {
rxreq
txresp
} -start

varnish v1 -vcl {
backend s1 {
.host = "${s1_sock}";
}
} -start

# The waiter depend on the backend_idle_timeout for when to give up and
# close the connection, so bump it up a bit.
varnish v1 -cliok "param.set backend_idle_timeout 120"

# The shutdown is done on the CLI thread, and it blocks until the waiter has
# killed the connection. So bump cli_timeout up as well
varnish v1 -cliok "param.set cli_timeout 120"

client c1 {
txreq -url "/"
rxresp
} -run

varnish v1 -vcl {
backend s2 {
.host = "${s2_sock}";
}
}

varnish v1 -cliok "vcl.use vcl2"
varnish v1 -cliok "vcl.discard vcl1"

varnish v1 -expect n_backend == 1
varnish v1 -expect backend_conn == 1
varnish v1 -expect backend_reuse == 0
varnish v1 -expect backend_recycle == 1

0 comments on commit d92ca50

Please sign in to comment.