<div dir="ltr"><div><div>I'm very confused.  <br><br></div>Despite backend headers instructing caching for 15 minutes, beresp.ttl get's overridden to be -1.000 immediately before vcl_fetch starts running.<br></div>
<div><br></div><div>For the test, I restarted varnish, ran the test with an empty cache, and validated at the end that only one connection/request had come in via varnishstat.<br><br>Backend response headers (via tcpdump/wireshark):<br>
<br>Expires: Tue, 21 Jan 2014 01:35:54 GMT<br>Cache-Control: max-age=900, s-maxage=900, public<br>Vary: Accept-Encoding<br>Vary: Accept-Encoding<br>Content-Type: application/json<br><br>Varnishlog output showing the two TTL lines.<br>
<br>   10 TTL          c 562972947 RFC 900 -1 -1 1390267254 0 1390267254 1390268154 900<br>   10 VCL_call     c fetch<br>   10 TTL          c 562972947 VCL 120 -1 -1 1390267254 -0<br>   10 VCL_return   c hit_for_pass<br><br>
So, vcl_fetch changes the ttl?<br><br>Here's my modified vcl_fetch (faintly adapted from default.vcl for debugging):<br><br>sub vcl_fetch {<br>  if (beresp.ttl <= 0s) { <br>    std.syslog((3*8)+5, "ttl fail");<br>
  }     <br>  if (beresp.http.Set-Cookie) {<br>    std.syslog((3*8)+5, "cookie fail");<br>  }     <br>  if (beresp.http.Vary == "*") {<br>    std.syslog((3*8)+5, "Very fail");<br>  }     <br>
  if (beresp.ttl <= 0s || beresp.http.Set-Cookie || beresp.http.Vary == "*") {<br>    if (beresp.status == 400) {<br>      set beresp.ttl = 5 s; <br>      return (deliver); <br>    } else if (beresp.status == 500) {<br>
      set beresp.ttl = 5 s; <br>      std.syslog((3*8)+5, "beresp status code 500 for url request " + req.url);<br>      return (deliver); <br>    } else {    <br>      /*                <br>      * Mark as "Hit-For-Pass" for the next 2 minutes<br>
      */                <br>      std.syslog((3 * 8) + 5, "what? beresp.ttl " + beresp.ttl +<br>          " beresp.proto " + beresp.proto +<br>          " beresp.status " + beresp.status +<br>
          " beresp.response " + beresp.response +<br>          " beresp.backend.ip " + beresp.backend.ip +<br>          " beresp.http.Set-Cookie is " + beresp.http.Set-Cookie +  <br>          " beresp.http.Vary is " + beresp.http.Vary +<br>
          " req.url is " + req.url);    <br>      set beresp.ttl = 120 s;<br>      return (hit_for_pass);<br>    }           <br>  }     <br>  return (deliver);<br>}<br><br></div><div>And indeed, the logs show:<br>
</div><div><br>Jan 21 01:20:54 devvcache4x00 varnishd[4761]: <b>ttl fail</b><br>Jan 21 01:20:54 devvcache4x00 varnishd[4761]: what? <b>beresp.ttl -1.000</b> beresp.proto HTTP/1.1 beresp.status 200 beresp.response OK beresp.backend.ip 10.224.4.167 beresp.http.Set-Cookie is  beresp.http.Vary is Accept-Encoding, Accept-Encoding req.url is <elided><br>
<br></div><div>Why is beresp.ttl getting set to -1.000 ?   I can't find anything modifying beresp.ttl in my code (except what's above to set it to something positive).<br><br></div><div>Varnish 3.0.4, with vmod_redis, vmod_digest<br>
<br></div><div>Thank you for any help;<br>Jason<br></div></div>