[PATCH] Initial backend health

Ken Brownfield kb+varnish at slide.com
Fri Jun 19 08:20:38 CEST 2009

[Apologies if this belongs on varnish-dev; this list seemed much more  

This patch came about from observations in tickets #512 and #518.

The attached patch creates a backend flag to change the initial health  
of backends upon varnishd startup:

backend foo {
	.initial_health = 1;

The backend healthy flag internally is an unsigned int, so I kept the  
same type.  A value > 0 here will cause this backend to default to  
healthy.  Also, the initial "Probe" output at startup will note  
"initially healthy" if this flag is set.

The backend will immediately go "sick" if a single health check  
fails*, until the window is flushed.  This seems like the safest way  
to implement this option, since a bad host will only receive hits  
until the first probe can execute against it, which in my testing was  
nearly immediate.  Healthy hosts will continue to pass and stay healthy.

I'm not using probed backends in production right now, but I'm running  
one instance of the patched version at ~1,000 requests per second (at  
8% of a single 2.5G Xeon) and it's stable.  YMMV, protect yourself, etc.

I thought about having this flag apply to the director, and backends  
would inherit this central flag...  but while setting this for every  
backend in the config is a little verbose, it just seems cleaner,  
conceptually.  And a per-backend setting seems cleaner and more  
flexible than a command-line flag.

TODO: I should probably add "-p initial_health=1", as it fits the  
defaults like between_bytes_timeout.

Comments?  Thoughts?

*(I'm marking the "oldest" .threshold probes in the .window as "pass"  
and the others "fail", so a single probe fail will cause sickness  
until the window has flushed. The BITMAP()/vt->happy stuff in bin/ 
varnishd/cache_backend_poll.[ch] made my face bleed, but look there  
for specifics of the implementation.)

-------------- next part --------------
A non-text attachment was scrubbed...
Name: varnish-kb0.patch
Type: application/octet-stream
Size: 2542 bytes
Desc: not available
URL: <https://www.varnish-cache.org/lists/pipermail/varnish-misc/attachments/20090618/e9d5c1d0/attachment-0003.obj>

More information about the varnish-misc mailing list