I have never been quite happy with the current namespace for vcl programs and the recent work on management tools have shown that it is indeed not very practical.
Having pondered the question, I have come up with the following idea instead: we add version numbers to the names of loaded VCLs, and allow CLI commands to optionally be specify them. Here is a mockup to show how it works: $ varnishd -f myvcl.vcl -d -d ... [...] vcl.list 200 # active 21 boot:1 2008-12-04 10:03:06 UTC -f myvcl.vcl # The -b or -f argument, always turns into a VCL named "boot" # Notice the ":1" version number. vcl.load test myvcl2.vcl 200 # vcl.list 200 # active 34 boot:1 2008-12-04 10:03:06 UTC -f myvcl.vcl - 0 test:1 2008-12-04 10:07:16 UTC myvcl2.vcl by stdin # we have loaded the test vcl, it gets version 1 as well. # VCLs do not get activated automatically. vcl.use test 200 # vcl.list 200 # - 34 boot:1 2008-12-04 10:03:06 UTC -f myvcl.vcl active 3 test:1 2008-12-04 10:07:16 UTC myvcl2.vcl by stdin # Now we are running the test vcl vcl.load boot myvcl.vcl 200 # vcl.list 200 # - 14 boot.1 2008-12-04 10:03:06 UTC -f myvcl.vcl - 0 boot:2 2008-12-04 10:08:34 UTC myvcl.vcl by stdin active 13 test:1 2008-12-04 10:07:16 UTC myvcl2.vcl by stdin # we have loaded another "boot" vcl and it gets version # number two. vcl.use boot 200 # vcl.list 200 # - 08 boot.1 2008-12-04 10:03:06 UTC -f myvcl.vcl active 12 boot:2 2008-12-04 10:08:34 UTC myvcl.vcl by stdin - 12 test:1 2008-12-04 10:07:16 UTC myvcl2.vcl by stdin # If no version is specified, the highst version number # is assumed. vcl.discard test 200 # vcl.list 200 # active 22 boot.1 2008-12-04 10:03:06 UTC -f myvcl.vcl - 6 boot:2 2008-12-04 10:08:34 UTC myvcl.vcl by stdin # Discard without version number removes all non-active VCLs # of that # name. vcl.load boot myvcl.vcl 200 # vcl.list 200 # active 22 boot.1 2008-12-04 10:03:06 UTC -f myvcl.vcl - 6 boot:2 2008-12-04 10:08:34 UTC myvcl.vcl by stdin - 0 boot:3 2008-12-04 10:10:51 UTC myvcl.vcl by stdin # Another version of the boot vcl vcl.use boot:2 200 # vcl.list 200 # - 18 boot.1 2008-12-04 10:03:06 UTC -f myvcl.vcl active 15 boot:2 2008-12-04 10:08:34 UTC myvcl.vcl by stdin - 0 boot:3 2008-12-04 10:10:51 UTC myvcl.vcl by stdin # We can say which exact version we want vcl.discard boot 200 # vcl.list 200 # active 15 boot:2 2008-12-04 10:08:34 UTC myvcl.vcl by stdin # And discard without version purges all non-active versions, # even if they are higher version numbers than the active. vcl.list -d 200 # discard 7 boot.1 2008-12-04 10:03:06 UTC -f myvcl.vcl active 23 boot:2 2008-12-04 10:08:34 UTC myvcl.vcl by stdin discard 2 test:1 2008-12-04 10:07:16 UTC myvcl2.vcl by stdin # the -d option also shows discarded VCLs that are still not # cleaned up, because sessions still reference them. Input & comments welcome! Poul-Henning -- 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-misc mailing list varnish-misc@projects.linpro.no http://projects.linpro.no/mailman/listinfo/varnish-misc