1. 13 Feb, 2008 11 commits
  2. 12 Feb, 2008 1 commit
  3. 11 Feb, 2008 2 commits
  4. 10 Feb, 2008 1 commit
  5. 09 Feb, 2008 1 commit
  6. 07 Feb, 2008 5 commits
  7. 06 Feb, 2008 3 commits
    • Poul-Henning Kamp's avatar
      First part of major backend overhaul. · dd5566cc
      Poul-Henning Kamp authored
      *** Please do not use -trunk in production until I say so again ***
      
      I have not entirely decided in the precise terminology, so the following
      may sound a lot more complicated than it really is:
      
      In VCL we can now have "backends" and "directors" both of which we
      treat as a "backend".
      
      When we define backends and directors in VCL, they refer to "backend
      hosts" which is just another way to say "hostname+portname" but later
      these will grow other parameters (max connections etc).
      
      A director is a piece of code that selects a "backend host" somehow,
      "random" and "round-robin" are the first algorithms.  A backend
      can still be specified directly of course, that's the "simple director"
      that always return the same "backend host".
      
      This is probably where an example is in order:
      
      
      	/* A backend as we know it */
      	backend b1 {
      		.host = "fs";
      		.port = "80";
      	}
      
      	/* A director */
      	director b2 random {
      		{
      			/* We can refer to named backends */
      			.backend        = b1;
      			.weight         = 7;
      		}
      		{
      			/* Or define them inline */
      			.backend        = {
      				.host = "fs2";
      			}
      			.weight         = 3;
      		}
      	}
      
      	sub vcl_recv {
      		if (req.url ~ "\[[a-z]]") {
      			set req.backend = b2;
      		} else {
      			set req.backend = b1;
      		}
      	}
      
      This results in quite a lot of changes in the C code, VRT API and
      VCL compiler, the major thrust being:
      
      Directors like "simple" and "random" will not have to think about
      the actual connections to the backends, but just concentrate on
      selecting which backend should be used.
      
      When a new VCL is loaded, it will instantiate all directors, but
      try to reuse any preexisting "backend hosts" (which we still
      call "backend" in the C code).
      
      This is simple for a backend like "b1" in the example above, but
      sligthly more complex for the backend inlined in b2.  The VCL
      compiler solves this, by qualifying the ident string for the inlined
      backend host with the prefix "b2 random :: 2 :: ", so that a reload
      of the same director with the same (unchanged) inline backend host
      will match, but none other will.
      
      One implication of instantiating all directors for every VCL load,
      is that private statistics cannot be reused, but stats on the
      backend host can.  This is likely a very fine point of no consequence.
      
      Once the backend is selected by the director, the generic code in
      cache_backend.c will cope with reusing the connection pool,
      establishing connections and all that, moving most of the nastyness
      out of directors, leaving cache_dir_simple.c with only 96 lines of
      code, of which the license is a large fraction.
      
      Until now, we have done automatic DNS re-lookups, but they seem to
      cause more grief than advantage (I suspect some of the DNS lookups
      to be resposible for long timeouts), so that will be dropped, and
      instead we might add an explicit CLI command for this later.
      
      The code as here committed can handle a couple of simple requests,
      but there are a large number of INCOMPL()'s that need to be resolved
      before this is ready for prime time again.
      
      
      
      
      git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@2437 d4fa192b-c00b-0410-8231-f00ffab90ce4
      dd5566cc
    • Poul-Henning Kamp's avatar
      VBE_AddBackend() needs to always return the backend, so make it a pointer arg · 43da9da5
      Poul-Henning Kamp authored
      and use the return int to tell if it was a reuse.
      
      
      git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@2436 d4fa192b-c00b-0410-8231-f00ffab90ce4
      43da9da5
    • Poul-Henning Kamp's avatar
  8. 05 Feb, 2008 5 commits
  9. 04 Feb, 2008 6 commits
  10. 03 Feb, 2008 3 commits
  11. 02 Feb, 2008 1 commit
  12. 31 Jan, 2008 1 commit