]> git.ipfire.org Git - thirdparty/haproxy.git/log
thirdparty/haproxy.git
15 years ago[MEDIUM] Decrease server health based on http responses / events, version 3
Krzysztof Piotr Oledzki [Tue, 15 Dec 2009 21:31:24 +0000 (22:31 +0100)] 
[MEDIUM] Decrease server health based on http responses / events, version 3

Implement decreasing health based on observing communication between
HAProxy and servers.

Changes in this version 2:
 - documentation
 - close race between a started check and health analysis event
 - don't force fastinter if it is not set
 - better names for options
 - layer4 support

Changes in this version 3:
 - add stats
 - port to the current 1.4 tree

15 years ago[DOC] some small spell fixes and unifications
Krzysztof Piotr Oledzki [Sun, 13 Dec 2009 20:55:50 +0000 (21:55 +0100)] 
[DOC] some small spell fixes and unifications

Traditionnally -> Traditionally
preceeded -> preceded
statictics -> statistics
(...)

15 years ago[MINOR] config: don't report error on all subsequent files on failure
Willy Tarreau [Tue, 15 Dec 2009 20:46:25 +0000 (21:46 +0100)] 
[MINOR] config: don't report error on all subsequent files on failure

Cyril Bonté found that when an error is detected in one config file, it
is also reported in all other ones, which is wrong. The fix obviously
consists in checking the return code from readcfgfile() and not the
accumulator.

15 years ago[MINOR] ebtree: add functions to lookup non-null terminated strings
Willy Tarreau [Mon, 14 Dec 2009 11:40:27 +0000 (12:40 +0100)] 
[MINOR] ebtree: add functions to lookup non-null terminated strings

Sometimes it's useful to lookup a string without terminating it with a
zero. We can do that relying on ebmb_lookup() since the string in the
tree contains a zero.

15 years ago[BUG] Configuration parser bug when escaping characters
Cyril Bonté [Sun, 6 Dec 2009 12:43:42 +0000 (13:43 +0100)] 
[BUG] Configuration parser bug when escaping characters

Today I was testing headers manipulation but I met a bug with my first test.
To reproduce it, add for example this line :

    rspadd Cache-Control:\ max-age=1500

Check the response header, it will provide :

Cache-Control: max-age=15000 <= the last character is duplicated

This only happens when we use backslashes on the last line of the
configuration file, without returning to the line.

Also if the last line is like :
  rspadd Cache-Control:\ max-age=1500\

the last backslash causes a segfault.

This is not due to rspadd but to a more general bug in cfgparse.c :
...
if (skip) {
        memmove(line + 1, line + 1 + skip, end - (line + skip + 1));
        end -= skip;
}
...

should be :
...
if (skip) {
        memmove(line + 1, line + 1 + skip, end - (line + skip));
        end -= skip;
}
...

I've reproduced it with haproxy 1.3.22 and the last 1.4 snapshot.

15 years ago[MINOR] config: support passing multiple "domain" statements to cookies
Willy Tarreau [Thu, 3 Dec 2009 22:28:34 +0000 (23:28 +0100)] 
[MINOR] config: support passing multiple "domain" statements to cookies

In some environments it is not possible to rely on any wildcard for a
domain name (eg: .com, .net, .fr...) so it is required to send multiple
domain extensions. (Un)fortunately the syntax check on the domain name
prevented that from being done the dirty way. So let's just build a
domain list when multiple domains are passed on the same line.
(cherry picked from commit 950245ca2b772fd6b99b8152c48c694ed0212857)

15 years ago[BUG] config: cookie domain was ignored in defaults sections
Willy Tarreau [Thu, 3 Dec 2009 22:13:06 +0000 (23:13 +0100)] 
[BUG] config: cookie domain was ignored in defaults sections

Since cookie can appear in a defaults section, the domain extension
must be supported there as well.

(cherry picked from commit baf78c8e03db8c2255aefb6e11b38b48d1ec5d34)

15 years ago[BUG] config: fix erroneous check on cookie domain names
Willy Tarreau [Thu, 3 Dec 2009 22:10:56 +0000 (23:10 +0100)] 
[BUG] config: fix erroneous check on cookie domain names

It was a OR instead of a AND, so it was required to have a cookie
name which contained a dot AND began with a dot.
(cherry picked from commit a1e107fc13e5d8886bf900f302322bfa6ed35d37)

15 years ago[BUG] config: disable 'option httplog' on TCP proxies
Willy Tarreau [Mon, 9 Nov 2009 20:27:51 +0000 (21:27 +0100)] 
[BUG] config: disable 'option httplog' on TCP proxies

Gabriel Sosa reported that logs were appearing with BADREQ when
'option httplog' was used with a TCP proxy (eg: inherited via a
default instance). This patch detects it and falls back to tcplog
after emitting a warning.
(cherry picked from commit 5f0bd6537f8b56b643ef485d7a3c96d996d9b01a)

15 years ago[BUG] config: fix wrong handling of too large argument count
Willy Tarreau [Mon, 9 Nov 2009 20:16:53 +0000 (21:16 +0100)] 
[BUG] config: fix wrong handling of too large argument count

Holger Just reported that running ACLs with too many args caused
a segfault during config parsing. This is caused by a wrong test
on argument count. In case of too many arguments on a config line,
the last one was not correctly zeroed. This is now done and we
report the error indicating what part had been truncated.
(cherry picked from commit 3b39c1446b9bd842324e87782a836948a07c25a2)

15 years ago[BUG] config: fix error message when config file is not found
Willy Tarreau [Sun, 6 Dec 2009 12:10:44 +0000 (13:10 +0100)] 
[BUG] config: fix error message when config file is not found

Cameron Simpson reported an annoying case where haproxy simply reports
"Error(s) found in configuration file" when the file is not found or
not readable.

Fortunately the parsing function still returns -1 in case of open
error, so we're able to detect the issue from the caller and report
the corresponding errno message.

15 years ago[MINOR] http: detect tunnel mode and set it in the session
Willy Tarreau [Mon, 30 Nov 2009 11:19:56 +0000 (12:19 +0100)] 
[MINOR] http: detect tunnel mode and set it in the session

In order to support keepalive, we'll have to differentiate
normal sessions from tunnel sessions, which are the ones we
don't want to analyse further.

Those are typically the CONNECT requests where we don't care
about any form of content-length, as well as the requests
which are forwarded on non-close and non-keepalive proxies.

