]> git.ipfire.org Git - thirdparty/haproxy.git/log
thirdparty/haproxy.git
14 years ago[MEDIUM] Implement tcp inspect response rules
Emeric Brun [Thu, 23 Sep 2010 15:56:44 +0000 (17:56 +0200)] 
[MEDIUM] Implement tcp inspect response rules

14 years ago[BUG] stick table entries expire on counters updates/read or show table, even if...
Emeric Brun [Thu, 23 Sep 2010 16:11:05 +0000 (18:11 +0200)] 
[BUG] stick table entries expire on counters updates/read or show table, even if there is no "expire" parameter

14 years ago[BUG] stick table purge failure if size less than 255
Emeric Brun [Thu, 23 Sep 2010 16:10:00 +0000 (18:10 +0200)] 
[BUG] stick table purge failure if size less than 255

If table size is lower than 256, we can't force to purge old entries.
This patch should be backported to 1.4.

14 years ago[BUG] session: don't stop forwarding of data upon last packet
Willy Tarreau [Sun, 7 Nov 2010 19:26:56 +0000 (20:26 +0100)] 
[BUG] session: don't stop forwarding of data upon last packet

If a read shutdown is encountered on the first packet of a connection
right after the data and the last analyser is unplugged at the same
time, then that last data chunk may never be forwarded. In practice,
right now it cannot happen on requests due to the way they're scheduled,
nor can it happen on responses due to the way their analysers work.

But this behaviour has been observed with new response analysers being
developped.

The reason is that when the read shutdown is encountered and an analyser
is present, data cannot be forwarded but the BF_SHUTW_NOW flag is set.
After that, the analyser gets called and unplugs itself, hoping that
process_session() will automatically forward the data. This does not
happen due to BF_SHUTW_NOW.

Simply removing the test on this flag is not enough because then aborted
requests still get forwarded, due to the forwarding code undoing the
abort.

The solution here consists in checking BF_SHUTR_NOW instead of BF_SHUTW_NOW.
BF_SHUTR_NOW is only set on aborts and remains set until ->shutr() is called.
This is enough to catch recent aborts but not prevent forwarding in other
cases. Maybe a new special buffer flag "BF_ABORT" might be desirable in the
future.

This patch does not need to be backported because older versions don't
have the analyser which make the problem appear.

14 years ago[MINOR] config: detect options not supported due to compilation options
Cyril Bonté [Mon, 1 Nov 2010 18:26:00 +0000 (19:26 +0100)] 
[MINOR] config: detect options not supported due to compilation options

Some options depends on the target architecture or compilation options.
When such an option is used on a compiled version that doesn't support it,
it's probably better to identify it as an unsupported option due to
compilation options instead of an unknown option.

Edit: better check on the empty capability than on the option bits. -Willy

14 years ago[CLEANUP] Remove unneeded chars allocation
Cyril Bonté [Mon, 1 Nov 2010 18:26:02 +0000 (19:26 +0100)] 
[CLEANUP] Remove unneeded chars allocation

Some arrays used to log addresses add some more bytes for ports but this space
is never used.

14 years ago[MEDIUM] unix sockets: cleanup the error reporting path
Willy Tarreau [Sun, 7 Nov 2010 11:10:51 +0000 (12:10 +0100)] 
[MEDIUM] unix sockets: cleanup the error reporting path

There were a lot of snprintf() everywhere in the UNIX bind code. Now we
proceed as for tcp and indicate the socket path at the end between square
brackets. The code is smaller and more readable.

14 years ago[MINOR] startup: print the proxy socket which caused an error
Cyril Bonté [Mon, 1 Nov 2010 18:26:01 +0000 (19:26 +0100)] 
[MINOR] startup: print the proxy socket which caused an error

Add the address and port to the error message of the proxy socket that caused
the error. This can be helpful when several listening addresses are used in a
proxy.

Edit: since we now also support unix sockets (which already report their
      path), better move the address reporting to proto_tcp.c by analogy.
      -Willy

14 years ago[MINOR] move MAXPATHLEN definition to compat.h
Willy Tarreau [Sun, 7 Nov 2010 10:44:13 +0000 (11:44 +0100)] 
[MINOR] move MAXPATHLEN definition to compat.h

MAXPATHLEN may be used at other places, it's unconvenient to have it
redefined in a few files. Also, since checking it requires including
sys/param.h, some versions of it cause a macro declaration conflict
with MIN/MAX which are defined in tools.h. The solution consists in
including sys/param.h in both files so that we ensure it's loaded
before the macros are defined and MAXPATHLEN is checked.

14 years ago[DOC] add references to unix socket handling
Willy Tarreau [Tue, 9 Nov 2010 11:46:41 +0000 (12:46 +0100)] 
[DOC] add references to unix socket handling

UNIX listening sockets have some additional options and may log slightly
differently.

14 years ago[MINOR] cfgparse: report support of <path> for the 'bind' statements
Willy Tarreau [Tue, 9 Nov 2010 08:50:37 +0000 (09:50 +0100)] 
[MINOR] cfgparse: report support of <path> for the 'bind' statements

"bind" now supports unix sockets, so report that in the error message.

14 years ago[MEDIUM] Add supports of bind on unix sockets.
Emeric Brun [Fri, 22 Oct 2010 15:59:25 +0000 (17:59 +0200)] 
[MEDIUM] Add supports of bind on unix sockets.

14 years ago[MINOR] Support listener's sockets unix on http logs.
Emeric Brun [Fri, 22 Oct 2010 15:23:04 +0000 (17:23 +0200)] 
[MINOR] Support listener's sockets unix on http logs.

Enhance controls of sockets family on X-Forwarded-For and X-Original-To insert

14 years ago[MINOR] Enhance controls of socket's family on acls and pattern fetch
Emeric Brun [Fri, 22 Oct 2010 15:14:01 +0000 (17:14 +0200)] 
[MINOR] Enhance controls of socket's family on acls and pattern fetch

14 years ago[MINOR] Manage socket type unix for some logs
Emeric Brun [Fri, 22 Oct 2010 15:42:55 +0000 (17:42 +0200)] 
[MINOR] Manage socket type unix for some logs

14 years ago[MINOR] Add some tests on sockets family for port remapping and mode transparent.
Emeric Brun [Fri, 22 Oct 2010 14:36:33 +0000 (16:36 +0200)] 
[MINOR] Add some tests on sockets family for port remapping and mode transparent.

14 years ago[MINOR] Support of unix listener sockets for debug and log event messages on frontend.c
Emeric Brun [Fri, 22 Oct 2010 14:33:18 +0000 (16:33 +0200)] 
[MINOR] Support of unix listener sockets for debug and log event messages on frontend.c

14 years ago[MINOR] Manage unix socket source field on session dump on sock stats
Emeric Brun [Fri, 22 Oct 2010 14:19:01 +0000 (16:19 +0200)] 
[MINOR] Manage unix socket source field on session dump on sock stats

14 years ago[MINOR] Manage unix socket source field on logs
Emeric Brun [Fri, 22 Oct 2010 14:14:31 +0000 (16:14 +0200)] 
[MINOR] Manage unix socket source field on logs

14 years ago[MEDIUM] Enhance message errors management on binds
Emeric Brun [Fri, 22 Oct 2010 14:06:11 +0000 (16:06 +0200)] 
[MEDIUM] Enhance message errors management on binds

