[Varnish] #1156: first_byte_timeout is "doubled" on the client side when keep-alive is used

Varnish varnish-bugs at varnish-cache.org
Mon Jun 18 16:28:01 CEST 2012

#1156: first_byte_timeout is "doubled" on the client side when keep-alive is used
 Reporter:  tnt    |        Type:  defect  
   Status:  new    |    Priority:  normal  
Milestone:         |   Component:  varnishd
  Version:  trunk  |    Severity:  normal  
 Keywords:         |  

Comment(by tnt):

 A bit more investigation turned some more infos:

  - The request is actually retried on a new backend connection, which is
 why it takes twice as much time
  - It doesn't happen on the first connection because there is no 'retry'
 for fresh new backend connections.

 What happens is that the code that retries request to a backend in case of
 keepalive (like is the backend closes the connection) decides to retry the
 request ... But that's not an acceptable behavior for a 'timeout' error,
 only for things like connection reset or if the request couldn't be sent
 but not timeout on the response.

 To check if this was really the source of the problem I tried this hack:

 diff --git a/bin/varnishd/cache/cache_fetch.c
 index 7ccba0a..f71cd45 100644
 --- a/bin/varnishd/cache/cache_fetch.c
 +++ b/bin/varnishd/cache/cache_fetch.c
 @@ -510,7 +510,7 @@ FetchHdr(struct sess *sp, int need_host_hdr, int
                 /* XXX: other cleanup ? */
                 /* Retryable if we never received anything */
 -               return (i == -1 ? retry : -1);
 +               return -1;

         VTCP_set_read_timeout(vc->fd, vc->between_bytes_timeout);

 (It's obviously not a 'fix' because it disables retry in all cases but
 that was just to confirm the source of the issue).

 Ideally we'd need to know if HTC_Rx timed out or had a real error.

Ticket URL: <https://www.varnish-cache.org/trac/ticket/1156#comment:3>
Varnish <https://varnish-cache.org/>
The Varnish HTTP Accelerator

More information about the varnish-bugs mailing list