per_call in vmod

Kristian Lyngstol kristian at varnish-software.com
Mon Dec 5 11:12:50 CET 2011


On Fri, Dec 02, 2011 at 02:50:04PM -0500, AD wrote:
> hello,
> 
>  How does per_call know what to cache on in the vmod?  Is it based on the
> parameters to the function or based on the request in the VCL?  I have run
> some tests previously where i make multiple http requests with different
> URLs and priv_call returns the same cached response.
> 
>  Looking at this page
> https://www.varnish-cache.org/trac/wiki/ArchitectureVmodStorage it seems if
> i call a function in a vmod with priv_call with different parameters i
> should be able to cache them independently.  How is this supposed to work?

It is cached... per occurrence in VCL.

Meaning: For the same call, you will get the same private data
regardless of input. It's up to you whether the vmod needs to take the
parameters into account.

A good example of why this makes sense can be found in the header
vmod[1]. It has functions that take multiple arguments, but the first is
a regular expression. The regular expression is expected (required) to
be static. In other words: You write the regular expression by hand, but
the headers it are of course variable. The vmod can use per_call storage
to store the compiled regular expression, since the regex never changes.

Or:

sub vcl_recv {
	somevmod.foo("blatti");
	somevmod.foo("blatti");
	somevmod.foo("blatti");
	somevmod.foo(req.http.someheader);
}

will get exactly 4 priv_vcl structures, regardless of the value of
req.http.someheader.

https://github.com/varnish/libvmod-header

- Kristian




More information about the varnish-misc mailing list