14 years ago[DOC] document the 'accept-proxy' bind option
Willy Tarreau [Fri, 29 Oct 2010 19:56:16 +0000 (21:56 +0200)] 
[DOC] document the 'accept-proxy' bind option

This option enables the PROXY protocol over incoming connections.

14 years ago[DOC] add the proxy protocol's specifications
Willy Tarreau [Fri, 29 Oct 2010 19:46:16 +0000 (21:46 +0200)] 
[DOC] add the proxy protocol's specifications

14 years ago[MINOR] frontend: add tcpv6 support on accept-proxy bind
Emeric Brun [Fri, 29 Oct 2010 10:03:03 +0000 (12:03 +0200)] 
[MINOR] frontend: add tcpv6 support on accept-proxy bind

14 years ago[MINOR] frontend: improve accept-proxy header parsing
Emeric Brun [Fri, 29 Oct 2010 13:16:55 +0000 (15:16 +0200)] 
[MINOR] frontend: improve accept-proxy header parsing

The accept-proxy now automatically fails as soon as a character does not
match the expected syntax.

14 years ago[MEDIUM] session: call the frontend_decode_proxy analyser on proxied connections
Willy Tarreau [Fri, 15 Oct 2010 21:25:20 +0000 (23:25 +0200)] 
[MEDIUM] session: call the frontend_decode_proxy analyser on proxied connections

This analyser must absolutely be the earliest one to process contents, given
the nature of the protocol.

14 years ago[MINOR] frontend: add a new analyser to parse a proxied connection
Willy Tarreau [Fri, 15 Oct 2010 21:23:19 +0000 (23:23 +0200)] 
[MINOR] frontend: add a new analyser to parse a proxied connection

The introduction of a new PROXY protocol for proxied connections requires
an early analyser to decode the incoming connection and set the session
flags accordingly.

Some more work is needed, among which setting a flag on the session to
indicate it's proxied, and copying the original parameters for later
comparisons with new ACLs (eg: real_src, ...).

14 years ago[MINOR] standard: change arg type from const char* to char*
Willy Tarreau [Fri, 15 Oct 2010 21:21:42 +0000 (23:21 +0200)] 
[MINOR] standard: change arg type from const char* to char*

inetaddr_host_lim_ret() used to make use of const char** for some
args, but that make it impossible ot use char** due to the way
controls are made by gcc. So let's change that.

14 years ago[MINOR] standard: add read_uint() to parse a delimited unsigned integer
Willy Tarreau [Fri, 15 Oct 2010 21:19:55 +0000 (23:19 +0200)] 
[MINOR] standard: add read_uint() to parse a delimited unsigned integer

This function parses an integer and returns it along with the pointer to the
next char not part of the number.

14 years ago[MINOR] listener: add the "accept-proxy" option to the "bind" keyword
Willy Tarreau [Fri, 15 Oct 2010 12:27:08 +0000 (14:27 +0200)] 
[MINOR] listener: add the "accept-proxy" option to the "bind" keyword

This option will enable the AN_REQ_DECODE_PROXY analyser on the requests
that come from those listeners.

14 years ago[MINOR] buffers: add a new request analyser flag for PROXY mode
Willy Tarreau [Fri, 15 Oct 2010 12:12:12 +0000 (14:12 +0200)] 
[MINOR] buffers: add a new request analyser flag for PROXY mode

Since it must be the first analyser, the other flags have been renumbered.

14 years ago[CONTRIB] halog: minor speed improvement in timer parser
Willy Tarreau [Thu, 28 Oct 2010 18:39:50 +0000 (20:39 +0200)] 
[CONTRIB] halog: minor speed improvement in timer parser

The timer parser looks for the next slash after the last timer, which is
very far away. Those 4 occurrences have been fixed to match the way it's
done in URL sorting, which is faster. Average speed gain is 5-6% on -srv
and -pct.
(cherry picked from commit 3555671c93695f48c02ef05c8bb228523f17ca20)

14 years ago[CONTRIB] halog: report per-url counts, errors and times
Willy Tarreau [Thu, 28 Oct 2010 18:33:46 +0000 (20:33 +0200)] 
[CONTRIB] halog: report per-url counts, errors and times

Using -u{,c,e,t,a,to,ao} it is possible to get per-URL statistics, sorted by
URL, request count, error count, total time, avg time, total time on OK requests,
avg time on OK requests.

Since it has to parse URLs and store a number of fields, it's quite slower
than other methods, but still correct for production usage (typically 800000
lines or 270 MB per second on a 2 GHz system).

Results are sorted in reverse order so that it's easy to catch them by piping
the output to the "head" command.
(cherry picked from commit 15ce7f56d15f839ce824279b84ffe14c58e41fda)

14 years ago[BUG] ebtree: fix duplicate strings insertion
Willy Tarreau [Thu, 28 Oct 2010 20:48:29 +0000 (22:48 +0200)] 
[BUG] ebtree: fix duplicate strings insertion

(update to ebtree 6.0.4)

Recent fix fd301cc1370cd4977fe175dfa4544c7dc0e7ce6b was not OK because it
was returning one excess byte, causing some duplicates not to be detected.
The reason is that we added 8 bits to count the trailing zero but they
were implied by the pre-incrementation of the pointer.

Fixing this was still not enough, as the problem appeared when
string_equal_bits() was applied on two identical strings, and it returned
a number of bits covering the trailing zero. Subsequent calls were applied
to the first byte after this trailing zero. It was often zero when doing
insertion from raw files, explaining why the issue was not discovered
earlier. But when the data is from a reused area, duplicate strings are not
correctly detected when inserting into the tree.

Several solutions were tested, and the only efficient one consists in making
string_equal_bits() notify the caller that the end of the string was reached.
It now returns zero and the callers just have to ensure that when they get a
zero, they stop using that bit until a dup tree or a leaf is encountered.

This fix brought the unexpected bonus of simplifying the insertion code a bit
and making it slightly faster to process duplicates.

The impact for haproxy was that if many similar string patterns were loaded
from a file, there was a potential risk that their insertion or matching could
have been slower. The bigger impact was with the URL sorting feature of halog,
which is not yet merged and is how this bug was discovered.
(cherry picked from commit 518d59ec9ba43705f930f9ece3749c450fd005df)

14 years ago[CONTRIB] Update Cacti Tempates
Krzysztof Piotr Oledzki [Mon, 25 Oct 2010 12:59:22 +0000 (14:59 +0200)] 
[CONTRIB] Update Cacti Tempates

This patch adds new haproxy_socket.xml template and updates
haproxy_backend.xml and haproxy_frontend.xml templates.
(cherry picked from commit 67cd1d55b5513e4186f021a7014e9442fd7a710f)

14 years ago[CONTRIB] Update haproxy.pl
Krzysztof Piotr Oledzki [Mon, 25 Oct 2010 14:04:17 +0000 (16:04 +0200)] 
[CONTRIB] Update haproxy.pl

This patch adds support for Sockets and several
new variables available in the 1.4 branch.
(cherry picked from commit d049c84fdc9e35472a3db87e45069afd92bee01d)