15 years ago[BUG] x-original-to: name was not set in default instance
Willy Tarreau [Mon, 30 Nov 2009 10:50:16 +0000 (11:50 +0100)] 
[BUG] x-original-to: name was not set in default instance

This resulted in an empty header name when option originalto
was declared in a default sections.

15 years ago[MEDIUM] appsession: add "len", "prefix" and "mode" options
Cyril Bonté [Sun, 29 Nov 2009 19:04:48 +0000 (20:04 +0100)] 
[MEDIUM] appsession: add "len", "prefix" and "mode" options

To sum up :
- len : it's now the max number of characters for the value, preventing
  garbaged results.
- a new option "prefix" is added, this allows to use dynamic cookie
  names (e.g. ASPSESSIONIDXXX).

Previously in the thread, I wanted to use the value found with
"capture cookie" but when i started to update the documentation, I
found this solution quite weird. I've made a small rework to not
depend on "capture cookie".

- There's the posssiblity to define the URL parser mode (path parameters
  or query string).

15 years ago[MINOR] http: keep pointer to beginning of data
Willy Tarreau [Sun, 29 Nov 2009 17:12:29 +0000 (18:12 +0100)] 
[MINOR] http: keep pointer to beginning of data

We now set msg->col and msg->sov to the first byte of non-header.
They will be used later when parsing chunks. A new macro was added
to perform size additions on an http_msg in order to limit the risks
of copy-paste in the long term.

During this operation, it appeared that the http_msg struct was not
optimal on 64-bit, so it was re-ordered to fill the holes.

15 years ago[DOC] option is "defer-accept", not "defer_accept"
Willy Tarreau [Sat, 28 Nov 2009 07:21:29 +0000 (08:21 +0100)] 
[DOC] option is "defer-accept", not "defer_accept"

15 years ago[BUG] stream_sock: BUF_INFINITE_FORWARD broke splice on 64-bit platforms
Willy Tarreau [Sat, 28 Nov 2009 06:47:10 +0000 (07:47 +0100)] 
[BUG] stream_sock: BUF_INFINITE_FORWARD broke splice on 64-bit platforms

Yohan Tordjman at Dstorage found that upgrading haproxy to 1.4-dev4
caused truncated objects to be returned. An strace quickly exhibited
the issue which was 100% reproducible :

4297  epoll_wait(0, {}, 10, 0)          = 0
4297  epoll_wait(0, {{EPOLLIN, {u32=7, u64=7}}}, 10, 1000) = 1
4297  splice(0x7, 0, 0x5, 0, 0xffffffffffffffff, 0x3) = -1 EINVAL (Invalid argument)
4297  shutdown(7, 1 /* send */)         = 0
4297  close(7)                          = 0
4297  shutdown(2, 1 /* send */)         = 0
4297  close(2)                          = 0

This is caused by the fact that the forward length is taken from
BUF_INFINITE_FORWARD, which is -1. The problem does not appear
in 32-bit mode because this value is first cast to an unsigned
long, truncating it to 32-bit (4 GB). Setting an upper bound
fixes the issue.

Also, a second error check has been added for splice. If EINVAL
is returned, we fall back to recv().

15 years ago[MINOR] http: create new MSG_BODY sub-states
Willy Tarreau [Sun, 8 Nov 2009 12:10:58 +0000 (13:10 +0100)] 
[MINOR] http: create new MSG_BODY sub-states

An HTTP message can be decomposed into several sub-states depending
on the transfer-encoding. We'll have to keep these state information
while parsing chunks, so we must extend the values. In order not to
change everything, we'll now consider that anything >= MSG_BODY is
the body, and that the value indicates the precise state. The
MSG_ERROR status which was greater than MSG_BODY was moved for this.

15 years ago[MINOR] tools: add hex2i() function to convert hex char to int
Willy Tarreau [Mon, 2 Nov 2009 19:12:52 +0000 (20:12 +0100)] 
[MINOR] tools: add hex2i() function to convert hex char to int

15 years ago[BUILD] missing #ifndef in ebsttree.h
Willy Tarreau [Mon, 2 Nov 2009 13:43:39 +0000 (14:43 +0100)] 
[BUILD] missing #ifndef in ebsttree.h

15 years ago[BUILD] missing #ifndef in ebmbtree.h
Willy Tarreau [Mon, 2 Nov 2009 13:41:23 +0000 (14:41 +0100)] 
[BUILD] missing #ifndef in ebmbtree.h

15 years ago[MINOR] server tracking: don't care about the tracked server's mode
Alex Williams [Mon, 2 Nov 2009 02:27:13 +0000 (21:27 -0500)] 
[MINOR] server tracking: don't care about the tracked server's mode

Right now, an HTTP server cannot track a TCP server and vice-versa.
This patch enables proxy tracking without relying on the proxy's mode
(tcp/http/health). It only requires a matching proxy name to exist. The
original function was renamed to findproxy_mode().

15 years ago[CLEANUP] ebtree: cast to char * to get rid of gcc warning
Willy Tarreau [Thu, 29 Oct 2009 11:00:11 +0000 (12:00 +0100)] 
[CLEANUP] ebtree: cast to char * to get rid of gcc warning

Gcc warns about potential signedness issues when using strcmp().

15 years ago[MINOR] Collect & provide http response codes for frontends, fix backends
Krzysztof Piotr Oledzki [Sat, 24 Oct 2009 13:36:15 +0000 (15:36 +0200)] 
[MINOR] Collect & provide http response codes for frontends, fix backends

This patch extends and corrects the functionality introduced by
"Collect & provide http response codes received from servers":
 - responses are now also accounted for frontends
 - backend's and frontend's counters are incremented based
   on responses sent to client, not received from servers

15 years ago[MINOR] add additional "a href"s to stats page
Krzysztof Piotr Oledzki [Sat, 24 Oct 2009 12:24:30 +0000 (14:24 +0200)] 
[MINOR] add additional "a href"s to stats page

This patch adds <a href> html links for proxies, frontends, servers
and backends. Once located, can be clicked. Users no longer have to
manually add #anchor to stat's url.

15 years ago[BUG] definitely fix regparm issues between haproxy core and ebtree
Willy Tarreau [Tue, 27 Oct 2009 20:40:18 +0000 (21:40 +0100)] 
[BUG] definitely fix regparm issues between haproxy core and ebtree

It's a pain to enable regparm because ebtree is built in its corner
and does not depend on the rest of the config. This causes no problem
except that if the regparm settings are not exactly similar, then we
can get inconsistent function interfaces and crashes.

