<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span>Hi,<br>
</span>
<div><br>
</div>
<div>I'm currently setting up Varnish for a project, and the grace feature together with health checks/probes seems to be a great savior when working with servers that might misbehave. But I'm not really sure I understand how to actually achive that, since
 the example doesn't really make sense:<br>
</div>
<div><br>
</div>
<div>https://varnish-cache.org/docs/trunk/users-guide/vcl-grace.html<br>
</div>
<div><br>
</div>
<div>See the section "Misbehaving servers". There the example does "set beresp.grace = 24h" in vcl_backend_response, and "set req.grace = 10s" in vcl_recv, if the backend is healthy. But since vcl_recv is run before vcl_backend_response, doesn't that mean that
 the 10s grace value of vcl_recv is overwritten by the 24h value in vcl_backend_response?<br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>Also... There is always a risk of some URL's suddenly giving 500-error (or a timeout) all while the probe still returns 200. Is it possible to have Varnish behave more or less as if the backend is sick, but just for those URL? Basically I would like this
 logic:<br>
</div>
<div><br>
</div>
<div>If a healthy content exists in the cache:<br>
</div>
<div>1. Return the cached (and potentially stale) content to the client<br>
</div>
<div>2. Increase the ttl and/or grace, to keep the healthy content longer<br>
</div>
<div>3. Only do a bg-fetch if a specified time has past since the last attempt (lets say 5s), to avoid hammering the backend<br>
</div>
<div><br>
</div>
<div>If a non-health (ie 500-error) exists in the cache:<br>
</div>
<div>1. Return the cached 500-content to the client<br>
</div>
<div>2. Only do a bg-fetch if a specified time has past since the last attempt (lets say 5s), to avoid hammering the backend<br>
</div>
<div><br>
</div>
<div>If no content doesn't exists in the cache:<br>
</div>
<div>1. Perform a synchronous fetch<br>
</div>
<div>2. If the result is a 500-error, cache it with lets say ttl = 5s<br>
</div>
<div>3. Otherwise, cache it with a longer ttl<br>
</div>
<div>4. Return the result to the client<br>
</div>
<div><br>
</div>
<span>Is this possible with the community edition of Varnish?</span><br>
</div>
</body>
</html>