Hi Dridi,

On Monday, March 16, 2020 9:58 AM Dridi Boukelmoune <[email protected]> wrote:

> Not really, it's actually the other way around. The beresp.grace
> variable defines how long you may serve an object past its TTL once it
> enters the cache.
> 
> Subsequent requests can then limit grace mode, so think of req.grace
> as a req.max_grace variable (which maybe hints that it should have
> been called that in the first place).

OK. So beresp.grace mainly effects how long the object can stay in the cache? 
And if ttl + grace + keep is a low value set in vcl_backend_response, then 
vcl_recv is limited in how high the grace can be? 

And req.grace doesn't effect the time that the object is in the cache? Even if 
req.grace is set to a low value on the very first request (ie the same request 
that triggers the call to the backend)?


> What you are describing is stale-if-error, something we don't support
> but could be approximated with somewhat convoluted VCL. It used to be
> easier when Varnish had saint mode built-in because it generally
> resulted in less convoluted VCL.
> 
> It's not something I would recommend attempting today.

That's strange. This stale-if-error sounds like something pretty much everyone 
would want, right? I mean, if there is is stale content available why show an 
error page to the end user?

But maybe it was my want to "cache/remember" previous failed fetches and that 
made it complicated? So if I loosen the requirements/wish-list a bit, into this:

Assuming that:
* A request comes in to Varnish
* The content is stale, but still in the cache
* The backend is considered healthy
* The short (10s) grace has expired
* Varnish triggers a synchronus fetch in the backend
* This fetch fails (timeout or 5xx error)

I would then like Varnish to:
* Return the stale content

Would this be possible using basic Varnish community edition, without a 
"convoluted VCL", as you put it? Is it possible without triggering a restart of 
the request? Either way, I am interested in hearing about how it can be 
achieved. Is there any documentation or blog post that mentions this? Or can 
you give me some example code perhaps? Even a convoluted example would be OK by 
me.

Increasing the req.grace value for every request is not an option, since we 
only want to serve old content if Varnish can't get hold of new content. And 
some of our pages are visited very rarely, so we can't rely on a constant 
stream of visitors keeping the content fresh in the cache.

Regards
_______________________________________________
varnish-misc mailing list
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc

Reply via email to