Switch/Case statement?
Mark Moseley
moseleymark at gmail.com
Thu Dec 13 19:59:51 CET 2012
Just want to make sure I'm not missing something obvious...
Is there an equivalent of a switch/case statement for VCL? I've not
been able to find one, nor a VMOD that implements one. I've got a
backend selection chunk of VCL code that is turning into a very long
if/elsif/elsif/elsif/..../else. Before I try to optimizing the
if/elsif's a bit, I went in search of a VCL equiv for 'case' but came
up empty-handed.
As a bit of background, it's doing the backend selection based on the
incoming IP address on a dummy interface, so it looks like:
if ( server.ip == "192.168.1.1" ) {
set req.backend = backend1;
} elsif ( server.ip == "192.168.1.2" ) {
set req.backend = backend2;
and so on all the way up to 192.168.1.49 but growing by a few every
year. I figure I can restructure it into something like (in
pseudo-code):
if ( server.ip is in 192.168.1.0-.31 ) {
if ( server.ip is in 192.168.1.0-.15 ) {
.....
} elsif ( server.ip is in 192.168.1.0-.15 ) {
.....
and so on, though I'll re-order things a bit to get the most-used
first. But obviously a 'case'-equiv would be much more efficient (I'm
guessing, unless it internally compiled to if/elsif/elsif/.../else).
Failing a 'case'/'switch' statement, being able to map the incoming
IP->backend via an associative array would be cool too, but I didn't
see anything remotely like that.
More information about the varnish-misc
mailing list