One solution realized in this patch consists in externalizing all
compiler settings and changing CONFIG_XXX_REGPARM into CONFIG_REGPARM
so that we ensure that any sub-component uses the same setting. Since
ebtree used a value here and not a boolean, haproxy's config has been
set to use a number too. Both haproxy's core and ebtree currently use
the same copy of the compiler.h file. That way we don't have any issue
anymore when one setting changes somewhere.

15 years ago[CLEANUP] ebtree: remove old unused files
Willy Tarreau [Mon, 26 Oct 2009 20:15:10 +0000 (21:15 +0100)] 
[CLEANUP] ebtree: remove old unused files

15 years ago[MEDIUM] build: switch ebtree users to use new ebtree version
Willy Tarreau [Mon, 26 Oct 2009 20:10:04 +0000 (21:10 +0100)] 
[MEDIUM] build: switch ebtree users to use new ebtree version

All files referencing the previous ebtree code were changed to point
to the new one in the ebtree directory. A makefile variable (EBTREE_DIR)
is also available to use files from another directory.

The ability to build the libebtree library temporarily remains disabled
because it can have an impact on some existing toolchains and does not
appear worth it in the medium term if we add support for multi-criteria
stickiness for instance.

15 years ago[IMPORT] import ebtree v5.0 into directory ebtree/
Willy Tarreau [Mon, 26 Oct 2009 18:48:54 +0000 (19:48 +0100)] 
[IMPORT] import ebtree v5.0 into directory ebtree/

We needed to upgrade ebtree to v5.0 to support string indexing,
and it was getting very painful to have it split across 2 dirs
and to have to patch it. Now we just have to copy the .c and .h
files to the right place.

15 years ago[MINOR] Add "a name" to stats page
Krzysztof Piotr Oledzki [Thu, 22 Oct 2009 20:48:09 +0000 (22:48 +0200)] 
[MINOR] Add "a name" to stats page

If you have a lot of proxies/servers in your stats page it is
not easy to locate the one you are interested in. You can
of couse use search function from you favorite web browser
but browsers often lost their focus when reloading stats.

This patch adds <a name> html tags for proxies, frontends, servers
and backends. You can use it to access a specific place, for example:

http://(stats_url)#proxy
http://(stats_url)#proxy/Frontend
http://(stats_url)#proxy/server1
http://(stats_url)#proxy/server2
http://(stats_url)#proxy/Backend

15 years ago[MINOR] http: remove the last call to stream_int_return
Willy Tarreau [Sun, 18 Oct 2009 21:56:35 +0000 (23:56 +0200)] 
[MINOR] http: remove the last call to stream_int_return

And remove the now unused function itself too.

15 years ago[MINOR] http response: update the TX_CLI_CONN_KA flag on rewrite
Willy Tarreau [Sun, 18 Oct 2009 21:52:50 +0000 (23:52 +0200)] 
[MINOR] http response: update the TX_CLI_CONN_KA flag on rewrite

If we modify the "connection" header we send to the client,
update the TX_CLI_CONN_KA flag.

15 years ago[MEDIUM] http response: check body length and set transaction flags
Willy Tarreau [Sun, 18 Oct 2009 21:45:12 +0000 (23:45 +0200)] 
[MEDIUM] http response: check body length and set transaction flags

We also check the close status and terminate the server persistent
connection if appropriate. Note that since this change, we'll not
get any "Connection: close" headers added to HTTP/1.0 responses
anymore, which is good.

15 years ago[MINOR] http: pre-set the persistent flags in the transaction
Willy Tarreau [Sun, 18 Oct 2009 21:43:57 +0000 (23:43 +0200)] 
[MINOR] http: pre-set the persistent flags in the transaction

We should pre-set the persistent flags then try to clear them
instead of the opposite.

15 years ago[MAJOR] http: create the analyser which waits for a response
Willy Tarreau [Sun, 18 Oct 2009 20:53:08 +0000 (22:53 +0200)] 
[MAJOR] http: create the analyser which waits for a response

The code part which waits for an HTTP response has been extracted
from the old function. We now have two analysers and the second one
may re-enable the first one when an 1xx response is encountered.
This has been tested and works.

The calls to stream_int_return() that were remaining in the wait
analyser have been converted to stream_int_retnclose().

15 years ago[MEDIUM] http request: make use of pre-parsed transfer-encoding header
Willy Tarreau [Sun, 18 Oct 2009 19:36:47 +0000 (21:36 +0200)] 
[MEDIUM] http request: make use of pre-parsed transfer-encoding header

This change should go a bit further. We should have a dedicated analyser
to find and skip chunks.

15 years ago[MEDIUM] http request: simplify POST length detection
Willy Tarreau [Sun, 18 Oct 2009 19:28:29 +0000 (21:28 +0200)] 
[MEDIUM] http request: simplify POST length detection

We can now rely on the pre-parsed content-length and transfer-encoding
to find what the supposed body length will be.

15 years ago[MINOR] http request: simplify the test of no-data
Willy Tarreau [Sun, 18 Oct 2009 19:17:42 +0000 (21:17 +0200)] 
[MINOR] http request: simplify the test of no-data

Now we can rely on (chunked && !hdr_content_len) to stop forwarding
data. We only do that for known methods that are not CONNECT though.

15 years ago[MINOR] http request: update the TX_SRV_CONN_KA flag on rewrite
Willy Tarreau [Sun, 18 Oct 2009 19:04:35 +0000 (21:04 +0200)] 
[MINOR] http request: update the TX_SRV_CONN_KA flag on rewrite

If we modify the "connection" header we send to the server,
update the TX_SRV_CONN_KA flag.

15 years ago[MEDIUM] http request: parse connection, content-length and transfer-encoding
Willy Tarreau [Sun, 18 Oct 2009 18:55:02 +0000 (20:55 +0200)] 
[MEDIUM] http request: parse connection, content-length and transfer-encoding

Store those elements in the transaction. RFC2616 is strictly followed.
Note that requests containing two different content-length fields are
discarded as invalid.

15 years ago[MINOR] http: add new transaction flags for keep-alive and content-length
Willy Tarreau [Sun, 18 Oct 2009 17:50:43 +0000 (19:50 +0200)] 
[MINOR] http: add new transaction flags for keep-alive and content-length

We'll need to store the keep-alive status as well as content-length
and/or transfer-encoding status.

15 years ago[MEDIUM] appsession: add the "request-learn" option
Cyril Bonté [Wed, 14 Oct 2009 22:15:40 +0000 (00:15 +0200)] 
[MEDIUM] appsession: add the "request-learn" option

