• Dridi Boukelmoune's avatar
    Make VMODs actually fail warm-ups · 36293d0d
    Dridi Boukelmoune authored
    The implementation is similar to the load/discard dance when a load
    fails. New VGC functions are introduced iff the VCL has at least one
    VMOD handling events.
    
    The generated code looks like this:
    
    	static unsigned vgc_inistep;
    	static unsigned vgc_warmupstep;
    
    	...
    
    	static int
    	VGC_Load(VRT_CTX)
    	{
    		...
    	}
    
    	static int
    	VGC_Discard(VRT_CTX)
    	{
    		...
    	}
    
    	static int
    	VGC_Warmup(VRT_CTX, enum vcl_event_e ev)
    	{
    
    		vgc_warmupstep = 0;
    
    		/* 4 */
    		if (Vmod_debug_Func._event(ctx, &vmod_priv_debug, ev))
    			return (1);
    		vgc_warmupstep = 4;
    
    		return (0);
    	}
    
    	static int
    	VGC_Use(VRT_CTX, enum vcl_event_e ev)
    	{
    
    		/* 4 */
    		if (Vmod_debug_Func._event(ctx, &vmod_priv_debug, ev))
    			return (1);
    
    		return (0);
    	}
    
    	static int
    	VGC_Cooldown(VRT_CTX, enum vcl_event_e ev)
    	{
    		int retval = 0;
    
    		/* 4 */
    		if (vgc_warmupstep >= 4 &&
    		    Vmod_debug_Func._event(ctx, &vmod_priv_debug, ev) != 0)
    			retval = 1;
    
    		return (retval);
    	}
    
    	static int
    	VGC_Event(VRT_CTX, enum vcl_event_e ev)
    	{
    		if (ev == VCL_EVENT_LOAD)
    			return(VGC_Load(ctx));
    		if (ev == VCL_EVENT_WARM)
    			return(VGC_Warmup(ctx, ev));
    		if (ev == VCL_EVENT_USE)
    			return(VGC_Use(ctx, ev));
    		if (ev == VCL_EVENT_COLD)
    			return(VGC_Cooldown(ctx, ev));
    		if (ev == VCL_EVENT_DISCARD)
    			return(VGC_Discard(ctx));
    
    		return (1);
    	}
    
    However, if there are no VMODs handling events, no new functions shall
    be generated, leading to code looking like this:
    
    	static unsigned vgc_inistep;
    	static unsigned vgc_warmupstep;
    
    	...
    
    	static int
    	VGC_Load(VRT_CTX)
    	{
    		...
    	}
    
    	static int
    	VGC_Discard(VRT_CTX)
    	{
    		...
    	}
    
    	static int
    	VGC_Event(VRT_CTX, enum vcl_event_e ev)
    	{
    		if (ev == VCL_EVENT_LOAD)
    			return(VGC_Load(ctx));
    		if (ev == VCL_EVENT_DISCARD)
    			return(VGC_Discard(ctx));
    
    		(void)vgc_warmupstep;
    		return (0);
    	}
    36293d0d
Name
Last commit
Last update
bin Loading commit data...
doc Loading commit data...
etc Loading commit data...
include Loading commit data...
lib Loading commit data...
m4 Loading commit data...
man Loading commit data...
.gitignore Loading commit data...
.travis.yml Loading commit data...
CONTRIBUTING Loading commit data...
ChangeLog Loading commit data...
INSTALL Loading commit data...
LICENSE Loading commit data...
Makefile.am Loading commit data...
Makefile.inc.phk Loading commit data...
Makefile.phk Loading commit data...
README Loading commit data...
README.Packaging Loading commit data...
autogen.des Loading commit data...
autogen.sh Loading commit data...
config.phk Loading commit data...
configure.ac Loading commit data...
flint.lnt Loading commit data...
varnish.m4 Loading commit data...
varnishapi-uninstalled.pc.in Loading commit data...
varnishapi.pc.in Loading commit data...