I tried varnishd (varnish-2.1.2 SVN 4769:4772) on Gentoo Linux today. And the VCL compilation failed:<div><div><br></div><div><div>Message from VCC-compiler:</div><div>Variable 'obj.http.X-Cache-Only' not accessible in method 'vcl_fetch'.</div>
<div>At: (input Line 106 Pos 21)</div><div>                set obj.http.X-Cache-Only = "true";</div><div>--------------------#####################----------</div><div>Running VCC-compiler failed, exit 1</div><div>
VCL compilation failed</div><div><br></div><div>I also tried </div><div><div>set resp.http.X-Cache-Only = "true";</div></div><div>but still failed.</div><div><br></div><div>:(</div><div><br></div><div>pahud</div>
<div><br></div><br><div class="gmail_quote">On Mon, Jul 5, 2010 at 10:49 PM, Pahud <span dir="ltr"><<a href="mailto:pahudnet@gmail.com">pahudnet@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Thanks for your quick reply. I tried your config and varnish started with no error but if I send http request in this case, varnish will have empty response. And if I comment off the vcl_deliver it responds as normal.  Can you help me a little bit more? Thanks again.<div>

<br></div><div><font color="#888888">pahud</font><div><div></div><div class="h5"><br><div><br></div><div><br><div><br></div><div><br><div><div><br><div class="gmail_quote">On Mon, Jul 5, 2010 at 10:11 PM, Kristian Lyngstøl <span dir="ltr"><<a href="mailto:kristian@varnish-software.com" target="_blank">kristian@varnish-software.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>On Mon, Jul 5, 2010 at 3:17 PM, Pahud <<a href="mailto:pahudnet@gmail.com" target="_blank">pahudnet@gmail.com</a>> wrote:<br>


> vcl_deliver(). So I tried this configuration<br>
> sub vcl_deliver {<br>
>          if (req.http.Cache-Control ~ "just-cache") {<br>
>                error 200 "Cached";<br>
>                return (pass);<br>
<br>
</div>return (pass); doesn't work from vcl_deliver, nor is it needed after<br>
an error-statement.<br>
<div><br>
>          }<br>
>     return (deliver);<br>
> }<br>
> But no good luck. I guess vcl_deliver just can't get the value of<br>
>  req.http.Cache-Control.<br>
> Is it still possible to achieve this just with VCL?<br>
<br>
</div>Hmm. What you could do is:<br>
<br>
In vcl_fetch: if (req.http.Cache-Control ~ "just-cache") { set<br>
obj.http.X-Cache-Only = "true"; }<br>
In vcl_deliver:<br>
<br>
if (resp.http.X-Cache-Only == "true") {<br>
    if (obj.hits == 0) {<br>
        error 795 "Cached";<br>
    } else {<br>
        remove resp.http.X-Cache-Only;<br>
    }<br>
}<br>
<br>
I used the error code 795 to differentiate from 200, so you can catch<br>
it in vcl_error and strip most of the content of the error message if<br>
you want to. You may use whatever error code you want, of course.<br>
<br>
(I haven't tested this, but I don't see why it shouldn't work, except<br>
perhaps syntax typos).<br>
<font color="#888888"><br>
- Kristian<br>
</font></blockquote></div><br></div></div></div></div></div></div></div>
</blockquote></div><br></div></div>