varnishd appears to die if error is called from vcl_deliver

Nathan Uno nigel_varnish at unos.net
Fri Nov 14 21:46:10 CET 2008


For the record...

I also attempted to restart from vcl_deliver(), figuring I could check
req.restart in vcl_recv() and make decisions there.

Unfortunately, while the VCL_RET_RESTART behavior in vcl_fetch() is to
restart the request at vcl_recv(), the VCL_RET_RESTART behavior for
vcl_deliver() is to INCOMPL(), which involves an abort() and I'm back where
I started.

Any other ideas out there?

Thanks,

Nato


On Fri, Nov 14, 2008 at 11:46 AM, Nathan Uno <nigel_varnish at unos.net> wrote:

> This appears to be because include/vcl_returns.h (varnish 2.0.1) asserts
> that deliver shouldnt' return error:
>
> VCL_MET_MAC(deliver,DELIVER,(VCL_RET_RESTART|VCL_RET_DELIVER))
>
> The documentation (man 7 vcl) indicates that error can be returned from
> vcl_deliver():
>
>              The vcl_deliver subroutine may terminate with one of the
> following key-
>              words:
>
>              error code [reason]
>                      Return the specified error code to the client and
> abandon the
>                      request.
>
>              deliver
>                      Deliver the object to the client.
>
> It looks from the revision history that the change took place between r2341
> and 4 and r3047.  It appears to be a deliberate change because vcl_error()
> calls vcl_deliver().  So it appears there is a documentation bug, not a code
> bug.  >)
>
> What I'm really interested in doing is forcing a document into cache
> without having that document delivered.  I'm attempting to do this by
> defining a URL pattern to hint to varnish to fetch a document with a
> specific hash (i.e. not a hash specific to the particular request).
> vcl_hash() knows what to do and is working properly.  vcl_fetch() knows
> what's going on and sets the infamous magic marker to tell vcl_deliver()
> what's up.
>
> I had thought that I could just then tell vcl_deliver() to generate an
> "error" with HTTP status code of 200 and bogus content and avoid having the
> actual cached document returned.  This, however, seems not to be the case.
>
> Am I overlooking a much simpler way to accomplish my goal?
>
> Thanks,
>
> Nato
>
>
> On Wed, Nov 12, 2008 at 10:34 PM, Nathan Uno <nigel_varnish at unos.net>wrote:
>
>> If I call error from vcl_deliver varnishd appears to die.  For example,
>> the following (nonsensical) definition:
>>
>> sub vcl_deliver {
>>     error 503 "Badness";
>> }
>>
>> ... results in the following varnishlog output (which looks like a crash
>> to me):
>>
>>    10 SessionOpen  c 172.18.26.105 47478 :8081
>>    10 ReqStart     c 172.18.26.105 47478 1731927449
>>    10 RxRequest    c GET
>>    10 RxURL        c /PRIME/mtproxy/mtdata/14/2608/5704/1024
>>    10 RxProtocol   c HTTP/1.1
>>    10 RxHeader     c Accept-Encoding: identity
>>    10 RxHeader     c Host: 172.18.26.105:8081
>>    10 RxHeader     c Connection: close
>>    10 RxHeader     c User-agent: Python-urllib/2.4
>>    10 VCL_call     c recv
>>    10 VCL_return   c lookup
>>    10 VCL_call     c hash
>>    10 VCL_return   c hash
>>    10 VCL_call     c miss
>>    10 VCL_return   c fetch
>>    12 BackendOpen  b default 127.0.0.1 60316 127.0.0.1 8880
>>    10 Backend      c 12 default default
>>    12 TxRequest    b GET
>>    12 TxURL        b /PRIME/mtproxy/mtdata/14/2608/5704/1024
>>    12 TxProtocol   b HTTP/1.1
>>    12 TxHeader     b Accept-Encoding: identity
>>    12 TxHeader     b Host: 172.18.26.105:8081
>>    12 TxHeader     b User-agent: Python-urllib/2.4
>>    12 TxHeader     b X-Varnish: 1731927449
>>    12 TxHeader     b X-Forwarded-For: 172.18.26.105
>>     0 CLI          - Rd vcl.load boot ./vcl.1P9zoqAU.so
>>     0 CLI          - Wr 0 200 Loaded "./vcl.1P9zoqAU.so" as "boot"
>>     0 CLI          - Rd vcl.use boot
>>     0 CLI          - Wr 0 200
>>     0 CLI          - Rd start
>>     0 Debug        - "Acceptor is epoll"
>>     0 CLI          - Wr 0 200
>>     0 WorkThread   - 0x4485ec10 start
>>     0 WorkThread   - 0x4525fc10 start
>>     0 WorkThread   - 0x45c60c10 start
>>     0 WorkThread   - 0x46661c10 start
>>     0 WorkThread   - 0x47062c10 start
>>     0 WorkThread   - 0x47a63c10 start
>>     0 WorkThread   - 0x48464c10 start
>>     0 WorkThread   - 0x48e65c10 start
>>     0 WorkThread   - 0x49866c10 start
>>     0 WorkThread   - 0x4a267c10 start
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.varnish-cache.org/lists/pipermail/varnish-dev/attachments/20081114/7f2c464e/attachment-0001.html>


More information about the varnish-dev mailing list