14 years ago[MINOR] cookie: add support for the "preserve" option
Willy Tarreau [Sat, 23 Oct 2010 10:46:42 +0000 (12:46 +0200)] 
[MINOR] cookie: add support for the "preserve" option

This option makes haproxy preserve any persistence cookie emitted by
the server, which allows the server to change it or to unset it, for
instance, after a logout request.
(cherry picked from commit 52e6d75374c7900c1fe691c5633b4ae029cae8d5)

14 years ago[BUG] cookie: correctly unset default cookie parameters
Willy Tarreau [Sat, 23 Oct 2010 09:37:27 +0000 (11:37 +0200)] 
[BUG] cookie: correctly unset default cookie parameters

When a backend defines a new cookie, it forgot to unset any params
that could have been set in a defaults section, resulting in configs
that would sometimes refuse to load or not work as expected.
(cherry picked from commit f80bf174ed905a29a3ed8ee91fcd528da6df174f)

14 years ago[DOC] fix typos about bind-process syntax
Willy Tarreau [Sat, 23 Oct 2010 09:22:08 +0000 (11:22 +0200)] 
[DOC] fix typos about bind-process syntax

Reported by Tijn Lambrechtsen.
(cherry picked from commit 365cddc61dec824c7edcfca7cf974222a42f4896)

14 years ago[MINOR] acl: add the http_req_first match
Willy Tarreau [Fri, 22 Oct 2010 18:04:13 +0000 (20:04 +0200)] 
[MINOR] acl: add the http_req_first match

This match returns true when the request calling it is the first one of
a connection.
(cherry picked from commit 922ca979c50653c415852531f36fe409190ad76b)

14 years ago[BUG] proto_tcp: potential bug on pattern fetch dst and dport
emeric [Fri, 22 Oct 2010 15:06:26 +0000 (17:06 +0200)] 
[BUG] proto_tcp: potential bug on pattern fetch dst and dport

Pattern fetches relying on destination address must first fetch
the address if it has not been done yet.

(cherry picked from commit 21abf441feb318b2ccd7df590fd89e9e824627f6)

14 years ago[CONTRIB] add templates for Cacti.
Mathieu Trudel [Fri, 22 Oct 2010 15:08:48 +0000 (17:08 +0200)] 
[CONTRIB] add templates for Cacti.

Hi,

I've attached the templates I've built for monitoring backends and
frontends of haproxy.

To install these, you will need to copy the XML files from the contrib/
directory of the haproxy distribution into a directory that Cacti can
reach, and edit the Data Queries "HaProxy Backends" and "HAProxy
Frontends" accordingly (the "XML Path" field. It's also dependant on
having a version of net-snmp that supports embedded Perl, and including
the "perl do 'path_to_haproxy.pl';" directive in your snmpd.conf file.

As for what is created:

- For the devices, you have two new data queries to choose from, they
can be added from the Devices page for each device, at the very end in
the drop-down box, then click "Add". The data queries are called
"HaProxy Backends" and "HAProxy Frontends".

- From "HaProxy Backends": in the new graphs page, you can choose which
backend to graph, and create one of two graphs:
- Haproxy backend traffic:  ingress and egress bytes.
- Haproxy backend sessions:  total sessions with _reponse_ errors.

- From "HAProxy Frontends": in the new graphs page again, you can choose
which frontend to graph, which will include aggregated data for the
backends behind it, obviously. You can create one of two graphs:
- Haproxy frontend traffic:  ingress and egress bytes.
- Haproxy frontend sessions:  total sessions with _request_ errors.

In the graphs and data sources, limits are set to reasonably high values
to support up to nearly 10G traffic, and up to 10000 concurrent
connections.

/ Matt
(cherry picked from commit f63090f2e85cdb7448071cdceb2eb5fabd2b9320)

14 years ago[MINOR] add better support to "mysql-check"
Hervé COMMOWICK [Mon, 18 Oct 2010 13:58:36 +0000 (15:58 +0200)] 
[MINOR] add better support to "mysql-check"

The MySQL check has been revamped to be able to send real MySQL data,
and to avoid Aborted connects on MySQL side.
It is however backward compatible with older version, but it is highly
recommended to use the new mode, by adding "user <username>" on the
"mysql-check" line.

The new check consists in sending two MySQL packet, one Client
Authentication packet, with "haproxy" username (by default), and one
QUIT packet, to correctly close MySQL session. We then parse the Mysql
Handshake Initialisation packet and/or Error packet. It is a basic but
useful test which does not produce error nor aborted connect on the
server.
(cherry picked from commit a1e4dcfe5718311b7653d7dabfad65c005d0439b)

14 years ago[MINOR] checks: ensure that we can inherit binary checks from the defaults section
Willy Tarreau [Fri, 22 Oct 2010 14:15:31 +0000 (16:15 +0200)] 
[MINOR] checks: ensure that we can inherit binary checks from the defaults section

Health checks were all pure ASCII, but we're going to have to support some
binary checks (eg: SQL). When they're inherited from the default section,
they will be truncated to the first \0 due to strdup(). Let's fix that with
a simple malloc.
(cherry picked from commit 98fc04a766bcff80f57db2b1cd865c91761b131b)

14 years ago[BUG] config: report correct keywords for "observe"
Willy Tarreau [Fri, 22 Oct 2010 12:53:40 +0000 (14:53 +0200)] 
[BUG] config: report correct keywords for "observe"

Keywords were changed just before the commit but not in the help message.
Spotted by Hank A. Paulson.
(cherry picked from commit fdd46a0766dccec704aa1bd5acb0ac99a801c549)

14 years ago[MEDIUM] checks: set server state to one state from failure when leaving maintenance
Willy Tarreau [Fri, 22 Oct 2010 12:39:02 +0000 (14:39 +0200)] 
[MEDIUM] checks: set server state to one state from failure when leaving maintenance

When we're enabling a server again (unix CLI or stats interface), we must not mark
it completely up because it can take a while before a failure is detected. So we
mark it one step above failure, which means it's up but will be marked down upon
first failure.
(cherry picked from commit 83c3e06452457ed5660fc814cbda5bf878bf19a2)

14 years ago[DOC] stats: document the "stats admin" statement
Cyril Bonté [Mon, 11 Oct 2010 22:14:37 +0000 (00:14 +0200)] 
[DOC] stats: document the "stats admin" statement

(cherry picked from commit ebf0595f9b554f22c6bccbbb6252b89cf8f25626)

14 years ago[MEDIUM] stats: add an admin level
Cyril Bonté [Mon, 11 Oct 2010 22:14:36 +0000 (00:14 +0200)] 
[MEDIUM] stats: add an admin level

The stats web interface must be read-only by default to prevent security
holes. As it is now allowed to enable/disable servers, a new keyword
"stats admin" is introduced to activate this admin level, conditioned by ACLs.
(cherry picked from commit 5334bab92ca7debe36df69983c19c21b6dc63f78)

14 years ago[MEDIUM] enable/disable servers from the stats web interface
Cyril Bonté [Mon, 11 Oct 2010 22:14:35 +0000 (00:14 +0200)] 
[MEDIUM] enable/disable servers from the stats web interface

Based on a patch provided by Judd Montgomery, it is now possible to
enable/disable servers from the stats web interface. This allows to select
several servers in a backend and apply the action to them at the same time.

