VMOD objects
Poul-Henning Kamp
phk at phk.freebsd.dk
Wed Feb 6 16:21:19 CET 2013
We talked about some VCL improvements at the Dev-meeting in CPH and
having thought about it, I realized that it would actually be pretty
trivial to implement one of the more powerful things, vmod objects,
so this I have started doing.
The basic idea is that you can create objects in a VMOD's init
function, which can be called in your VCL program, with the poster-boy
example looking somewhat like:
import dx_director;
sub vcl_init {
dx1 = dx_director(1712);
dx1.add_backend(b1, 92);
dx1.add_backend(b2, 112);
dx1.add_backend(b4, 7);
dx2 = dx_director(1913);
dx2.add_backend(b1, 23);
dx2.add_backend(b2, 27);
dx2.add_backend(b3, 19);
}
sub vcl_recv {
if (something...) {
set req.backend = dx1.select_backend();
} else {
set req.backend = dx2.select_backend();
}
}
In the vmod's .vcc file, this would be declared something like:
Object dx_director(REAL) {
Method VOID .add_backend(BACKEND, REAL)
Method BACKEND .select_backend(VOID)
}
I've done the first part, the .vcc file compiler, now I just need
the actual VCL compiler, and you can start to play with this.
I should warn you, that one very likely outcome of this, is that
_all_ directors gets expelled into VMODs in Varnish4.
--
Poul-Henning Kamp | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG | TCP/IP since RFC 956
FreeBSD committer | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.
More information about the varnish-dev
mailing list