mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-21 05:06:56 +00:00
haproxy public development tree
While HTTP makes no promises of sub-message delivery, haproxy tries to make reasonable efforts to be friendly to applications relying on this, particularly though the "option http-no-delay" statement. However, it was reported that when slz compression is being used, a few bytes can remain pending for more data to complete them in the SLZ queue when built on a 64-bit little endian architecture. This is because aligning blocks on byte boundary is costly (requires to switch to literals and to send 4 bytes of block size), so incomplete bytes are left pending there until they reach at least 32 bits. On other architecture, the queue is only 8 bits long. Robert Newson from Apache's CouchDB project explained that the heartbeat used by CouchDB periodically delivers a single LF character, that it used to work fine before the change enlarging the queue for 64-bit platforms, but only forwards once every 3 LF after the change. This was definitely caused by this incomplete byte sequence queuing. Zlib is not affected, and the code shows that ->flush() is always called. In the case of SLZ, the called function is rfc195x_flush_or_finish() and when its "finish" argument is zero, no flush is performed because there was no such flush() operation. The previous patch implemented a flush() operation in SLZ, and this one makes rfc195x_flush_or_finish() call it when finish==0. This way each delivered data block will now provoke a flush of the queue as is done with zlib. This may very slightly degrade the compression ratio, but another change is needed to condition this on "option http-no-delay" only in order to be consistent with other parts of the code. This patch (and the preceeding slz one) should be backported at least to 2.6, but any further change to depend on http-no-delay should not. |
||
---|---|---|
.github | ||
addons | ||
admin | ||
dev | ||
doc | ||
examples | ||
include | ||
reg-tests | ||
scripts | ||
src | ||
tests | ||
.cirrus.yml | ||
.gitattributes | ||
.gitignore | ||
.mailmap | ||
.travis.yml | ||
BRANCHES | ||
BSDmakefile | ||
CHANGELOG | ||
CONTRIBUTING | ||
INSTALL | ||
LICENSE | ||
MAINTAINERS | ||
Makefile | ||
README | ||
SUBVERS | ||
VERDATE | ||
VERSION |
The HAProxy documentation has been split into a number of different files for ease of use. Please refer to the following files depending on what you're looking for : - INSTALL for instructions on how to build and install HAProxy - BRANCHES to understand the project's life cycle and what version to use - LICENSE for the project's license - CONTRIBUTING for the process to follow to submit contributions The more detailed documentation is located into the doc/ directory : - doc/intro.txt for a quick introduction on HAProxy - doc/configuration.txt for the configuration's reference manual - doc/lua.txt for the Lua's reference manual - doc/SPOE.txt for how to use the SPOE engine - doc/network-namespaces.txt for how to use network namespaces under Linux - doc/management.txt for the management guide - doc/regression-testing.txt for how to use the regression testing suite - doc/peers.txt for the peers protocol reference - doc/coding-style.txt for how to adopt HAProxy's coding style - doc/internals for developer-specific documentation (not all up to date)