Currently, there are 2 known limitations :
- The POST data are limited to one packet
  (don't alter too many servers at a time).
- Expect: 100-continue is not supported.
(cherry picked from commit 7693948766cb5647ac03b48e782cfee2b1f14491)

14 years ago[BUG] checks: don't log backend down for all zero-weight servers
Willy Tarreau [Sun, 17 Oct 2010 15:16:42 +0000 (17:16 +0200)] 
[BUG] checks: don't log backend down for all zero-weight servers

In a down backend, when a zero-weight server is lost, a new
"backend down" message was emitted and the down transition of that
backend was wrongly increased. This change ensures that we don't
count that transition again.

This patch should be backported to 1.3.
(cherry picked from commit 60efc5f745b5fa70d811f977727592e47e32a281)

14 years ago[DOC] document the cookie maxidle and maxlife parameters
Willy Tarreau [Wed, 13 Oct 2010 17:30:47 +0000 (19:30 +0200)] 
[DOC] document the cookie maxidle and maxlife parameters

(cherry picked from commit 9904877ebe8a0710c4b0c44b9d895b0a5cf947eb)

14 years ago[MEDIUM] cookie: set the date in the cookie if needed
Willy Tarreau [Thu, 7 Oct 2010 19:00:29 +0000 (21:00 +0200)] 
[MEDIUM] cookie: set the date in the cookie if needed

If a maxidle or maxlife parameter is set on the persistence cookie in
insert mode and the client did not provide a recent enough cookie,
then we emit a new cookie with a new last_seen date and the same
first_seen (if maxlife is set). Recent enough here designates a
cookie that would be rounded to the same date. That way, we can
refresh a cookie when required without doing it in all responses.

If the request did not contain such parameters, they are set anyway.
This means that a monitoring request that is forced to a server will
get an expiration date anyway, but this should not be a problem given
that the client is able to set its cookie in this case. This also
permits to force an expiration date on visitors who previously did
not have one.

If a request comes with a dated cookie while no date check is performed,
then a new cookie is emitted with no date, so that we don't risk dropping
the user too fast due to a very old date when we re-enable the date check.

All requests that were targetting the correct server and which had their
expiration date added/updated/removed in the response cookie are logged
with the 'U' ("updated") flag instead of the 'I' ("inserted"). So very
often we'll see "VU" instead of "VN".
(cherry picked from commit 8b3c6ecab6d37be5f3655bc3a2d2c0f9f37325eb)

14 years ago[MEDIUM] cookie: check for maxidle and maxlife for incoming dated cookies
Willy Tarreau [Thu, 7 Oct 2010 18:06:11 +0000 (20:06 +0200)] 
[MEDIUM] cookie: check for maxidle and maxlife for incoming dated cookies

If a cookie comes in with a first or last date, and they are configured on
the backend, they're checked. If a date is expired or too far in the future,
then the cookie is ignored and the specific reason appears in the cookie
field of the logs.
(cherry picked from commit faa3019107eabe6b3ab76ffec9754f2f31aa24c6)

14 years ago[MINOR] add encode/decode function for 30-bit integers from/to base64
Willy Tarreau [Thu, 7 Oct 2010 17:27:29 +0000 (19:27 +0200)] 
[MINOR] add encode/decode function for 30-bit integers from/to base64

These functions only require 5 chars to encode 30 bits, and don't expect
any padding. They will be used to encode dates in cookies.
(cherry picked from commit a7e2b5fc4612994c7b13bcb103a4a2c3ecd6438a)

14 years ago[MEDIUM] cookie: reassign set-cookie status flags to store more states
Willy Tarreau [Thu, 7 Oct 2010 13:54:11 +0000 (15:54 +0200)] 
[MEDIUM] cookie: reassign set-cookie status flags to store more states

The set-cookie status flags were not very handy and limited. Reorder
them to save some room for additional values and add the "U" flags
(for Updated expiration date) that will be used with expirable cookies
in insert mode.
(cherry picked from commit 5bab52f821bb0fa99fc48ad1b400769e66196ece)

14 years ago[MINOR] cookie: add the expired (E) and old (O) flags for request cookies
Willy Tarreau [Thu, 7 Oct 2010 13:28:23 +0000 (15:28 +0200)] 
[MINOR] cookie: add the expired (E) and old (O) flags for request cookies

These flags will indicate the cookie status when an expiration date is
set.
(cherry picked from commit 3f0f0e4583a432d34b75bc7b9dd2c756b4e181a7)

14 years ago[MINOR] http: make some room in the transaction flags to extend cookies
Willy Tarreau [Wed, 6 Oct 2010 17:38:55 +0000 (19:38 +0200)] 
[MINOR] http: make some room in the transaction flags to extend cookies

We'll need one more bit to store and report the request cookie's status.
Doing this required moving a few bits around. However, now in 1.4 all bits
are used, there's no room left.

Cookie flags will need
(cherry picked from commit 09ebca0413c43620ddc375b5b4ab31a25d47b3f4)

14 years ago[MEDIUM] cookie: support client cookies with some contents appended to their value
Willy Tarreau [Wed, 6 Oct 2010 17:25:55 +0000 (19:25 +0200)] 
[MEDIUM] cookie: support client cookies with some contents appended to their value

In all cookie persistence modes but prefix, we now support cookies whose
value is suffixed with some contents after a vertical bar ('|'). This will
be used to pass an optional expiration date. So as of now we only consider
the part of the cookie value which is used before the vertical bar.
(cherry picked from commit a4486bf4e5b03b5a980d03fef799f6407b2c992d)

14 years ago[MINOR] cookie: add options "maxidle" and "maxlife"
Willy Tarreau [Wed, 6 Oct 2010 14:59:56 +0000 (16:59 +0200)] 
[MINOR] cookie: add options "maxidle" and "maxlife"

Add two new arguments to the "cookie" keyword, to be able to
fix a max idle and max life on them. Right now only the parameter
parsing is implemented.
(cherry picked from commit 9ad5dec4c3bb8f29129f292cb22d3fc495fcc98a)

14 years ago[DOC] fix http-request documentation
Cyril Bonté [Thu, 30 Sep 2010 21:46:30 +0000 (23:46 +0200)] 
[DOC] fix http-request documentation

- fix some erroneous keywords for http-request
- stats http-request was not documented

--
Cyril Bonté
(cherry picked from commit 17e07dad5074571c38cbeb92d54a20f83658449d)

14 years ago[MINOR] global: add "tune.chksize" to change the default check buffer size
Willy Tarreau [Mon, 4 Oct 2010 18:39:20 +0000 (20:39 +0200)] 
[MINOR] global: add "tune.chksize" to change the default check buffer size

HTTP content-based health checks will be involved in searching text in pages.
Some pages may not fit in the default buffer (16kB) and sometimes it might be
desired to have larger buffers in order to find patterns. Running checks on
smaller URIs is always preferred of course.
(cherry picked from commit 043f44aeb835f3d0b57626c4276581a73600b6b1)

14 years ago[TESTS] add test-check-expect to test various http-check methods
Willy Tarreau [Mon, 4 Oct 2010 18:20:05 +0000 (20:20 +0200)] 
[TESTS] add test-check-expect to test various http-check methods

(cherry picked from commit 2f123a994b76598ce1eeeeefe94edbf7c8ff121c)

14 years ago[MEDIUM] checks: add support for HTTP contents lookup
Willy Tarreau [Tue, 16 Mar 2010 17:46:54 +0000 (18:46 +0100)] 
[MEDIUM] checks: add support for HTTP contents lookup

This patch adds the "http-check expect [r]{string,status}" statements
which enable health checks based on whether the response status or body
to an HTTP request contains a string or matches a regex.

This probably is one of the oldest patches that remained unmerged. Over
the time, several people have contributed to it, among which FinalBSD
(first and second implementations), Nick Chalk (port to 1.4), Anze
Skerlavaj (tests and fixes), Cyril Bonté (general fixes), and of course
myself for the final fixes and doc during integration.

Some people already use an old version of this patch which has several
issues, among which the inability to search for a plain string that is
not at the beginning of the data, and the inability to look for response
contents that are provided in a second and subsequent recv() calls. But
since some configs are already deployed, it was quite important to ensure
a 100% compatible behaviour on the working cases.

Thus, that patch fixes the issues while maintaining config compatibility
with already deployed versions.

(cherry picked from commit b507c43a3ce9a8e8e4b770e52e4edc20cba4c37f)

14 years ago[MINOR] checks: add support for LDAPv3 health checks
Gabor Lekeny [Wed, 29 Sep 2010 16:17:05 +0000 (18:17 +0200)] 
[MINOR] checks: add support for LDAPv3 health checks

This patch provides a new "option ldap-check" statement to enable
server health checks based on LDAPv3 bind requests.
(cherry picked from commit b76b44c6fed8a7ba6f0f565dd72a9cb77aaeca7c)

14 years ago[MEDIUM] tcp-request : don't wait for inspect-delay to expire when the buffer is...
Willy Tarreau [Wed, 29 Sep 2010 14:36:16 +0000 (16:36 +0200)] 
[MEDIUM] tcp-request : don't wait for inspect-delay to expire when the buffer is full

If a request buffer is full, there's no point waiting for the timeout to
expire, the contents will not change.

14 years ago[MEDIUM] make it possible to combine http-pretend-keepalived with httpclose
Willy Tarreau [Wed, 29 Sep 2010 12:31:41 +0000 (14:31 +0200)] 
[MEDIUM] make it possible to combine http-pretend-keepalived with httpclose

Some configs may involve httpclose in a frontend and http-pretend-keepalive
in a backend. httpclose used to take priority over keepalive, thus voiding
its effect. This change ensures that when both are combined, keepalive is
still announced to the server while close is announced to the client.
(cherry picked from commit 2be7ec90fa9caf66294f446423bbab2d00db9004)

14 years ago[BUILD] proto_http: eliminate some build warnings with gcc-2.95
Willy Tarreau [Tue, 28 Sep 2010 17:42:42 +0000 (19:42 +0200)] 
[BUILD] proto_http: eliminate some build warnings with gcc-2.95

gcc-2.95 does not like labels before the first case in a switch
statement.
(cherry picked from commit e1c51a861ba0c389d31dfb010e8b188f5f43313a)

14 years ago[BUG] Restore info about available active/backup servers
Krzysztof Piotr Oledzki [Mon, 27 Sep 2010 11:10:50 +0000 (13:10 +0200)] 
[BUG] Restore info about available active/backup servers

Bug introduced by 5f5b7d2c1db1fabe3d372b0080a8773147762ee7

This bug was reported by Guido Krause.
(cherry picked from commit 0c801d1f5ffdc2fe3d036c1e5203d617507c55c3)

14 years ago[BUG] stream_sock: try to flush any extra pending request data after a POST
Willy Tarreau [Tue, 28 Sep 2010 12:16:41 +0000 (14:16 +0200)] 
[BUG] stream_sock: try to flush any extra pending request data after a POST

Some broken browsers still happen to send a CRLF after a POST. Those which
send a CRLF in a second packet have it queued into the system's buffers,
which causes an RST to be emitted by some systems upon close of the response
(eg: Linux). The client may then receive the RST without the last response
segments, resulting in a truncated response.

This change leaves request polling enabled on a POST so that we can flush
any late data from the request buffers.

A more complete workaround would consist in reading from the request for a
long time, until we get confirmation that the close has been ACKed. This
is much more complex and should only be studied for newer versions.
(cherry picked from commit 12e316af4f0245fde12dbc224ebe33c8fea806b2)

14 years ago[BUG] ebtree: string_equal_bits() could return garbage on identical strings
Willy Tarreau [Tue, 28 Sep 2010 09:28:19 +0000 (11:28 +0200)] 
[BUG] ebtree: string_equal_bits() could return garbage on identical strings

(from ebtree 6.0.2)

When inserting duplicates on x86/x86_64, the assembler optimization
does not support equal strings that both end up with a zero, and
can return garbage in the bit number, possibly causing a segfault
for its users. The only case where this can happen appears to be
in ebst_insert().
(cherry picked from commit 006152c62ae56d151188626e6074a79be3928858)

14 years ago[DOC] tcp-request inspect-delay is for backends too
Willy Tarreau [Tue, 14 Sep 2010 09:31:36 +0000 (11:31 +0200)] 
[DOC] tcp-request inspect-delay is for backends too

14 years ago[DOC] missing index entry for http-check send-state
Willy Tarreau [Tue, 12 Oct 2010 04:30:16 +0000 (06:30 +0200)] 
[DOC] missing index entry for http-check send-state

14 years ago[DOC] bind option is "defer-accept", not "defer_accept"
Willy Tarreau [Sat, 2 Oct 2010 09:54:00 +0000 (11:54 +0200)] 
[DOC] bind option is "defer-accept", not "defer_accept"

Thanks to Yohan Tordjman for spotting this.

14 years ago[BUILD] stream_sock: previous fix lacked the #include, causing a warning.
Willy Tarreau [Tue, 21 Sep 2010 19:48:23 +0000 (21:48 +0200)] 
[BUILD] stream_sock: previous fix lacked the #include, causing a warning.

14 years ago[BUG] stream_sock: cleanly disable the listener in case of resource shortage
Willy Tarreau [Tue, 21 Sep 2010 19:14:29 +0000 (21:14 +0200)] 
[BUG] stream_sock: cleanly disable the listener in case of resource shortage

Jozsef R.Nagy reported a reliability issue on FreeBSD. Sometimes an error
would be emitted, reporting the inability to switch a socket to non-blocking
mode and the listener would definitely not accept anything. Cyril Bonté
narrowed this bug down to the call to EV_FD_CLR(l->fd, DIR_RD).

He was right because this call is wrong. It only disables input events on
the listening socket, without setting the listener to the LI_LISTEN state,
so any subsequent call to enable_listener() from maintain_proxies() is
ignored ! The correct fix consists in calling disable_listener() instead.

It is discutable whether we should keep such error path or just ignore the
event. The goal in earlier versions was to temporarily disable new activity
in order to let the system recover while releasing resources.

14 years ago[MINOR] halog: skip non-traffic logs for -st and -tc
Willy Tarreau [Mon, 13 Sep 2010 20:50:49 +0000 (22:50 +0200)] 
[MINOR] halog: skip non-traffic logs for -st and -tc

Those were reporting stupid results in presence of administrative logs.

14 years ago[MINOR] halog: add '-tc' to sort by termination codes
Willy Tarreau [Sun, 12 Sep 2010 15:56:16 +0000 (17:56 +0200)] 
[MINOR] halog: add '-tc' to sort by termination codes

This output lists all encountered termination codes by number of
occurrences.

14 years ago[DOC] fix typo in the avg_queue() and be_conn() definition (backend, not frontend)
Willy Tarreau [Wed, 8 Sep 2010 17:06:18 +0000 (19:06 +0200)] 
[DOC] fix typo in the avg_queue() and be_conn() definition (backend, not frontend)

Reported by Cyril Bonté

14 years ago[MEDIUM] buffers: rework the functions to exchange between SI and buffers
Willy Tarreau [Wed, 8 Sep 2010 15:04:31 +0000 (17:04 +0200)] 
[MEDIUM] buffers: rework the functions to exchange between SI and buffers

There was no consistency between all the functions used to exchange data
between a buffer and a stream interface. Also, the functions used to send
data to a buffer did not consider the possibility that the buffer was
shutdown for read.

Now the functions are called buffer_{put,get}_{char,block,chunk,string}.

The old buffer_feed* functions have been left available for existing code
but marked deprecated.

14 years ago[BUG] stream_interface: only call si->release when both dirs are closed
Willy Tarreau [Tue, 7 Sep 2010 14:16:50 +0000 (16:16 +0200)] 
[BUG] stream_interface: only call si->release when both dirs are closed

si->release() was called each time we closed one direction of a stream
interface, while it should only have been called when both sides are
closed. This bug is specific to 1.5 and only affects embedded tasks.

14 years ago[BUG] deinit: unbind listeners before freeing them
Willy Tarreau [Fri, 3 Sep 2010 08:38:17 +0000 (10:38 +0200)] 
[BUG] deinit: unbind listeners before freeing them

In deinit(), it is possible that we first free the listeners, then
unbind them all. Right now this situation can't happen because the
only way to call deinit() is to pass via a soft-stop which will
already unbind all protocols. But later this might become a problem.

14 years ago[DOC] fix typo in the queue() definition (backend, not frontend)
Willy Tarreau [Wed, 1 Sep 2010 06:06:18 +0000 (08:06 +0200)] 
[DOC] fix typo in the queue() definition (backend, not frontend)

Reported by Benjamin Pineau.

14 years ago[MEDIUM] http: fix space handling in the response cookie parser
Willy Tarreau [Tue, 31 Aug 2010 20:39:35 +0000 (22:39 +0200)] 
[MEDIUM] http: fix space handling in the response cookie parser

This patch addresses exactly the same issues as the previous one, but
for responses this time. It also introduces implicit support for the
Set-Cookie2 header, for which there's almost nothing specific to do
since it is a clean header. This one allows multiple cookies in a
same header, by respecting the HTTP messaging semantics.

The new parser has been tested with insertion, rewrite, passive,
removal, prefixing and captures, and it looks OK. It's still able
to rewrite (or delete) multiple cookies at once. Just as with the
request parser, it tries hard to fix formating of the cookies it
displaces.

This patch too should be backported to 1.4 and possibly to 1.3.

14 years ago[MEDIUM] http: fix space handling in the request cookie parser
Willy Tarreau [Tue, 31 Aug 2010 14:45:02 +0000 (16:45 +0200)] 
[MEDIUM] http: fix space handling in the request cookie parser

The request cookie parser did not allow spaces to appear in cookie
values nor around the equal sign. The various RFCs on the subject
say different things, some suggesting that a space is allowed after
the equal sign and being worded in a way that lets one believe it
is allowed before too. Some spaces may appear inside values and be
part of the values. The quotes allow delimiters to be embedded in
values. The spaces before and after attributes should be trimmed.

The new parser addresses all those points and has been carefully tested.
It fixes misplaced spaces around equal signs before processing the cookies
or forwarding them. It also tries its best to perform clean removals by
always keeping the delimiter after the value being removed and leaving one
space after it.

The variable inside the parser have been renamed to make the code a lot
more understandable, and one multi-function pointer has been eliminated.

Since this patch fixes real possible issues, it should be backported to 1.4
and possibly 1.3, since one (single) case of wrong spaces has been reported
in 1.3.

The code handling the Set-Cookie has not been touched yet.

14 years ago[DOC] fix description of cookie "insert" and "indirect" modes
Willy Tarreau [Tue, 31 Aug 2010 20:54:15 +0000 (22:54 +0200)] 
[DOC] fix description of cookie "insert" and "indirect" modes

The doc was wrong as the insert mode by default does not insert in
direct requests, and by default transmits the cookies to the server.
This was right in the old doc and it has not changed since the
beginning.

14 years ago[DOC] add a summary about cookie incompatibilities between specs and browsers
Willy Tarreau [Tue, 31 Aug 2010 17:26:56 +0000 (19:26 +0200)] 
[DOC] add a summary about cookie incompatibilities between specs and browsers

As many implementations as browsers, none following at least one of the 4
specs.

14 years ago[MINOR] support a global jobs counter
Willy Tarreau [Tue, 31 Aug 2010 13:39:26 +0000 (15:39 +0200)] 
[MINOR] support a global jobs counter

This counter is incremented for each incoming connection and each active
listener, and is used to prevent haproxy from stopping upon SIGUSR1. It
will thus be possible for some tasks in increment this counter in order
to prevent haproxy from dying until they have completed their job.

14 years ago[BUG] http: don't consider commas as a header delimitor within quotes
Willy Tarreau [Mon, 30 Aug 2010 09:06:34 +0000 (11:06 +0200)] 
[BUG] http: don't consider commas as a header delimitor within quotes

The header parser has a bug which causes commas to be matched within
quotes while it was not expected. The way the code was written could
make one think it was OK. The resulting effect is that the following
config would use the second IP address instead of the third when facing
this request :

   source 0.0.0.0 usesrc hdr_ip(X-Forwarded-For,2)

   GET / HTTP/1.0
   X-Forwarded-for: "127.0.0.1, 127.0.0.2", 127.0.0.3

This fix must be backported to 1.4 and 1.3.

14 years ago[RELEASE] Released version 1.5-dev2
Willy Tarreau [Sat, 28 Aug 2010 17:21:00 +0000 (19:21 +0200)] 
[RELEASE] Released version 1.5-dev2

Released version 1.5-dev2 with the following main changes :
    - [MINOR] startup: release unused structs after forking
    - [MINOR] startup: don't wait for nothing when no old pid remains
    - [CLEANUP] reference product branch 1.5
    - [MEDIUM] signals: add support for registering functions and tasks
    - [MEDIUM] signals: support redistribution of signal zero when stopping
    - [BUG] http: don't set auto_close if more data are expected

14 years ago[BUG] http: don't set auto_close if more data are expected
Willy Tarreau [Sat, 28 Aug 2010 16:57:20 +0000 (18:57 +0200)] 
[BUG] http: don't set auto_close if more data are expected

Fix 4fe41902789d188ee4c23b14a7cdbf075463b158 was a bit too strong. It
has caused some chunked-encoded responses to be truncated when a recv()
call could return multiple chunks followed by a close. The reason is
that when a chunk is parsed, only its contents are scheduled to be
forwarded. Thus, the reader sees auto_close+shutr and sets shutw_now.
The sender in turn sends the last scheduled data and does shutw().

Another nasty effect is that it has reduced the keep-alive rate. If
a response did not completely fit into the buffer, then the auto_close
bit was left on and the sender would close upon completion.

The fix consists in not making use of auto_close when chunked encoding
is used nor when keep-alive is used, which makes sense. However it is
maintained on error processing.

Thanks to Cyril Bonté for reporting the issue early.

14 years ago[MEDIUM] signals: support redistribution of signal zero when stopping
Willy Tarreau [Fri, 27 Aug 2010 16:26:11 +0000 (18:26 +0200)] 
[MEDIUM] signals: support redistribution of signal zero when stopping

Signal zero is never delivered by the system. However having a signal to
which functions and tasks can subscribe to be notified of a stopping event
is useful. So this patch does two things :
  1) allow signal zero to be delivered from any function of signal handler
  2) make soft_stop() deliver this signal so that tasks can be notified of
     a stopping condition.

