Variables & Constants


I’ve seen the docs on how to set variables within subroutines but is there a way to define constants that can be read across the subroutines?

Seems wasteful to be setting up variables on every vcl_recv when the value is always going to be the same.


Do you have examples of the sort of things you have in mind as constants?

VCL is compiled to C, and then to machine code, and C compilers can do a lot of optimization, so I’m not sure there’s a lot of waste going on, but I can most certainly check.


@drwilco we have a few:

  • The threshold of users allowed on to the site. Generally, this is left set to 100%, but can be lowered to limit traffic in event of exceptionally-high origin load.
  • Maintenance page toggle. Used to mask the system when updates requiring downtime are made.

In both instances, we will adjust the values in VCL and activate the new version.


Ah, good points. We (SEs and other VCL users at Fastly) have been using Edge Dictionaries for that. Basically we will have a settings table, and have various keys for knobs to tweak. And if used a lot, we’ll load the values into local variables, especially if there’s conversion.

With Edge Dictionaries you get the ability to do a change to a value with a single API call. And now that you can batch updates, you can even change multiple values with a single API call, and forego having to clone & activate.

Other than datatype, there’s no real advantage over using dictionaries to constants. Dictionaries allow for flexibility and a more general usecase, whereas constants would require us to know which variables have to be there, which complicates our controlplane a lot. Edge Dictionaries can cover missing “variables”, by using table lookups with a supplied default value.