• Poul-Henning Kamp's avatar
    Gently shuffle closer to being able to restart a esi:include on the next · 4dd41763
    Poul-Henning Kamp authored
    element:
    
    Add two checkpoints for the sessions workspace.
    
    The first checkpoint is after the session fixed data, and move the
    client address and port to workspace to see that this works.
    
    The second checkpoint is after the, as received unadultered by VCL
    http request.  Grab a copy of the http request matching this.
    
    Implement rollback as an optional feature of restart in VCL.
    
    Move various workspace initialization and resetting operations to more
    suitable locations in the program flow.
    
    I don't know if this is really usable, but now it's possible to do:
    
    	backend b1 {
    		set backend.host = "backend1";
    		set backend.port = "80";
    	}
    
    	backend b2 {
    		set backend.host = "backend2";
    		set backend.port = "80";
    	}
    
    	sub vcl_recv {
    		set req.backend = b1;
    		remove req.http.cookie;
    
    		if (req.restarts == 0) {
    			set req.url = "foobar.html";
    		} else {
    			set req.backend = b2;
    		}
    	}
    
    	sub vcl_fetch {
    		if (obj.status != 200) {
    			restart rollback;
    		}
    	}
    
    And have it first look for "foobar.html" on one backend, and failing
    that, try to give the user what they asked for from the other backend.
    
    
    git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@2167 d4fa192b-c00b-0410-8231-f00ffab90ce4
    4dd41763
cache_vrt.c 12.5 KB