14 years ago[MEDIUM] signals: add support for registering functions and tasks
Willy Tarreau [Fri, 27 Aug 2010 15:56:48 +0000 (17:56 +0200)] 
[MEDIUM] signals: add support for registering functions and tasks

The two new functions below make it possible to register any number
of functions or tasks to a system signal. They will be called in the
registration order when the signal is received.

    struct sig_handler *signal_register_fct(int sig, void (*fct)(struct sig_handler *), int arg);
    struct sig_handler *signal_register_task(int sig, struct task *task, int reason);

14 years ago[CLEANUP] reference product branch 1.5
Willy Tarreau [Fri, 27 Aug 2010 09:09:17 +0000 (11:09 +0200)] 
[CLEANUP] reference product branch 1.5

It still appeared as 1.4 on the stats links.

14 years ago[MINOR] startup: don't wait for nothing when no old pid remains
Willy Tarreau [Wed, 25 Aug 2010 10:58:59 +0000 (12:58 +0200)] 
[MINOR] startup: don't wait for nothing when no old pid remains

In case of binding failure during startup, we wait for some time sending
signals to old pids so that they release the ports we need. But if there
aren't any old pids anymore, it's useless to wait, we prefer to fail fast.
Along with this change, we now have the number of old pids really found
in the nb_oldpids variable.

