On Wed, Jan 12, 2011 at 11:34:37AM +0100, Mickaël GERVAIS wrote: > If a timeout occurs (first_byte_timeout reached) the function vcl_error is > called, I'd like to use the saint mode to retreive the response from the > cache, but saint mode is only avaliable on beresp. > > Is there a way to tell varnish use a dirty object from the cache? Maybe is > not the correct way to handle this kind of error.
You are correct - that is a weakness. I have a nasty hack, though. 1. Declare a second, bogus backend which will always be sick. 2. In vcl_error if restarts is 0, set a magic marker and restart. 3. Look for the magic marker in vcl_recv - if it's present, tell Varnish to use the bogus backend. Grace will then kick in because that backend is marked as sick. 4. If the object exists in cache (graced) - it will be used. Otherwise, you will hit vcl_error again. (Thus the check of req.restarts in step 2). It's a nasty, yet brilliant hack, if I might say so myself ;) It adds latency and doesn't utilize saintmode, but it gets the job done in a way that will also make little children cry. - Kristian _______________________________________________ varnish-misc mailing list [email protected] http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
