
varnish-bugs at varnish-cache
Aug 2, 2011, 5:08 AM
Post #4 of 5
(226 views)
Permalink
|
|
Re: #965: Restarting a request in vcl_miss causes Varnish client crash.
[In reply to]
|
|
#965: Restarting a request in vcl_miss causes Varnish client crash. --------------------+------------------------------------------------------- Reporter: david | Owner: tfheen Type: defect | Status: new Priority: normal | Milestone: Component: build | Version: 3.0.0 Severity: normal | Keywords: --------------------+------------------------------------------------------- Description changed by tfheen: Old description: > Hello! > > I've done extensive testing on this, and I believe I've found a bug in > Varnish. The VCL below loads correctly, but causes the Varnish client to > crash after 1-2 requests. The backstory is available in the forums here > https://www.varnish-cache.org/forum/topic/65 - if you have any questions > that are not answered in that post, please ask away; I'd love to explain > and make more sense of what I'm trying to do. This isn't the exact VCL > I'd use in production, it is a minimalistic version that is able to > reproduce the crash: > > {{{ > sub vcl_recv { > if (!req.http.X-Forwarded-For) { set req.http.X-Forwarded-For = > client.ip; } > if (req.http.X-Banned == "check") { remove req.http.X-Banned; } > elseif (req.restarts == 0) { > set req.http.X-Banned = "check"; > return (lookup); > } > } > > sub vcl_hash { > ## Check if they have a ban in the cache, or if they are going to be > banned in cache. > if (req.http.X-Banned) { > hash_data(req.http.X-Forwarded-For); > return (hash); > } > } > > sub vcl_error { > if (obj.status == 988) { return (restart); } > } > > sub vcl_miss { > if (req.http.X-Banned == "check") { error 988 "restarting"; } > } > > This is a successful request. After this request, the second request will > not work (Varnish restarts): > 0 Debug - "VCL_error(988, restarting)" > 9 BackendOpen b production[47] 172.21.4.182 41813 172.21.4.111 80 > 9 TxRequest b GET > 9 TxURL b http://www.site.com/ > 9 TxProtocol b HTTP/1.1 > 9 TxHeader b User-Agent: curl/7.19.7 (universal-apple-darwin10.0) > libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3 > 9 TxHeader b Host: www.site.com > 9 TxHeader b Accept: */* > 9 TxHeader b Proxy-Connection: Keep-Alive > 9 TxHeader b X-Forwarded-For: 127.0.0.1 > 9 TxHeader b X-Varnish: 746583022 > 9 TxHeader b Accept-Encoding: gzip > 9 RxProtocol b HTTP/1.1 > 9 RxStatus b 200 > 9 RxResponse b OK > 9 RxHeader b Date: Thu, 16 Jun 2011 23:45:54 GMT > 9 RxHeader b Server: Apache/2.2.3 (CentOS) > 9 RxHeader b Cache-Control: private, proxy-revalidate > 9 RxHeader b ETag: "9658bc1e80033b21277323e725948c91" > 9 RxHeader b Content-Encoding: gzip > 9 RxHeader b Vary: Accept-Encoding > 9 RxHeader b Content-length: 11452 > 9 RxHeader b Content-Type: text/html; charset=utf-8 > 9 RxHeader b Content-Language: en > 9 Fetch_Body b 4 0 1 > 9 Length b 11452 > 9 BackendReuse b production[47] > 3 SessionOpen c 127.0.0.1 1204 :80 > 3 ReqStart c 127.0.0.1 1204 746583022 > 3 RxRequest c HEAD > 3 RxURL c http://www.site.com/ > 3 RxProtocol c HTTP/1.1 > 3 RxHeader c User-Agent: curl/7.19.7 (universal-apple-darwin10.0) > libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3 > 3 RxHeader c Host: www.site.com > 3 RxHeader c Accept: */* > 3 RxHeader c Proxy-Connection: Keep-Alive > 3 VCL_call c recv lookup > 3 VCL_call c hash > 3 Hash c 127.0.0.1 > 3 VCL_return c hash > 3 VCL_call c miss error > 3 VCL_call c error restart > 3 VCL_call c recv lookup > 3 VCL_call c hash > 3 Hash c http://www.site.com/ > 3 Hash c www.site.com > 3 VCL_return c hash > 3 VCL_call c miss fetch > 3 Backend c 9 production production[47] > 3 TTL c 746583022 RFC 300 1308267955 0 0 0 0 > 3 VCL_call c fetch deliver > 3 ObjProtocol c HTTP/1.1 > 3 ObjResponse c OK > 3 ObjHeader c Date: Thu, 16 Jun 2011 23:45:54 GMT > 3 ObjHeader c Server: Apache/2.2.3 (CentOS) > 3 ObjHeader c Cache-Control: private, proxy-revalidate > 3 ObjHeader c ETag: "9658bc1e80033b21277323e725948c91" > 3 ObjHeader c Content-Encoding: gzip > 3 ObjHeader c Vary: Accept-Encoding > 3 ObjHeader c Content-Type: text/html; charset=utf-8 > 3 ObjHeader c Content-Language: en > 3 Gzip c u F - 11452 46817 80 80 91551 > 3 VCL_call c deliver deliver > 3 TxProtocol c HTTP/1.1 > 3 TxStatus c 200 > 3 TxResponse c OK > 3 TxHeader c Server: Apache/2.2.3 (CentOS) > 3 TxHeader c Cache-Control: private, proxy-revalidate > 3 TxHeader c ETag: "9658bc1e80033b21277323e725948c91" > 3 TxHeader c Vary: Accept-Encoding > 3 TxHeader c Content-Type: text/html; charset=utf-8 > 3 TxHeader c Content-Language: en > 3 TxHeader c Date: Thu, 16 Jun 2011 23:45:54 GMT > 3 TxHeader c X-Varnish: 746583022 > 3 TxHeader c Age: 0 > 3 TxHeader c Via: 1.1 varnish > 3 TxHeader c Connection: keep-alive > 3 Length c 0 > 3 ReqEnd c 746583022 1308267954.333659887 1308267954.527986050 > 0.000048876 0.194267035 0.000059128 > 3 Debug c herding > 3 SessionClose c no request > 3 StatSess c 127.0.0.1 1204 0 1 1 0 0 1 344 0 > 0 Backend_health - production[33] Still healthy ------- 4 3 8 > 0.000000 0.000272 > 3 SessionOpen c 172.21.4.16 57711 :80 > 3 SessionClose c EOF > }}} > Regards, > -david New description: Hello! I've done extensive testing on this, and I believe I've found a bug in Varnish. The VCL below loads correctly, but causes the Varnish client to crash after 1-2 requests. The backstory is available in the forums here https://www.varnish-cache.org/forum/topic/65 - if you have any questions that are not answered in that post, please ask away; I'd love to explain and make more sense of what I'm trying to do. This isn't the exact VCL I'd use in production, it is a minimalistic version that is able to reproduce the crash: {{{ sub vcl_recv { if (!req.http.X-Forwarded-For) { set req.http.X-Forwarded-For = client.ip; } if (req.http.X-Banned == "check") { remove req.http.X-Banned; } elseif (req.restarts == 0) { set req.http.X-Banned = "check"; return (lookup); } } sub vcl_hash { ## Check if they have a ban in the cache, or if they are going to be banned in cache. if (req.http.X-Banned) { hash_data(req.http.X-Forwarded-For); return (hash); } } sub vcl_error { if (obj.status == 988) { return (restart); } } sub vcl_miss { if (req.http.X-Banned == "check") { error 988 "restarting"; } } }}} This is a successful request. After this request, the second request will not work (Varnish restarts): {{{ 0 Debug - "VCL_error(988, restarting)" 9 BackendOpen b production[47] 172.21.4.182 41813 172.21.4.111 80 9 TxRequest b GET 9 TxURL b http://www.site.com/ 9 TxProtocol b HTTP/1.1 9 TxHeader b User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3 9 TxHeader b Host: www.site.com 9 TxHeader b Accept: */* 9 TxHeader b Proxy-Connection: Keep-Alive 9 TxHeader b X-Forwarded-For: 127.0.0.1 9 TxHeader b X-Varnish: 746583022 9 TxHeader b Accept-Encoding: gzip 9 RxProtocol b HTTP/1.1 9 RxStatus b 200 9 RxResponse b OK 9 RxHeader b Date: Thu, 16 Jun 2011 23:45:54 GMT 9 RxHeader b Server: Apache/2.2.3 (CentOS) 9 RxHeader b Cache-Control: private, proxy-revalidate 9 RxHeader b ETag: "9658bc1e80033b21277323e725948c91" 9 RxHeader b Content-Encoding: gzip 9 RxHeader b Vary: Accept-Encoding 9 RxHeader b Content-length: 11452 9 RxHeader b Content-Type: text/html; charset=utf-8 9 RxHeader b Content-Language: en 9 Fetch_Body b 4 0 1 9 Length b 11452 9 BackendReuse b production[47] 3 SessionOpen c 127.0.0.1 1204 :80 3 ReqStart c 127.0.0.1 1204 746583022 3 RxRequest c HEAD 3 RxURL c http://www.site.com/ 3 RxProtocol c HTTP/1.1 3 RxHeader c User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3 3 RxHeader c Host: www.site.com 3 RxHeader c Accept: */* 3 RxHeader c Proxy-Connection: Keep-Alive 3 VCL_call c recv lookup 3 VCL_call c hash 3 Hash c 127.0.0.1 3 VCL_return c hash 3 VCL_call c miss error 3 VCL_call c error restart 3 VCL_call c recv lookup 3 VCL_call c hash 3 Hash c http://www.site.com/ 3 Hash c www.site.com 3 VCL_return c hash 3 VCL_call c miss fetch 3 Backend c 9 production production[47] 3 TTL c 746583022 RFC 300 1308267955 0 0 0 0 3 VCL_call c fetch deliver 3 ObjProtocol c HTTP/1.1 3 ObjResponse c OK 3 ObjHeader c Date: Thu, 16 Jun 2011 23:45:54 GMT 3 ObjHeader c Server: Apache/2.2.3 (CentOS) 3 ObjHeader c Cache-Control: private, proxy-revalidate 3 ObjHeader c ETag: "9658bc1e80033b21277323e725948c91" 3 ObjHeader c Content-Encoding: gzip 3 ObjHeader c Vary: Accept-Encoding 3 ObjHeader c Content-Type: text/html; charset=utf-8 3 ObjHeader c Content-Language: en 3 Gzip c u F - 11452 46817 80 80 91551 3 VCL_call c deliver deliver 3 TxProtocol c HTTP/1.1 3 TxStatus c 200 3 TxResponse c OK 3 TxHeader c Server: Apache/2.2.3 (CentOS) 3 TxHeader c Cache-Control: private, proxy-revalidate 3 TxHeader c ETag: "9658bc1e80033b21277323e725948c91" 3 TxHeader c Vary: Accept-Encoding 3 TxHeader c Content-Type: text/html; charset=utf-8 3 TxHeader c Content-Language: en 3 TxHeader c Date: Thu, 16 Jun 2011 23:45:54 GMT 3 TxHeader c X-Varnish: 746583022 3 TxHeader c Age: 0 3 TxHeader c Via: 1.1 varnish 3 TxHeader c Connection: keep-alive 3 Length c 0 3 ReqEnd c 746583022 1308267954.333659887 1308267954.527986050 0.000048876 0.194267035 0.000059128 3 Debug c herding 3 SessionClose c no request 3 StatSess c 127.0.0.1 1204 0 1 1 0 0 1 344 0 0 Backend_health - production[33] Still healthy ------- 4 3 8 0.000000 0.000272 3 SessionOpen c 172.21.4.16 57711 :80 3 SessionClose c EOF }}} Regards, -david -- -- Ticket URL: <http://varnish-cache.org/trac/ticket/965#comment:3> Varnish <http://varnish-cache.org/> The Varnish HTTP Accelerator _______________________________________________ varnish-bugs mailing list varnish-bugs [at] varnish-cache https://www.varnish-cache.org/lists/mailman/listinfo/varnish-bugs
|