14 years ago[MINOR] startup: release unused structs after forking
Willy Tarreau [Wed, 25 Aug 2010 10:49:05 +0000 (12:49 +0200)] 
[MINOR] startup: release unused structs after forking

Don't keep the old pid list or chroot place after startup, they won't be used anymore.

14 years ago[RELEASE] Released version 1.5-dev1
Willy Tarreau [Wed, 25 Aug 2010 08:56:53 +0000 (10:56 +0200)] 
[RELEASE] Released version 1.5-dev1

Released version 1.5-dev1 with the following main changes :
    - [BUG] stats: session rate limit gets garbaged in the stats
    - [DOC] mention 'option http-server-close' effect in Tq section
    - [DOC] summarize and highlight persistent connections behaviour
    - [DOC] add configuration samples
    - [BUG] http: dispatch and http_proxy modes were broken for a long time
    - [BUG] http: the transaction must be initialized even in TCP mode
    - [BUG] tcp: dropped connections must be counted as "denied" not "failed"
    - [BUG] consistent hash: balance on all servers, not only 2 !
    - [CONTRIB] halog: report per-server status codes, errors and response times
    - [BUG] http: the transaction must be initialized even in TCP mode (part 2)
    - [BUG] client: always ensure to zero rep->analysers
    - [BUG] session: clear BF_READ_ATTACHED before next I/O
    - [BUG] http: automatically close response if req is aborted
    - [BUG] proxy: connection rate limiting was eating lots of CPU
    - [BUG] http: report correct flags in case of client aborts during body
    - [TESTS] refine non-regression tests and add 4 new tests
    - [BUG] debug: wrong pointer was used to report a status line
    - [BUG] debug: correctly report truncated messages
    - [DOC] document the "dispatch" keyword
    - [BUG] stick_table: fix possible memory leak in case of connection error
    - [CLEANUP] acl: use 'L6' instead of 'L4' in ACL flags relying on contents
    - [MINOR] accept: count the incoming connection earlier
    - [CLEANUP] tcp: move some non tcp-specific layer6 processing out of proto_tcp
    - [CLEANUP] client: move some ACLs away to their respective locations
    - [CLEANUP] rename client -> frontend
    - [MEDIUM] separate protocol-level accept() from the frontend's
    - [MINOR] proxy: add a list to hold future layer 4 rules
    - [MEDIUM] config: parse tcp layer4 rules (tcp-request accept/reject)
    - [MEDIUM] tcp: check for pure layer4 rules immediately after accept()
    - [OPTIM] frontend: tell the compiler that errors are unlikely to occur
    - [MEDIUM] frontend: check for LI_O_TCP_RULES in the listener
    - [MINOR] frontend: only check for monitor-net rules if LI_O_CHK_MONNET is set
    - [CLEANUP] buffer->cto is not used anymore
    - [MEDIUM] session: finish session establishment sequence in with I/O handlers
    - [MEDIUM] session: initialize server-side timeouts after connect()
    - [MEDIUM] backend: initialize the server stream_interface upon connect()
    - [MAJOR] frontend: don't initialize the server-side stream_int anymore
    - [MEDIUM] session: move the conn_retries attribute to the stream interface
    - [MEDIUM] session: don't assign conn_retries upon accept() anymore
    - [MINOR] frontend: rely on the frontend and not the backend for INDEPSTR
    - [MAJOR] frontend: reorder the session initialization upon accept
    - [MINOR] proxy: add an accept() callback for the application layer
    - [MAJOR] frontend: split accept() into frontend_accept() and session_accept()
    - [MEDIUM] stats: rely on the standard session_accept() function
    - [MINOR] buffer: refine the flags that may wake an analyser up.
    - [MINOR] stream_sock: don't dereference a non-existing frontend
    - [MINOR] session: differenciate between accepted connections and received connections
    - [MEDIUM] frontend: count the incoming connection earlier
    - [MINOR] frontend: count denied TCP requests separately
    - [CLEANUP] stick_table: add/clarify some comments
    - [BUILD] memory: add a few missing parenthesis to the pool management macros
    - [MINOR] stick_table: add support for variable-sized data
    - [CLEANUP] stick_table: rename some stksess struct members to avoid confusion
    - [CLEANUP] stick_table: move pattern to key functions to stick_table.c
    - [MEDIUM] stick_table: add room for extra data types
    - [MINOR] stick_table: add support for "conn_cum" data type.
    - [MEDIUM] stick_table: don't overwrite data when storing an entry
    - [MINOR] config: initialize stick tables after all the parsing
    - [MINOR] stick_table: provide functions to return stksess data from a type
    - [MEDIUM] stick_table: move the server ID to a generic data type
    - [MINOR] stick_table: enable it for frontends too
    - [MINOR] stick_table: export the stick_table_key
    - [MINOR] tcp: add per-source connection rate limiting
    - [MEDIUM] stick_table: separate storage and update of session entries
    - [MEDIUM] stick-tables: add a reference counter to each entry
    - [MINOR] session: add a pointer to the tracked counters for the source
    - [CLEANUP] proto_tcp: make the config parser a little bit more flexible
    - [BUG] config: report the correct proxy type in tcp-request errors
    - [MINOR] config: provide a function to quote args in a more friendly way
    - [BUG] stick_table: the fix for the memory leak caused a regression
    - [MEDIUM] backend: support servers on 0.0.0.0
    - [BUG] stick-table: correctly refresh expiration timers
    - [MEDIUM] stream-interface: add a ->release callback
    - [MINOR] proxy: add a "parent" member to the structure
    - [MEDIUM] session: make it possible to call an I/O handler on both SI
    - [MINOR] tools: add a fast div64_32 function
    - [MINOR] freq_ctr: add new types and functions for periods different from 1s
    - [MINOR] errors: provide new status codes for config parsing functions
    - [BUG] http: denied requests must not be counted as denied resps in listeners
    - [MINOR] tools: add a get_std_op() function to parse operators
    - [MEDIUM] acl: make use of get_std_op() to parse intger ranges
    - [MAJOR] stream_sock: better wakeup conditions on read()
    - [BUG] session: analysers must be checked when SI state changes
    - [MINOR] http: reset analysers to listener's, not frontend's
    - [MEDIUM] session: support "tcp-request content" rules in backends
    - [BUILD] always match official tags when doing git-tar
    - [MAJOR] stream_interface: fix the wakeup conditions for embedded iohandlers
    - [MEDIUM] buffer: make buffer_feed* support writing non-contiguous chunks
    - [MINOR] tcp: src_count acl does not have a permanent result
    - [MAJOR] session: add track-counters to track counters related to the session
    - [MINOR] stick-table: provide a table lookup function
    - [MINOR] stick-table: use suffix "_cnt" for cumulated counts
    - [MEDIUM] session: move counter ACL fetches from proto_tcp
    - [MEDIUM] session: add concurrent connections counter
    - [MEDIUM] session: add data in and out volume counters
    - [MINOR] session: add the trk_conn_cnt ACL keyword to track connection counts
    - [MEDIUM] session-counters: automatically update tracked connection count
    - [MINOR] session: add the trk_conn_cur ACL keyword to track concurrent connection
    - [MINOR] session: add trk_kbytes_* ACL keywords to track data size
    - [MEDIUM] session: add a counter on the cumulated number of sessions
    - [MINOR] config: support a comma-separated list of store data types in stick-table
    - [MEDIUM] stick-tables: add support for arguments to data_types
    - [MEDIUM] stick-tables: add stored data argument type checking
    - [MEDIUM] session counters: add conn_rate and sess_rate counters
    - [MEDIUM] session counters: add bytes_in_rate and bytes_out_rate counters
    - [MINOR] stktable: add a stktable_update_key() function
    - [MINOR] session-counters: add a general purpose counter (gpc0)
    - [MEDIUM] session-counters: add HTTP req/err tracking
    - [MEDIUM] stats: add "show table [<name>]" to dump a stick-table
    - [MEDIUM] stats: add "clear table <name> key <value>" to clear table entries
    - [CLEANUP] stick-table: declare stktable_data_types as extern
    - [MEDIUM] stick-table: make use of generic types for stored data
    - [MINOR] stats: correctly report errors on "show table" and "clear table"
    - [MEDIUM] stats: add the ability to dump table entries matching criteria
    - [DOC] configuration: document all the new tracked counters
    - [DOC] stats: document "show table" and "clear table"
    - [MAJOR] session-counters: split FE and BE track counters
    - [MEDIUM] tcp: accept the "track-counters" in "tcp-request content" rules
    - [MEDIUM] session counters: automatically remove expired entries.
    - [MEDIUM] config: replace 'tcp-request <action>' with "tcp-request connection"
    - [MEDIUM] session-counters: make it possible to count connections from frontend
    - [MINOR] session-counters: use "track-sc{1,2}" instead of "track-{fe,be}-counters"
    - [MEDIUM] session-counters: correctly unbind the counters tracked by the backend
    - [CLEANUP] stats: use stksess_kill() to remove table entries
    - [DOC] update the references to session counters and to tcp-request connection
    - [DOC] cleanup: split a few long lines
    - [MEDIUM] http: forward client's close when abortonclose is set
    - [BUG] queue: don't dequeue proxy-global requests on disabled servers
    - [BUG] stats: global stats timeout may be specified before stats socket.
    - [BUG] conf: add tcp-request content rules to the correct list

