<div dir="ltr">Hi all,<div><br></div><div>I'm currently working on a migration project from varnish3 to varnish4 and I am facing a behaviour that I don't understand.</div><div><br></div><div>To put it simply, with the same configuration file used both in Varnish3 and Varnish4, I don't have the same results concerning hits and misses.</div><div><br></div><div>This seems to be related to the grace attribute, but I don't figure out how it works.</div><div><br></div><div>So below is an example which describes the problem into details:</div><div><br></div><div>My varnish3 configuration:<br></div><div><div># ----------------------------------------------</div><div>backend default {</div><div>    .host = "nginx";</div><div>    .port = "80";</div><div>}</div><div><br></div><div>sub vcl_fetch {</div><div>     set beresp.grace= 5s;</div><div>     set beresp.ttl = 1s;</div><div>}</div><div><br></div><div>sub vcl_deliver {</div><div>    if (obj.hits > 0) { </div><div>        set resp.http.X-Cache = "HIT";</div><div>    } else {</div><div>        set resp.http.X-Cache = "MISS";</div><div>    }</div><div>    set resp.http.X-Cache-Hits = obj.hits;</div><div>}</div></div><div># ----------------------------------------------<br></div><div><br></div><div>My varnish4 configuration: (only change is the method name vcl_backend_response instead of vcl_fetch )<br></div><div># ----------------------------------------------<br></div><div><div>vcl 4.0;</div><div><br></div><div>backend default {</div><div>    .host = "nginx";</div><div>    .port = "80";</div><div>}</div><div><br></div><div>sub vcl_backend_response {</div><div>     set beresp.grace= 5s;</div><div>     set beresp.ttl = 1s;</div><div>}</div><div><br></div><div>sub vcl_deliver {</div><div>    if (obj.hits > 0) {</div><div>        set resp.http.X-Cache = "HIT";</div><div>    } else {</div><div>        set resp.http.X-Cache = "MISS";</div><div>    }</div><div>    set resp.http.X-Cache-Hits = obj.hits;</div><div>}</div></div><div># ----------------------------------------------<br></div><div><br></div><div>The result of a little scenario which retrieves headers of a given resource after some time:</div><div># ----------------------------------------------<br></div><div><div>Time 14-47-12</div><div>VARNISH4:</div><div>X-Cache: MISS</div><div>X-Cache-Hits: 0</div><div>VARNISH3:</div><div>X-Cache: MISS</div><div>X-Cache-Hits: 0</div><div><br></div><div>Time 14-47-13</div><div>VARNISH4:</div><div>X-Cache: HIT</div><div>X-Cache-Hits: 1</div><div>VARNISH3:</div><div>X-Cache: MISS</div><div>X-Cache-Hits: 0</div><div><br></div><div>Time 14-47-20</div><div>VARNISH4:</div><div>X-Cache: MISS</div><div>X-Cache-Hits: 0</div><div>VARNISH3:</div><div>X-Cache: MISS</div><div>X-Cache-Hits: 0</div></div><div># ----------------------------------------------<br></div><div><br></div><div>So as you can see in the scenario, for the first request, both v3 and v4 return a MISS, which is normal.</div><div>But one second after, the second request returns a MISS for varnish3, which is normal for me, and a HIT for varnish4, that I don't really understand.</div><div>As I suspected this was related to the grace parameter, I have added a third request in my scenario 7 seconds later ( greeter than 1sec for  cache plus 5 seconds for grace), and as expected, both varnish 3 and varnish 4 are MISS.</div><div><br></div><div>So could you help me to understand / workaround this problem ? </div><div>The objective for me is to get the same result with varnish4 than with varnish3 (while I'm migrating from 3 to 4 ;) ).</div><div>My current workaround is to set beresp.grace=1ms on varnish4, but I don't like that at all, and I can't do that on every of my configurations :(</div><div><br></div><div>Any help would be very appreciated !</div><div><br></div><div>Thanks in advance ! :)</div><div><br></div><div><br></div><div><br></div></div>