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
[email protected]         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.

_______________________________________________
varnish-dev mailing list
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev

Reply via email to