14 years ago[BUG] conf: add tcp-request content rules to the correct list
Willy Tarreau [Fri, 20 Aug 2010 11:35:41 +0000 (13:35 +0200)] 
[BUG] conf: add tcp-request content rules to the correct list

Due to the change in commit 68c03, the tcp-request content rules were
unfortunately being added to the request rules.

14 years ago[BUG] stats: global stats timeout may be specified before stats socket.
Willy Tarreau [Tue, 17 Aug 2010 19:48:17 +0000 (21:48 +0200)] 
[BUG] stats: global stats timeout may be specified before stats socket.

If the global stats timeout statement was found before the stats socket
(or without), the parser would crash because the stats frontend was not
initialized. Now we have an allocation function which solves the issue.

This bug was introduced with 1.4 so it does not need backporting.
(was commit 1c5819d2498ae3643c3880507847f948a53d2773 in 1.4)

14 years ago[BUG] queue: don't dequeue proxy-global requests on disabled servers
Willy Tarreau [Fri, 6 Aug 2010 08:08:23 +0000 (10:08 +0200)] 
[BUG] queue: don't dequeue proxy-global requests on disabled servers

If a server is disabled or tracking a disabled server, it must not
dequeue requests pending in the proxy queue, it must only dequeue
its own ones.

The problem that was caused is that if a backend always had requests
in its queue, a disabled server would continue to take traffic forever.

