[Varnish] #150: Varnish 1.1 dies with assert error in wrk_do_one

Varnish varnish-bugs at projects.linpro.no
Tue Aug 14 23:48:47 CEST 2007


#150: Varnish 1.1 dies with assert error in wrk_do_one
----------------------+-----------------------------------------------------
 Reporter:  anders    |       Owner:  phk                          
     Type:  defect    |      Status:  new                          
 Priority:  high      |   Milestone:                               
Component:  varnishd  |     Version:  1.1                          
 Severity:  normal    |    Keywords:  varnishd core dump wrk_do_one
----------------------+-----------------------------------------------------
 I am running Varnish 1.1 (from ports, with patches by des committed july
 25th) in FreeBSD 6.2-RELEASE/amd64, on Intel hardware.

 Every now and then, Varnish dies with these error messages. Example 1:

 Child said (2, 4119): <<Assert error in wrk_do_one(), cache_pool.c line
 198:
   Condition(!isnan(w->used)) not true.
   errno = 0 (Unknown error: 0)
 Assert error in wrk_do_one(), cache_pool.c line 198:
   Condition(!isnan(w->used)) not true.
   errno = 0 (Unknown error: 0: 0)
 >>
 Cache child died pid=4119 status=0x6

 Example 2:

 Child said (2, 5287): <<Assert error in wrk_do_one(), cache_pool.c line
 198:
   Condition(!isnan(w->used)) not true.
   errno = 32 (Broken pipe)
 >>
 Cache child died pid=5287 status=0x6

 My VCL:

 {{{
 backend foo {
         set backend.host = "80.91.1.1";
         set backend.port = "80";
 }

 backend bob {
         set backend.host = "80.91.1.2";
         set backend.port = "80";
 }

 backend foobar {
         set backend.host = "80.91.1.3";
         set backend.port = "80";
 }

 backend bar {
         set backend.host = "80.91.1.4";
         set backend.port = "80";
 }

 acl mypurge {
         "80.91.1.5";
 }

 sub vcl_recv {
         if (req.http.host ~
 "^(foo.aftenposten.no|bar.aftenposten.no|baz.aftenposten.no)$") {
                 set req.backend = foo;
         } elsif (req.http.host ~ "^(bob.aftenposten.no)$") {
                 set req.backend = bob;
         } elsif (req.http.host ~
 "^(foobar.aftenposten.no|barbar.aftenposten.no|bazbaz.aftenposten.no)$") {
                 set req.backend = foobar;
         } elsif (req.http.host ~
 "^(www.bar.no|bar.no|www.baz.no|baz.no)$") {
                 set req.backend = bar;
 } else {
         error 403 "Access denied. Contact cacheadmin at aftenposten.no if you
 have problems.";
 }

         if (req.request == "GET" || req.request == "HEAD") {
                 if (req.http.Expect) {
                         pipe;
                 }
                 if (req.http.Authenticate) {
                         pass;
                 }
                 lookup;
         } elsif (req.request == "PURGE") {
                 if (client.ip ~ aipurge) {
                         lookup;
                 } else {
                         error 405 "Not allowed.";
                 }
         } else {
                 pass;
         }
 }

 sub vcl_miss {
         if (req.request == "PURGE") {
                 error 404 "Not in cache.";
         } else {
                 fetch;
         }
 }

 sub vcl_hit {
         if (req.request == "PURGE") {
                 set obj.ttl = 0s;
                 error 200 "Purged.";
         } else {
                 deliver;
         }
 }

 sub vcl_fetch {
         if (obj.status == 404 || obj.status == 503) {
                 pass;
         }

         if (obj.http.host ~
 "^(foo.aftenposten.no|bar.aftenposten.no|baz.aftenposten.no)$") {
                 if (obj.http.Set-Cookie) {
                         remove obj.http.Set-Cookie;
                 }
         }

         if (!obj.valid) {
                 error;
         }
         if (!obj.cacheable) {
                 pass;
         }
         insert;
 }
 }}}

-- 
Ticket URL: <http://varnish.projects.linpro.no/ticket/150>
Varnish <http://varnish.projects.linpro.no/>
The Varnish HTTP Accelerator


More information about the varnish-bugs mailing list