[Varnish] #222: On Solaris, request is not sent to the backend and varnish reports 503
Varnish
varnish-bugs at projects.linpro.no
Sat Mar 15 00:58:51 CET 2008
#222: On Solaris, request is not sent to the backend and varnish reports 503
--------------------+-------------------------------------------------------
Reporter: jyri | Owner: des
Type: defect | Status: new
Priority: normal | Milestone:
Component: build | Version: trunk
Severity: major | Keywords:
--------------------+-------------------------------------------------------
Compiled varnish on Solaris (from trunk, currently @r2605) and I see it
doesn't send any request traffic to the backend server (no network traffic
generated) and it just comes back with a 503 error.
Problem turned out to be that WRK_Flush() attempts to writev() more than
IOV_MAX elements, which fails (unlike glibc, in Solaris that's a hard
limit).
The root cause is that in cache.h where MAX_IOVS is defined, it checks
#if (IOV_MAX < (HTTP_HDR_MAX * 2))
but at this point HTTP_HDR_MAX isn't yet defined, so unless IOV_MAX is <
0,
that's never true ;-)
Attached is a patch that defines a HTTP_HDR_MAX_VAL so it is available to
the preprocessor. With this change, MAX_IOVS gets set compatibly on
Solaris and requests now make it to the backend server.
As an aside, this wasn't immediately obvious because WRK_Flush() doesn't
check for error (-1) from writev. I didn't touch this part in the attached
patch yet, but would like to suggest some error logging at that point,
if (i != w->liov) {
w->werr++;
if (i < 0) { ...log write error... }
}
Thanks!
--
Ticket URL: <http://varnish.projects.linpro.no/ticket/222>
Varnish <http://varnish.projects.linpro.no/>
The Varnish HTTP Accelerator
More information about the varnish-bugs
mailing list