(was commit 09d02aaf02d1f21c0c02672888f3a36a14bdd299 in 1.4)

14 years ago[BUG] stats: session rate limit gets garbaged in the stats
Cyril Bonté [Fri, 23 Jul 2010 16:59:11 +0000 (18:59 +0200)] 
[BUG] stats: session rate limit gets garbaged in the stats

The statistics page (the HTML one) displays a garbage value on frontends using
"rate-limit session" in HTTP mode.

This is due to the usage of the same buffer for the macros converting the max
session rate and the limit.

Steps to reproduce :
Configuration file example  :
listen bug :80
  mode http
  rate-limit sessions
  stats enable

Then start refreshing the statistics page.

This bug was introduced just before the release of haproxy 1.4.0.

(was commit 6cfaf9e91969c87a9eab1d58a15d2d0a3f346c9b in 1.4)

14 years ago[MEDIUM] http: forward client's close when abortonclose is set
Willy Tarreau [Sat, 17 Jul 2010 06:02:58 +0000 (08:02 +0200)] 
[MEDIUM] http: forward client's close when abortonclose is set

While it's usually desired to wait for a server response even
when the client closes its request channel, it can be problematic
with long polling requests. In order to let the server decide what
to do in such a case, if option abortonclose is set, we simply
forward the shutdown to the server. That way, it can decide to
take the appropriate action. Most servers will still process the
request, while some will probably want to abort.

Obviously, this only works as long as the client has not sent
another pipelined request over the same connection.

(was commit 0e25d86da49827ff6aa3c94132c01292b5ba4854 in 1.4)