sharding with varnish: generating director identifier from an integer

Enno van Amerongen enno at
Thu Nov 15 15:52:33 CET 2012

Hi List,

My coworkers and I are working on a sharding VMOD and we got to the point
it's actually working (woohoo!).

Now, our implementation is pretty straightforward:

 - get id from url
 - do a "id mod n" to pick correct shard ( = director)
 - set req.backend = shardN

Right now we have a very long if/elsif codepath that looks like this:

    var.set_int("shard", sharding.get_mod_n(req.url,420));

    if (var.get_int("shard") == 0) {
        set req.backend = shard0;
        set req.http.X-Varnish-Backend = "shard0";
    elsif (var.get_int("shard") == 1) {
        set req.backend = shard1;
        set req.http.X-Varnish-Backend = "shard1";

So my question is, is it possible to *generate* the correct backend director,
so we only need one line of VCL, instead of the long if/else, like so:

    set req.backend = shard + sharding.get_mod_n(req.url,420);

Yet, this does not work, maybe there's a workaround, or maybe someone else found a solution?
Thanks in advance!


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the varnish-misc mailing list