[Varnish] #846: Let varnishd continue running when encountering unused backends in a configuration

Varnish varnish-bugs at varnish-cache.org
Fri Jan 14 10:56:28 CET 2011

#846: Let varnishd continue running when encountering unused backends in a
 Reporter:  jhalfmoon                |        Type:  enhancement
   Status:  new                      |    Priority:  normal     
Milestone:                           |   Component:  varnishd   
  Version:  2.1.4                    |    Severity:  normal     
 Keywords:  unused backend exit vcl  |  
 Varnishd (we're currently using 2.1.4) exits when encountering unused
 backends in a configuration. It throws an errror and exits like so:

 Message from VCC-compiler:
 Warning: Unused backend www_testsite_com, defined:
 (/etc/varnish/sites/testsite_com Line 3 Pos 9)
 backend www_testsite_com { .host = ""; }
 Running VCC-compiler failed, exit 1
 VCL compilation failed

 It would be nice if Varnishd had an option like '--continue-on-warning'
 that makes Varnish continue running when encountering a non fatal
 situation like the one above.

 The reason this feature is desirable is because we are running a VCL with
 lots of inline C code and among other things, the backends get checked and
 set in this C code. So in fact, there are no unused backends in our VCL,
 but Varnish just does not see us using them. We currently use the
 following code to work around this problem by creating a dummy-reference
 to the backends, but it makes the VCLs really messy, and we have a lot of
 backends. Here's the workaround:

 sub vcl_error {
      # the code within the if-block never gets executed
      if (req.http.host ~ "^kludge$") {
          set req.backend = www_testsite_com ;
          set req.backend = etc..etc...etc...

 As far as I can see, a fix for this issue is very unintrusive, but then
 again I don't have the overview of the fulltime developpers. I can do a
 quick and dirty fix of the problem by preventing Varnish from exiting on
 an 'Unused object' error, using the following patch:

 diff --git a/lib/libvcl/vcc_xref.c b/lib/libvcl/vcc_xref.c
 index c9b0418..9c5547b 100644
 --- a/lib/libvcl/vcc_xref.c
 +++ b/lib/libvcl/vcc_xref.c
 @@ -168,9 +168,11 @@ vcc_CheckReferences(struct tokenlist *tl)

 -               vsb_printf(tl->sb, "Unused %s %.*s, defined:\n",
 +               vsb_printf(tl->sb, "Warning: Unused %s %.*s, defined:\n",
                     type, PF(r->name));
                 vcc_ErrWhere(tl, r->name);
 +        tl->err=0;                  // Patch: This unsets the errorcode
 that was set by vcc_ErrWhere
 +        nerr=0;                     // Patch: This unsets the errorcode
 set by the above 'nerr++'
         return (nerr);

 But I'd rather be using vanilla Varnishd sourcecode for our production
 machines. Thanks for your time and I hope this helps.

Ticket URL: <http://www.varnish-cache.org/trac/ticket/846>
Varnish <http://varnish-cache.org/>
The Varnish HTTP Accelerator

More information about the varnish-bugs mailing list