-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Izak Burger wrote:
Tres Seaver wrote:
You might also look at "fixing" varnish: I don't know of any valid reason for it to be using the "half-open" connection model to test that an HTTP-based backend is "up" -- certainly no browser in the world does that; instead, modern browsers nearly always try to keep the connection open for subsequent requests.
I have already "fixed" varnish, I commented out the shutdown() call. It now works as expected.
I just had a discussion about this with a colleague and it appears unclear exactly where to blame this.
When a client half-closes its connection while the server was calling recv(), it makes absolute sense that recv() SHOULD return an empty buffer. There is nothing to return, and there won't ever be, the connection has been closed. Python is therefore not to blame, even if it doesn't specifically check all the possible revents returned by poll().
When asyncore receives an empty result from recv(), it does correctly assume that the connection was shut down. It doesn't seem wrong for asyncore to let the upper layers know about this. It would seem that asyncore is not to blame either.
When asyncore calls the close() method inside zope, it ends up shuting down the whole thing. Though I could argue that zope shouldn't be doing this, the idea of a half-open connection doesn't work all that well in python/asyncore anyway, so given the framework within which zope operates, zope isn't to blame either.
Given that no browser (that I know of) does this half-closing thing, I would argue that varnish should at the very least offer a shutdown option for probing, so as to appear more like a browser.
In addition, HTTP 1.1 usually leaves the connection open unless you ask for it to be closed, so it almost seems more common not to shutdown the one end.
It seems then that the only way to "fix" this is to either put zope behind apache or something else that can handle half-closing, or to "fix" varnish.
Spot on -- good analysis of the problem. Tres. - -- =================================================================== Tres Seaver +1 540-429-0999 tseaver@palladion.com Palladion Software "Excellence by Design" http://palladion.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkrYoMoACgkQ+gerLs4ltQ7X/QCfYFSSp1MOVuTryLynCvS3Khs9 AuMAn0bxsQ6zYdl82V4Ye5iFuFptL5tQ =ka8O -----END PGP SIGNATURE-----