This patch has 2 goals :

1. I wanted to test the appsession feature with a small PHP code,
using PHPSESSID. The problem is that when PHP gets an unknown session
id, it creates a new one with this ID. So, when sending an unknown
session to PHP, persistance is broken : haproxy won't see any new
cookie in the response and will never attach this session to a
specific server.

This also happens when you restart haproxy : the internal hash becomes
empty and all sessions loose their persistance (load balancing the
requests on all backend servers, creating a new session on each one).
For a user, it's like the service is unusable.

The patch modifies the code to make haproxy also learn the persistance
from the client : if no session is sent from the server, then the
session id found in the client part (using the URI or the client cookie)
is used to associated the server that gave the response.

As it's probably not a feature usable in all cases, I added an option
to enable it (by default it's disabled). The syntax of appsession becomes :

  appsession <cookie> len <length> timeout <holdtime> [request-learn]

This helps haproxy repair the persistance (with the risk of losing its
session at the next request, as the user will probably not be load
balanced to the same server the first time).

2. This patch also tries to reduce the memory usage.
Here is a little example to explain the current behaviour :
- Take a Tomcat server where /session.jsp is valid.
- Send a request using a cookie with an unknown value AND a path
  parameter with another unknown value :

  curl -b "JSESSIONID=12345678901234567890123456789012" http://<haproxy>/session.jsp;jsessionid=00000000000000000000000000000001

(I know, it's unexpected to have a request like that on a live service)
Here, haproxy finds the URI session ID and stores it in its internal
hash (with no server associated). But it also finds the cookie session
ID and stores it again.

- As a result, session.jsp sends a new session ID also stored in the
  internal hash, with a server associated.

=> For 1 request, haproxy has stored 3 entries, with only 1 which will be usable

The patch modifies the behaviour to store only 1 entry (maximum).

15 years ago[MAJOR] buffer: flag BF_DONT_READ to disable reads when not required
Willy Tarreau [Sat, 17 Oct 2009 12:37:52 +0000 (14:37 +0200)] 
[MAJOR] buffer: flag BF_DONT_READ to disable reads when not required

When processing a GET or HEAD request in close mode, we know we don't
need to read anything anymore on the socket, so we can disable it.
Doing this can save up to 40% of the recv calls, and half of the
epoll_ctl calls.

For this we need a buffer flag indicating that we're not interesting in
reading anymore. Right now, this flag also disables both polled reads.
We might benefit from disabling only speculative reads, but we will need
at least this flag when we want to support keepalive anyway.

Currently we don't disable the flag on completion, but it does not
matter as we close ASAP when performing the shutw().

15 years ago[MEDIUM] fd: merge fd_list into fdtab
Willy Tarreau [Sat, 17 Oct 2009 20:54:17 +0000 (22:54 +0200)] 
[MEDIUM] fd: merge fd_list into fdtab

The fd_list[] used by sepoll was indexed on the fd number and was only
used to store the equivalent of an integer. Changing it to be merged
with fdtab reduces the number of pointer computations, the code size
and some initialization steps. It does not harm other pollers much
either, as only one integer was added to the fdtab array.

15 years ago[OPTIM] move some rarely used fields out of fdtab
Willy Tarreau [Sun, 18 Oct 2009 05:25:52 +0000 (07:25 +0200)] 
[OPTIM] move some rarely used fields out of fdtab

Some rarely information are stored in fdtab, making it larger for no
reason (source port ranges, remote address, ...). Such information
lie there because the checks can't find them anywhere else. The goal
will be to move these information to the stream interface once the
checks make use of it.

For now, we move them to an fdinfo array. This simple change might
have improved the cache hit ratio a little bit because a 0.5% of
performance increase has measured.

15 years ago[CLEANUP] sepoll: clean up the fd_clr/fd_set functions
Willy Tarreau [Sat, 17 Oct 2009 19:43:03 +0000 (21:43 +0200)] 
[CLEANUP] sepoll: clean up the fd_clr/fd_set functions

This cleanup also slightly reduces code size due to a better
construct and the use of an inlined version of alloc_spec_entry().

15 years ago[MINOR] http: detect connection: close earlier
Willy Tarreau [Sat, 17 Oct 2009 18:12:21 +0000 (20:12 +0200)] 
[MINOR] http: detect connection: close earlier

Till now we would only set SN_CONN_CLOSED after rewriting it. Now we
set it just after checking the Connection header so that we can use
the result later if required.

15 years ago[DOC] option tcp-smart-connect was missing from index
Willy Tarreau [Sat, 17 Oct 2009 14:04:09 +0000 (16:04 +0200)] 
[DOC] option tcp-smart-connect was missing from index

15 years ago[BUG] Fix silly typo: hspr_other -> hrsp_other
Krzysztof Piotr Oledzki [Wed, 14 Oct 2009 20:26:01 +0000 (22:26 +0200)] 
[BUG] Fix silly typo: hspr_other -> hrsp_other

s/hspr_other/hrsp_other/

15 years ago[DOC] point to 1.4 doc, not 1.3
Willy Tarreau [Wed, 14 Oct 2009 20:22:03 +0000 (22:22 +0200)] 
[DOC] point to 1.4 doc, not 1.3

The links were wrong.

15 years ago[MINOR] Collect & provide http response codes received from servers
Krzysztof Piotr Oledzki [Tue, 13 Oct 2009 19:14:09 +0000 (21:14 +0200)] 
[MINOR] Collect & provide http response codes received from servers

Additional data is provided on both html & csv stats:
 - html: when passing a mouse over Sessions -> Total (servers, backends)
 - cvs: by 6 additional fields (hrsp_1xx, hrsp_2xx, hrsp_3xx, hrsp_4xx, hrsp_5xx, hspr_other)

Patch inspired by:
 http://www.formilux.org/archives/haproxy/0910/2528.html
 http://www.formilux.org/archives/haproxy/0910/2529.html

15 years ago[DOC] trivial fix for man page
Michael Shuler [Wed, 14 Oct 2009 15:23:03 +0000 (10:23 -0500)] 
[DOC] trivial fix for man page

I'm working on helping Arnaud update haproxy in Debian, and one of the
package build warnings I received was about "hyphen where a minus sign
was intended" in the man page - details:
http://lintian.debian.org/tags/hyphen-used-as-minus-sign.html

Patch included in my 1.3.20 Debian package is attached.

15 years ago[DOC] add a reminder about obsolete documents
Willy Tarreau [Wed, 14 Oct 2009 18:30:15 +0000 (20:30 +0200)] 
[DOC] add a reminder about obsolete documents

haproxy-en.txt and haproxy-fr.txt are outdated but people still refer to
them quite often, generally causing a useless waste of time.

15 years ago[CONTRIB] halog: support searching by response time
Willy Tarreau [Wed, 14 Oct 2009 13:16:29 +0000 (15:16 +0200)] 
[CONTRIB] halog: support searching by response time

Also support inverting search criteria when specified uppercase

15 years ago[MINOR] unix socket: report the socket path in case of bind error
Willy Tarreau [Wed, 14 Oct 2009 13:16:48 +0000 (15:16 +0200)] 
[MINOR] unix socket: report the socket path in case of bind error

When an error occurs during binding of the stats unix socket, messages
are far from clear for the user !

15 years ago[MINOR] tcp: add support for the defer_accept bind option
Willy Tarreau [Tue, 13 Oct 2009 05:34:14 +0000 (07:34 +0200)] 
[MINOR] tcp: add support for the defer_accept bind option

This can ensure that data is readily available on a socket when
we accept it, but a bug in the kernel ignores the timeout so the
socket can remain pending as long as the client does not talk.
Use with care.

15 years ago[MINOR] CSS & HTML fun
Krzysztof Piotr Oledzki [Mon, 12 Oct 2009 21:09:08 +0000 (23:09 +0200)] 
[MINOR] CSS & HTML fun

This patch makes stats page about 30% smaller and
"CSS 2.1" + "HTML 4.01 Transitional" compliant.

There should be no visible differences.

Changes:
 - add DOCTYPE for HTML 4.01 Transitional
 - add missing </ul>
 - remove cols=, AFAIK no modern browser support this property and
   it prevents validation to pass.
 - remove "align: center": there is no such property in css. There is
   however "text-align: center" but it is definitely not what we would
   like to see here.
 - by default align .titre to center
 - by default align .td to right
 - remove all align=right, no longer necessary
 - add class=ac (align center): shorter than "align=center" and use it when
   necessary
 - remove nowrap from td, instead use "white-space: nowrap" in css

Now stats page passes W3C validators for HTML & CSS. We may consider adding
"validated" icons from www.w3.org. ;)

15 years ago[MINOR] config: report all supported options for the "bind" keyword
Willy Tarreau [Mon, 12 Oct 2009 05:19:35 +0000 (07:19 +0200)] 
[MINOR] config: report all supported options for the "bind" keyword

"mss", "name" and "id" were missing.

15 years ago[RELEASE] Released version 1.4-dev4 v1.4-dev4
Willy Tarreau [Mon, 12 Oct 2009 04:40:53 +0000 (06:40 +0200)] 
[RELEASE] Released version 1.4-dev4

Released version 1.4-dev4 with the following main changes :
    - [DOC] add missing rate_lim and rate_max
    - [MAJOR] struct chunk rework
    - [MEDIUM] Health check reporting code rework + health logging, v3
    - [BUG] check if rise/fall has an argument and it is > 0
    - [MINOR] health checks logging unification
    - [MINOR] add "description", "node" and show-node"/"show-desc", remove "node-name", v2
    - [MINOR] Allow dots in show-node & add "white-space: nowrap" in th.pxname.
    - [DOC] Add information about http://haproxy.1wt.eu/contrib.html
    - [MINOR] Introduce include/types/counters.h
    - [CLEANUP] Move counters to dedicated structures
    - [MINOR] Add "clear counters" to clear statistics counters
    - [MEDIUM] Collect & provide separate statistics for sockets, v2
    - [BUG] Fix NULL pointer dereference in stats_check_uri_auth(), v2
    - [MINOR] acl: don't report valid acls as potential mistakes
    - [MINOR] Add cut_crlf(), ltrim(), rtrim() and alltrim()
    - [MINOR] Add chunk_htmlencode and chunk_asciiencode
    - [MINOR] Capture & display more data from health checks, v2
    - [BUG] task.c: don't assing last_timer to node-less entries
    - [BUG] http stats: large outputs sometimes got some parts chopped off
    - [MINOR] backend: export some functions to recount servers
    - [MINOR] backend: uninline some LB functions
    - [MINOR] include time.h from freq_ctr.h as is uses "now".
    - [CLEANUP] backend: move LB algos to individual files
    - [MINOR] lb_map: reorder code in order to ease integration of new hash functions
    - [CLEANUP] proxy: move last lb-specific bits to their respective files
    - [MINOR] backend: separate declarations of LB algos from their lookup method
    - [MINOR] backend: reorganize the LB algorithm selection
    - [MEDIUM] backend: introduce the "static-rr" LB algorithm
    - [MINOR] report list of supported pollers with -vv
    - [DOC] log-health-checks is an option, not a directive
    - [MEDIUM] new option "independant-streams" to stop updating read timeout on writes
    - [BUG] stats: don't call buffer_shutw(), but ->shutw() instead
    - [MINOR] stats: strip CR and LF from the input command line
    - [BUG] don't refresh timeouts late after detected activity
    - [MINOR] stats_dump_errors_to_buffer: use buffer_feed_chunk()
    - [MINOR] stats_dump_sess_to_buffer: use buffer_feed_chunk()
    - [MINOR] stats: make stats_dump_raw_to_buffer() use buffer_feed_chunk
    - [MEDIUM] stats: don't use s->ana_state anymore
    - [MINOR] remove now obsolete ana_state from the session struct
    - [MEDIUM] stats: make HTTP stats use an I/O handler
    - [MEDIUM] stream_int: adjust WAIT_ROOM handling
    - [BUG] config: look for ID conflicts in all sockets, not only last ones.
    - [MINOR] config: reference file and line with any listener/proxy/server declaration
    - [MINOR] config: report places of duplicate names or IDs
    - [MINOR] config: add pointer to file name in block/redirect/use_backend/monitor rules
    - [MINOR] tools: add a new get_next_id() function
    - [MEDIUM] config: automatically find unused IDs for proxies, servers and listeners
    - [OPTIM] counters: move some max numbers to the counters struct
    - [BUG] counters: fix segfault on missing counters for a listener
    - [MEDIUM] backend: implement consistent hashing variation
    - [MINOR] acl: add fe_conn, be_conn, queue, avg_queue
    - [MINOR] stats: use 'clear counters all' to clear all values
    - [MEDIUM] add access restrictions to the stats socket
    - [MINOR] buffers: add buffer_feed2() and make buffer_feed() measure string length
    - [MINOR] proxy: provide function to retrieve backend/server pointers
    - [MINOR] add the "initial weight" to the server struct.
    - [MEDIUM] stats: add the "get weight" command to report a server's weight
    - [MEDIUM] stats: add the "set weight" command
    - [BUILD] add a 'make tags' target
    - [MINOR] stats: add support for numeric IDs in set weight/get weight
    - [MINOR] stats: use a dedicated state to output static data
    - [OPTIM] stats: check free space before trying to print

15 years ago[OPTIM] stats: check free space before trying to print
Willy Tarreau [Sun, 11 Oct 2009 21:35:10 +0000 (23:35 +0200)] 
[OPTIM] stats: check free space before trying to print

This alone makes a typical HTML stats dump consume 10% CPU less,
because we avoid doing complex printf calls to drop them later.
Only a few common cases have been checked, those which are very
likely to run for nothing.

15 years ago[MINOR] stats: use a dedicated state to output static data
Willy Tarreau [Sun, 11 Oct 2009 21:12:51 +0000 (23:12 +0200)] 
[MINOR] stats: use a dedicated state to output static data

It is a bit expensive and complex to use to call buffer_feed()
directly from the request parser, and there are risks that some
output messages are lost in case of buffer full. Since most of
these messages are static, let's have a state dedicated to print
these messages and store them in a specific area shared with the
stats in the session. This both reduces code size and risks of
losing output data.

15 years ago[MINOR] stats: add support for numeric IDs in set weight/get weight
Willy Tarreau [Sat, 10 Oct 2009 20:33:08 +0000 (22:33 +0200)] 
[MINOR] stats: add support for numeric IDs in set weight/get weight

Krzysztof reported that using names only for get weight/set weight
was not enough because it's still possible to have multiple servers
with the same name (and my test config is one of those). He suggested
to be able to designate them by their unique numeric IDs by prefixing
the ID with a dash.

That way we can have :

     set weight #120/#2

as well as

     get weight static/srv1 10

15 years ago[BUILD] add a 'make tags' target
Willy Tarreau [Sat, 10 Oct 2009 20:20:44 +0000 (22:20 +0200)] 
[BUILD] add a 'make tags' target

15 years ago[MINOR] Capture & display more data from health checks, v2
Krzysztof Piotr Oledzki [Sat, 10 Oct 2009 19:06:49 +0000 (21:06 +0200)] 
[MINOR] Capture & display more data from health checks, v2

Capture & display more data from health checks, like
strerror(errno) for L4 failed checks or a first line
from a response for L7 successes/failed checks.

Non ascii or control characters are masked with
chunk_htmlencode() (html stats) or chunk_asciiencode() (logs).

15 years ago[MINOR] Add chunk_htmlencode and chunk_asciiencode
Krzysztof Piotr Oledzki [Sat, 10 Oct 2009 19:06:03 +0000 (21:06 +0200)] 
[MINOR] Add chunk_htmlencode and chunk_asciiencode

Add two functions to encode input chunk replacing
non-printable, non ascii or special characters
with:
 "&#%u;"  - chunk_htmlencode
 "<%02X>" - chunk_asciiencode

Above functions should be used when adding strings, received
from possible unsafe sources, to html stats or logs.

15 years ago[MINOR] Add cut_crlf(), ltrim(), rtrim() and alltrim()
Krzysztof Piotr Oledzki [Sat, 10 Oct 2009 18:11:17 +0000 (20:11 +0200)] 
[MINOR] Add cut_crlf(), ltrim(), rtrim() and alltrim()

Add four generic functions.

15 years ago[MEDIUM] stats: add the "set weight" command
Willy Tarreau [Sat, 10 Oct 2009 17:30:08 +0000 (19:30 +0200)] 
[MEDIUM] stats: add the "set weight" command

It is now possible to change a server's weight from the stats socket.
Just use "set weight <back>/<serv> <weight>".

15 years ago[MEDIUM] stats: add the "get weight" command to report a server's weight
Willy Tarreau [Sat, 10 Oct 2009 16:37:29 +0000 (18:37 +0200)] 
[MEDIUM] stats: add the "get weight" command to report a server's weight

This command is unrestricted and simply reports a server's weight, as
well as the weight initially configured, which at the moment are the
sames.

15 years ago[MINOR] add the "initial weight" to the server struct.
Willy Tarreau [Sat, 10 Oct 2009 17:34:06 +0000 (19:34 +0200)] 
[MINOR] add the "initial weight" to the server struct.

This one will be used when changing weights.

15 years ago[MINOR] proxy: provide function to retrieve backend/server pointers
Willy Tarreau [Sat, 10 Oct 2009 16:35:51 +0000 (18:35 +0200)] 
[MINOR] proxy: provide function to retrieve backend/server pointers

int get_backend_server(const char *bk_name, const char *sv_name,
                       struct proxy **bk, struct server **sv);

This function scans the list of backends and servers to retrieve the first
backend and the first server with the given names, and sets them in both
parameters. It returns zero if either is not found, or non-zero and sets
the ones it did not found to NULL. If a NULL pointer is passed for the
backend, only the pointer to the server will be updated.

15 years ago[MINOR] buffers: add buffer_feed2() and make buffer_feed() measure string length
Willy Tarreau [Sat, 10 Oct 2009 16:01:44 +0000 (18:01 +0200)] 
[MINOR] buffers: add buffer_feed2() and make buffer_feed() measure string length

It's inconvenient to always have to compute string lengths when calling
buffer_feed(), so change that.

15 years ago[MEDIUM] add access restrictions to the stats socket
Willy Tarreau [Sat, 10 Oct 2009 15:13:00 +0000 (17:13 +0200)] 
[MEDIUM] add access restrictions to the stats socket

The stats socket can now run at 3 different levels :
  - user
  - operator (default one)
  - admin

These levels are used to restrict access to some information
and commands. Only the admin can clear all stats. A user cannot
clear anything nor access sensible data such as sessions or
errors.

15 years ago[MINOR] stats: use 'clear counters all' to clear all values
Willy Tarreau [Sat, 10 Oct 2009 13:26:26 +0000 (15:26 +0200)] 
[MINOR] stats: use 'clear counters all' to clear all values

The most common use of "clear counters" should be to only clear
max values without affecting cumulated values, for instance,
after an incident. So we change "clear counters" to only clear
max values, and add "clear counters all" to clear all counters.

15 years ago[BUG] task.c: don't assing last_timer to node-less entries
SaVaGe [Tue, 6 Oct 2009 15:53:37 +0000 (18:53 +0300)] 
[BUG] task.c: don't assing last_timer to node-less entries

I noticed that in __eb32_insert , if the tree is empty
(root->b[EB_LEFT] == NULL) , the node.bit is not defined.
However in __task_queue there are checks:

- if (last_timer->node.bit < 0)
- if (task->wq.node.bit < last_timer->node.bit)

which might rely upon an undefined value.

This is how I see it:

1. We insert eb32_node in an empty wait queue tree for a task (called by
process_runnable_tasks() ):
Inserting into empty wait queue  &task->wq = 0x72a87c8, last_timer
pointer: (nil)

2. Then, we set the last timer to the same address:
Setting last_timer: (nil) to: 0x72a87c8

3. We get a new task to be inserted in the queue (again called by
process_runnable_tasks()) , before the __task_unlink_wq() is called for
the previous task.

4. At this point, we still have last_timer set to 0x72a87c8 , but since
it was inserted in an empty tree, it doesn't have node.bit and the
values above get dereferenced with undefined value.

The bug has no effect right now because the check for equality is still
made, so the next timer will still be queued at the right place anyway,
without any possible side-effect. But it's a pending bug waiting for a
small change somewhere to strike.

Iliya Polihronov

15 years ago[MINOR] acl: add fe_conn, be_conn, queue, avg_queue
Willy Tarreau [Sat, 10 Oct 2009 10:02:45 +0000 (12:02 +0200)] 
[MINOR] acl: add fe_conn, be_conn, queue, avg_queue

These ACLs are used to check the number of active connections on the
frontend, backend or in a backend's queue. The avg_queue returns the
average number of queued connections per server, and for this, divides
the total number of queued connections by the number of alive servers.

The dst_conn ACL has been slightly changed to more reflect its name and
original usage, which is to return the number of connections on the
destination address/port (the socket) and not the whole frontend.

15 years ago[MEDIUM] backend: implement consistent hashing variation
Willy Tarreau [Thu, 1 Oct 2009 05:52:15 +0000 (07:52 +0200)] 
[MEDIUM] backend: implement consistent hashing variation

Consistent hashing provides some interesting advantages over common
hashing. It avoids full redistribution in case of a server failure,
or when expanding the farm. This has a cost however, the hashing is
far from being perfect, as we associate a server to a request by
searching the server with the closest key in a tree. Since servers
appear multiple times based on their weights, it is recommended to
use weights larger than approximately 10-20 in order to smoothen
the distribution a bit.

In some cases, playing with weights will be the only solution to
make a server appear more often and increase chances of being picked,
so stats are very important with consistent hashing.

In order to indicate the type of hashing, use :

   hash-type map-based      (default, old one)
   hash-type consistent     (new one)

Consistent hashing can make sense in a cache farm, in order not
to redistribute everyone when a cache changes state. It could also
probably be used for long sessions such as terminal sessions, though
that has not be attempted yet.

More details on this method of hashing here :
  http://www.spiteful.com/2008/03/17/programmers-toolbox-part-3-consistent-hashing/

15 years ago[MINOR] acl: don't report valid acls as potential mistakes
Krzysztof Piotr Oledzki [Sun, 4 Oct 2009 22:23:35 +0000 (00:23 +0200)] 
[MINOR] acl: don't report valid acls as potential mistakes

Commit 404e8ab4615d564a74f92a0d3822b0292dd6224f introduced
smart checking for stupid acl typos. However, now haproxy shows
the warning even for valid acls, like this one:
acl Cookie-X-NoAccel    hdr_reg(cookie) (^|\ |;)X-NoAccel=1(;|$)

15 years ago[BUG] counters: fix segfault on missing counters for a listener
Willy Tarreau [Sun, 4 Oct 2009 22:45:38 +0000 (00:45 +0200)] 
[BUG] counters: fix segfault on missing counters for a listener

If a frontend does not set 'option socket-stats', a 'clear counters'
on the stats socket could segfault because li->counters is NULL. The
correct fix is to check for NULL before as this is a valid situation.

15 years ago[BUG] Fix NULL pointer dereference in stats_check_uri_auth(), v2
Krzysztof Piotr Oledzki [Sun, 4 Oct 2009 21:34:15 +0000 (23:34 +0200)] 
[BUG] Fix NULL pointer dereference in stats_check_uri_auth(), v2

Recent "struct chunk rework" introduced a NULL pointer dereference
and now haproxy segfaults if auth is required for stats but not found.

The reason is that size_t cannot store negative values, but current
code assumes that "len < 0" == uninitialized.

This patch fixes it.

15 years ago[OPTIM] counters: move some max numbers to the counters struct
Willy Tarreau [Sun, 4 Oct 2009 21:12:44 +0000 (23:12 +0200)] 
[OPTIM] counters: move some max numbers to the counters struct

There are a few remaining max values that need to move to counters.
Also, the counters are more often used than some config information,
so get them closer to the other useful struct members for better cache
efficiency.

15 years ago[MEDIUM] config: automatically find unused IDs for proxies, servers and listeners
Willy Tarreau [Sun, 4 Oct 2009 21:04:08 +0000 (23:04 +0200)] 
[MEDIUM] config: automatically find unused IDs for proxies, servers and listeners

Until now it was required that every custom ID was above 1000 in order to
avoid conflicts. Now we have the list of all assigned IDs and can automatically
pick the first unused one. This means that it is perfectly possible to interleave
automatic IDs with persistent IDs and the parser will automatically allocate
unused values starting with 1.

15 years ago[MINOR] tools: add a new get_next_id() function
Willy Tarreau [Sun, 4 Oct 2009 20:48:42 +0000 (22:48 +0200)] 
[MINOR] tools: add a new get_next_id() function

This function returns the next unused key in a tree. This will be
used to find spare IDs.

15 years ago[MINOR] config: add pointer to file name in block/redirect/use_backend/monitor rules
Willy Tarreau [Sun, 4 Oct 2009 20:02:50 +0000 (22:02 +0200)] 
[MINOR] config: add pointer to file name in block/redirect/use_backend/monitor rules

Those conditions already referenced the config line, but not the file.

15 years ago[MINOR] config: report places of duplicate names or IDs
Willy Tarreau [Sun, 4 Oct 2009 19:11:42 +0000 (21:11 +0200)] 
[MINOR] config: report places of duplicate names or IDs

When a name or ID conflict is detected, it is sometimes useful to know
where the other one was declared. Now that we have this information,
report it in error messages.

15 years ago[MINOR] config: reference file and line with any listener/proxy/server declaration
Willy Tarreau [Sun, 4 Oct 2009 18:54:54 +0000 (20:54 +0200)] 
[MINOR] config: reference file and line with any listener/proxy/server declaration

Those will be used later for cross-references of conflicts or errors.

15 years ago[BUG] config: look for ID conflicts in all sockets, not only last ones.
Willy Tarreau [Sun, 4 Oct 2009 19:13:39 +0000 (21:13 +0200)] 
[BUG] config: look for ID conflicts in all sockets, not only last ones.

ID conflicts between 'bind' lines were not detected due to this typo.

15 years ago[MEDIUM] Collect & provide separate statistics for sockets, v2
Krzysztof Piotr Oledzki [Sun, 4 Oct 2009 13:43:17 +0000 (15:43 +0200)] 
[MEDIUM] Collect & provide separate statistics for sockets, v2

This patch allows to collect & provide separate statistics for each socket.
It can be very useful if you would like to distinguish between traffic
generate by local and remote users or between different types of remote
clients (peerings, domestic, foreign).

Currently no "Session rate" is supported, but adding it should be possible
if we found it useful.

15 years ago[MINOR] Add "clear counters" to clear statistics counters
Krzysztof Piotr Oledzki [Sun, 4 Oct 2009 13:02:46 +0000 (15:02 +0200)] 
[MINOR] Add "clear counters" to clear statistics counters

Now, when statistics counters are moved to separate
structures, adding "clear counters" is extremely easy.

[wt: updated the help message]

15 years ago[CLEANUP] Move counters to dedicated structures
Krzysztof Piotr Oledzki [Sun, 4 Oct 2009 12:52:57 +0000 (14:52 +0200)] 
[CLEANUP] Move counters to dedicated structures

Move counters from "struct proxy" and "struct server"
to "struct pxcounters" and "struct svcounters".

This patch should make no functional change.

15 years ago[MINOR] Introduce include/types/counters.h
Krzysztof Piotr Oledzki [Sun, 4 Oct 2009 12:32:53 +0000 (14:32 +0200)] 
[MINOR] Introduce include/types/counters.h

This patch introduces include/types/counters.h that
will be used to split couters from other structures
and to create statistics for listeners.

15 years ago[DOC] Add information about http://haproxy.1wt.eu/contrib.html
Krzysztof Piotr Oledzki [Sun, 27 Sep 2009 12:20:28 +0000 (14:20 +0200)] 
[DOC] Add information about http://haproxy.1wt.eu/contrib.html

Add information about http://haproxy.1wt.eu/contrib.html in
the CONTRIB file and remove one useless comment.

15 years ago[MEDIUM] stream_int: adjust WAIT_ROOM handling
Willy Tarreau [Sun, 4 Oct 2009 15:18:35 +0000 (17:18 +0200)] 
[MEDIUM] stream_int: adjust WAIT_ROOM handling

When applets write data, they generall cannot fill the buffer, so as
soon as we find a non-empty buffer, we're sure we're missing some room.

15 years ago[MEDIUM] stats: make HTTP stats use an I/O handler
Willy Tarreau [Sun, 4 Oct 2009 13:56:38 +0000 (15:56 +0200)] 
[MEDIUM] stats: make HTTP stats use an I/O handler

Doing this, we can remove the last BF_HIJACK user and remove
produce_content(). s->data_source could also be removed but
it is currently used to detect if the stats or a server was
used.

15 years ago[MINOR] remove now obsolete ana_state from the session struct
Willy Tarreau [Sun, 4 Oct 2009 12:24:59 +0000 (14:24 +0200)] 
[MINOR] remove now obsolete ana_state from the session struct

This one is not used anymore.

15 years ago[MEDIUM] stats: don't use s->ana_state anymore
Willy Tarreau [Sun, 4 Oct 2009 12:22:18 +0000 (14:22 +0200)] 
[MEDIUM] stats: don't use s->ana_state anymore

The stats handler used to store internal states in s->ana_state. Now
we only rely on si->st0 in which we can store as many states as we
have possible outputs. This cleans up the stats code a lot and makes
it more maintainable. It has also reduced code size by a few hundred
bytes.

15 years ago[MINOR] stats: make stats_dump_raw_to_buffer() use buffer_feed_chunk
Willy Tarreau [Sun, 4 Oct 2009 09:54:04 +0000 (11:54 +0200)] 
[MINOR] stats: make stats_dump_raw_to_buffer() use buffer_feed_chunk

Same as previous change. A remaining call to stats_dump_proxy()
still prevents us from completing the update.

15 years ago[MINOR] stats_dump_sess_to_buffer: use buffer_feed_chunk()
Willy Tarreau [Sat, 3 Oct 2009 21:55:14 +0000 (23:55 +0200)] 
[MINOR] stats_dump_sess_to_buffer: use buffer_feed_chunk()

same as previous patch for this function.

15 years ago[MINOR] stats_dump_errors_to_buffer: use buffer_feed_chunk()
Willy Tarreau [Sat, 3 Oct 2009 21:49:35 +0000 (23:49 +0200)] 
[MINOR] stats_dump_errors_to_buffer: use buffer_feed_chunk()

We can simplify the code in the stats functions using buffer_feed_chunk()
instead of buffer_write_chunk(). Let's start with this function. This
patch also fixed an issue where we could dump past the end of the capture
buffer if it is shorter than the captured request.

15 years ago[BUG] don't refresh timeouts late after detected activity
Willy Tarreau [Sun, 4 Oct 2009 08:56:08 +0000 (10:56 +0200)] 
[BUG] don't refresh timeouts late after detected activity

In old versions, before 1.3.16, we had to refresh the timeouts after
each call to process_session() because the stream socket handler did
not do it. Now that the sockets can exchange data for a long period
without calling process_session(), we can detect an old activity and
refresh a timeout long after the last activity, causing too late a
detection of some timeouts.

The fix simply consists in not checking for activity anymore in
stream_sock_data_finish() but only set a timeout if it was not
previously set.

15 years ago[MINOR] stats: strip CR and LF from the input command line
Willy Tarreau [Sun, 4 Oct 2009 05:36:58 +0000 (07:36 +0200)] 
[MINOR] stats: strip CR and LF from the input command line

commands sent from certain tools (eg: telnet) will be terminated
by CRLF and not only LF. So we must suppress CR too.