This reply is in response to https://www.varnish-cache.org/trac/ticket/1107.

I like the explicit vcl. The less magic the easier it is to understand what is 
going on. I would also like to add that I love the idea of not having the first 
client block once the ttl expires. 

For my specific scenario having vcl_lookup is good...

I would like the ability to return a graced object instead of the current 
response from the backend. Sometimes my app server fails to get data from one 
of its external data sources. If this happens the app server can tag the 
request as being "not-ideal". If varnish gets a non-ideal response I want it to 
return the grace object if it exists otherwise return the non-ideal response.

An example of a non-ideal response would be an ESI that renders a gallery. If 
the app server fails to connect to the gallery data source it will render an 
empty gallery instead of returning a 500. Now if varnish has a stale copy then 
I would rather the client get a stale gallery. If varnish does not have a stale 
copy I would rather the user get an empty gallery. This way the user still gets 
the correct HTML and I can try and render the gallery on the client side. This 
is almost like saint mode but I don't want to mark the backend as sick.

Here is some sample vcl I dreamed up:

sub vcl_lookup {
        if (obj && req.http.X-Serve-Stale) {
                obj.ttl = 2s;
                return (deliver);
        }
}

sub vcl_fetch {
        if (beresp.status == 208) { // 208: The content might not be complete 
and a stale copy should be used
                set beresp.status = 200;
                if (!req.http.X-Serve-Stale) {
                        set req.http.X-Serve-Stale = "yes";
                        return (restart);
                }
        }
}

This is not currently possible with vcl_miss because we don't have the grace 
object. Though having a stale_obj and return(stale) in vcl_fetch might be the 
ideal way to handle this.

Raul

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

Reply via email to