<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">So I guess I’m looking into having one background fetch trigger another background fetch (to sequentially refresh different object variants). In this fashion:<br class=""><div class=""><br class=""></div><div class="">1. Client PURGE request will do softpurge.softpurge(); return(restart); with GET method, etc. which will all lead to "return deliver()" in limited grace logic to fire background fetch .</div><div class=""><br class=""></div><div class="">2. Then in background fetch: </div><div class="">   → in its vcl_deliver() - the current object variation has already entered cache, so setting varied header to value2, removing grace limited flag and calling restart(). This way it should continue revalidation for the other object variant</div><div class="">   → we land inside limited grace logic again (as it’s a different object variant) and return deliver() again thus firing off second background fetch (which will refresh second object variant).</div><div class=""><br class=""></div><div class="">So the standard grace logic + something like this:</div><div class=""><br class=""></div><div class=""><div class="">sub vcl_deliver {</div><div class="">   if (req.http.grace == "normal(limited)" && req.http.Varied-Header = 'value1') {</div><div class="">     set req.http.Varied-Header = 'value2’;</div><div class="">     unset req.http.grace;</div><div class="">     return (restart);</div><div class="">   }</div><div class="">}</div></div><div class=""><br class=""></div><div class="">However, it won’t work at least because req.http.grace flag will be set for both the background fetch and the request that kicked it off. (it will be there in vcl_deliver of both).</div><div class="">Question is how can we tell if we are inside background fetch?</div><div class=""><br class=""><div class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;">Best Regards,</div><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;">Danila</div></div>
</div>
<div><br class=""><blockquote type="cite" class=""><div class="">On 11 Apr 2018, at 12:37, Guillaume Quintard <<a href="mailto:guillaume@varnish-software.com" class="">guillaume@varnish-software.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hi,<div class=""><br class=""></div><div class="">That's indeed correct, a purge will kill all variations, and the restart only fetches one.</div><div class=""><br class=""></div><div class="">The req.hash_always_miss trick however only kills/revalidate one variation.</div><div class=""><br class=""></div><div class="">At this moment, we have no way to purge/revalidate all the object under one hash key.</div></div><div class="gmail_extra"><br clear="all" class=""><div class=""><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr" class=""><div class="">-- <br class=""></div>Guillaume Quintard<br class=""></div></div></div>
<br class=""><div class="gmail_quote">On Wed, Apr 11, 2018 at 11:26 AM, Danila Vershinin <span dir="ltr" class=""><<a href="mailto:ciapnz@gmail.com" target="_blank" class="">ciapnz@gmail.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto" class="">Hi <span style="background-color:rgba(255,255,255,0)" class="">Guillaume,</span><div class=""><br class=""></div><div class="">A bit puzzled on something. If we use Vary: by some header.. am I correct that we need multiple restarts to refresh each object variation?</div><div class=""><br class=""></div><div class="">Since the background fetch would only refresh the variation that matched initial purge request. <br class=""><br class=""><div id="m_8268841633754049167AppleMailSignature" class="">Sent from my iPhone</div><span class=""><div class=""><br class="">On 9 Apr 2018, at 12:18, Guillaume Quintard <<a href="mailto:guillaume@varnish-software.com" target="_blank" class="">guillaume@varnish-software.<wbr class="">com</a>> wrote:<br class=""><br class=""></div></span><div class=""><div class="h5"><blockquote type="cite" class=""><div class=""><div dir="ltr" class="">Hi,<div class=""><br class=""></div><div class="">You can purge then set the method to GET then restart. Would that work for you?</div><div class=""><br class=""></div><div class="">Other way is to use req.hash_always_miss that will only revalidate if we are able to fetch a new object.</div></div><div class="gmail_extra"><br clear="all" class=""><div class=""><div class="m_8268841633754049167gmail_signature" data-smartmail="gmail_signature"><div dir="ltr" class=""><div class="">-- <br class=""></div>Guillaume Quintard<br class=""></div></div></div>
<br class=""><div class="gmail_quote">On Sat, Apr 7, 2018 at 12:10 PM, Danila Vershinin <span dir="ltr" class=""><<a href="mailto:ciapnz@gmail.com" target="_blank" class="">ciapnz@gmail.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;line-break:after-white-space" class="">Hi,<br class=""><div class=""><br class=""></div><div class="">What I work with:</div><div class=""><br class=""></div><div class="">* Grace mode configured to be 60 seconds when backend is healthy</div><div class="">* Using softpurge module to adjust TTL to 0 upon PURGE.</div><div class=""><br class=""></div><div class="">The whole idea is increasing chances that visitors will get cached page after cache was PURGEd for a page.</div><div class=""><br class=""></div><div class="">Standard piece:</div><div class=""><pre style="background-color:rgb(255,255,255);font-family:Monaco;font-size:8.3pt" class="">sub vcl_hit {<br class="">    if (obj.ttl >= 0s) {<br class="">        # normal hit<br class="">        return (deliver);<br class="">    }<br class=""><br class="">    if (std.healthy(req.backend_hint)<wbr class="">) {<br class="">        # Backend is healthy. Limit age to 60s.<br class="">        if (obj.ttl + 60s > 0s) {<br class="">            set req.http.grace = "normal(limited)";<br class="">            return (deliver);<br class="">        } else {<br class="">            return(fetch);<br class="">        }<br class="">    } else {<br class="">        # ...<br class="">    }<br class="">}</pre><div class="">And use of softpurge:</div></div><div class=""><br class=""></div><div class=""><pre style="background-color:rgb(255,255,255);font-family:Monaco;font-size:8.3pt" class="">sub vcl_miss {<br class="">    if (req.method == "PURGE") {<br class="">        softpurge.softpurge();<br class="">        return (synth(200, "Successful softpurge"));<br class="">    }<br class="">}<br class=""><br class="">sub vcl_hit {<br class="">    if (req.method == "PURGE") {<br class="">        softpurge.softpurge();<br class="">        return (synth(200, "Successful softpurge"));<br class="">    }<br class="">}</pre><div class=""><br class=""></div></div><div class=""><br class=""></div><div class="">Current behaviour:</div><div class=""><br class=""></div><div class="">* send PURGE for cached page</div><div class="">* Visitor goes to the page within 60 seconds and sees a stale cached page (triggering background refresh)</div><div class="">* Further visits to the page will show refreshed page</div><div class=""><br class=""></div><div class="">What I’m looking for:</div><div class=""><br class=""></div><div class="">Trigger the background refresh right after PURGE while still leveraging grace mode :) That is, serve stale cache for only as long as it takes to actually generate the new page, and not wait for 60 seconds:</div><div class=""><br class=""></div><div class="">* upon PURGE: set TTL to 0 (softpurge) + trigger background page request (possible?)</div><div class="">* serve stale cache only while the page is generated</div><div class=""><br class=""></div><div class="">I could have adjusted the “healthy backend grace period” to lower than 60s, but I’m basically checking to see if it’s possible to refresh “nearly” immediately in this kind of setup.</div><div class=""><br class=""></div><div class="">Hope I made any sense :) </div><div class=""><br class=""><div class="">
<div style="word-wrap:break-word" class=""><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" class="">Best Regards,</div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" class="">Danila</div></div>
</div>

<br class=""></div></div><br class="">______________________________<wbr class="">_________________<br class="">
varnish-misc mailing list<br class="">
<a href="mailto:varnish-misc@varnish-cache.org" target="_blank" class="">varnish-misc@varnish-cache.org</a><br class="">
<a href="https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc" rel="noreferrer" target="_blank" class="">https://www.varnish-cache.org/<wbr class="">lists/mailman/listinfo/varnish<wbr class="">-misc</a><br class=""></blockquote></div><br class=""></div>
</div></blockquote></div></div></div></div></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></div></body></html>