blob: 61c82241c2c92203dc11396abcddb6ac46887030 [file] [log] [blame]
willy tarreau036e1ce2005-12-17 13:46:33 +01001ChangeLog :
2===========
willy tarreau4302f492005-12-18 01:00:37 +01003
Willy Tarreau04df1122011-04-08 00:56:41 +020042011/04/08 : 1.5-dev6
5 - [BUG] stream_sock: use get_addr_len() instead of sizeof() on sockaddr_storage
6 - [BUG] TCP source tracking was broken with IPv6 changes
7 - [BUG] stick-tables did not work when converting IPv6 to IPv4
8 - [CRITICAL] fix risk of crash when dealing with space in response cookies
9
Willy Tarreaub06ed2c2011-03-29 01:10:33 +0200102011/03/29 : 1.5-dev5
11 - [BUG] standard: is_addr return value for IPv4 was inverted
12 - [MINOR] update comment about IPv6 support for server
13 - [MEDIUM] use getaddrinfo to resolve names if gethostbyname fail
14 - [DOC] update IPv6 support for bind
15 - [DOC] document IPv6 support for server
16 - [DOC] fix a minor typo
17 - [MEDIUM] IPv6 support for syslog
18 - [DOC] document IPv6 support for syslog
19 - [MEDIUM] IPv6 support for stick-tables
20 - [DOC] document IPv6 support for stick-tables
21 - [DOC] update ROADMAP file
22 - [BUG] session: src_conn_cur was returning src_conn_cnt instead
23 - [MINOR] frontend: add a make_proxy_line function
24 - [MEDIUM] stream_sock: add support for sending the proxy protocol header line
25 - [MEDIUM] server: add support for the "send-proxy" option
26 - [DOC] update the spec on the proxy protocol
27 - [BUILD] proto_tcp: fix build issue with CTTPROXY
28 - [DOC] update ROADMAP file
29 - [MEDIUM] config: rework the IPv4/IPv6 address parser to support host-only addresses
30 - [MINOR] cfgparse: better report wrong listening addresses and make use of str2sa_range
31 - [BUILD] add the USE_GETADDRINFO build option
32 - [TESTS] provide a test case for various address formats
33 - [BUG] session: conn_retries was not always initialized
34 - [BUG] log: retrieve the target from the session, not the SI
35 - [BUG] http: fix possible incorrect forwarded wrapping chunk size (take 2)
36 - [MINOR] tools: add two macros MID_RANGE and MAX_RANGE
37 - [BUG] http: fix content-length handling on 32-bit platforms
38 - [OPTIM] buffers: uninline buffer_forward()
39 - [BUG] stream_sock: fix handling for server side PROXY protocol
40 - [MINOR] acl: add support for table_cnt and table_avl matches
41 - [DOC] update ROADMAP file
42
Willy Tarreaue0052cc2011-03-13 22:15:02 +0100432011/03/13 : 1.5-dev4
44 - [MINOR] cfgparse: Check whether the path given for the stats socket actually fits into the sockaddr_un structure to avoid truncation.
45 - [MINOR] unix sockets : inherits the backlog size from the listener
46 - [CLEANUP] unix sockets : move create_uxst_socket() in uxst_bind_listener()
47 - [DOC] fix a minor typo
48 - [DOC] fix ignore-persist documentation
49 - [MINOR] add warnings on features not compatible with multi-process mode
50 - [BUG] http: fix http-pretend-keepalive and httpclose/tunnel mode
51 - [MINOR] stats: add support for several packets in stats admin
52 - [BUG] stats: admin commands must check the proxy state
53 - [BUG] stats: admin web interface must check the proxy state
54 - [MINOR] http: add pattern extraction method to stick on query string parameter
55 - [MEDIUM] add internal support for IPv6 server addresses
56 - [MINOR] acl: add be_id/srv_id to match backend's and server's id
57 - [MINOR] log: add support for passing the forwarded hostname
58 - [MINOR] log: ability to override the syslog tag
59 - [MINOR] checks: add PostgreSQL health check
60 - [DOC] update ROADMAP file
61 - [BUILD] pattern: use 'int' instead of 'int32_t'
62 - [OPTIM] linux: add support for bypassing libc to force using vsyscalls
63 - [BUG] debug: report the correct poller list in verbose mode
64 - [BUG] capture: do not capture a cookie if there is no memory left
65 - [BUG] appsession: fix possible double free in case of out of memory
66 - [CRITICAL] cookies: mixing cookies in indirect mode and appsession can crash the process
67 - [BUG] http: correctly update the header list when removing two consecutive headers
68 - [BUILD] add the CPU=native and ARCH=32/64 build options
69 - [BUILD] add -fno-strict-aliasing to fix warnings with gcc >= 4.4
70 - [CLEANUP] hash: move the avalanche hash code globally available
71 - [MEDIUM] hash: add support for an 'avalanche' hash-type
72 - [DOC] update roadmap file
73 - [BUG] http: do not re-enable the PROXY analyser on keep-alive
74 - [OPTIM] http: don't send each chunk in a separate packet
75 - [DOC] fix minor typos reported recently in the peers section
76 - [DOC] fix another typo in the doc
77 - [MINOR] stats: report HTTP message state and buffer flags in error dumps
78 - [BUG] http chunking: don't report a parsing error on connection errors
79 - [BUG] stream_interface: truncate buffers when sending error messages
80 - [MINOR] http: support wrapping messages in error captures
81 - [MINOR] http: capture incorrectly chunked message bodies
82 - [MINOR] stats: add global event ID and count
83 - [BUG] http: analyser optimizations broke pipelining
84 - [CLEANUP] frontend: only apply TCP-specific settings to TCP/TCP6 sockets
85 - [BUG] http: fix incorrect error reporting during data transfers
86 - [CRITICAL] session: correctly leave turn-around and queue states on abort
87 - [BUG] session: release slot before processing pending connections
88 - [MINOR] tcp: add support for dynamic MSS setting
89 - [BUG] stick-table: correctly terminate string keys during lookups
90 - [BUG] acl: fix handling of empty lines in pattern files
91 - [BUG] stick-table: use the private buffer when padding strings
92 - [BUG] ebtree: fix ebmb_lookup() with len smaller than the tree's keys
93 - [OPTIM] ebtree: ebmb_lookup: reduce stack usage by moving the return code out of the loop
94 - [OPTIM] ebtree: inline ebst_lookup_len and ebis_lookup_len
95 - [REVERT] undo the stick-table string key lookup fixes
96 - [MINOR] http: improve url_param pattern extraction to ignore empty values
97 - [BUILD] frontend: shut a warning with TCP_MAXSEG
98 - [BUG] http: update the header list's tail when removing the last header
99 - [DOC] fix minor typo in the proxy protocol doc
100 - [DOC] fix typos (http-request instead of http-check)
101 - [BUG] http: use correct ACL pointer when evaluating authentication
102 - [BUG] cfgparse: correctly count one socket per port in ranges
103 - [BUG] startup: set the rlimits before binding ports, not after.
104 - [BUG] acl: srv_id must return no match when the server is NULL
105 - [MINOR] acl: add ability to check for internal response-only parameters
106 - [MINOR] acl: srv_id is only valid in responses
107 - [MINOR] config: warn if response-only conditions are used in "redirect" rules
108 - [BUG] acl: fd leak when reading patterns from file
109 - [DOC] fix minor typo in "usesrc"
110 - [BUG] http: fix possible incorrect forwarded wrapping chunk size
111 - [BUG] http: fix computation of message body length after forwarding has started
112 - [BUG] http: balance url_param did not work with first parameters on POST
113 - [TESTS] update the url_param regression test to test check_post too
114 - [DOC] update ROADMAP
115 - [DOC] internal: reflect the fact that SI_ST_ASS is transient
116 - [BUG] config: don't crash on empty pattern files.
117 - [MINOR] stream_interface: make use of an applet descriptor for IO handlers
118 - [REORG] stream_interface: move the st0, st1 and private members to the applet
119 - [REORG] stream_interface: split the struct members in 3 parts
120 - [REORG] session: move client and server address to the stream interface
121 - [REORG] tcp: make tcpv4_connect_server() take the target address from the SI
122 - [MEDIUM] stream_interface: store the target pointer and type
123 - [CLEANUP] stream_interface: remove the applet.handler pointer
124 - [MEDIUM] log: take the logged server name from the stream interface
125 - [CLEANUP] session: remove data_source from struct session
126 - [CLEANUP] stats: make all dump functions only rely on the stream interface
127 - [REORG] session: move the data_ctx struct to the stream interface's applet
128 - [MINOR] proxy: add PR_O2_DISPATCH to detect dispatch mode
129 - [MINOR] cfgparse: only keep one of dispatch, transparent, http_proxy
130 - [MINOR] session: add a pointer to the new target into the session
131 - [MEDIUM] session: remove s->prev_srv which is not needed anymore
132 - [CLEANUP] stream_interface: use inline functions to manipulate targets
133 - [MAJOR] session: remove the ->srv pointer from struct session
134 - [MEDIUM] stats: split frontend and backend stats
135 - [MEDIUM] http: always evaluate http-request rules before stats http-request
136 - [REORG] http: move the http-request rules to proto_http
137 - [BUG] http: stats were not incremented on http-request deny
138 - [MINOR] checks: report it if checks fail due to socket creation error
139
Willy Tarreau442e8342010-11-11 23:29:35 +01001402010/11/11 : 1.5-dev3
141 - [DOC] fix http-request documentation
142 - [MEDIUM] enable/disable servers from the stats web interface
143 - [MEDIUM] stats: add an admin level
144 - [DOC] stats: document the "stats admin" statement
145 - [MINOR] startup: print the proxy socket which caused an error
146 - [CLEANUP] Remove unneeded chars allocation
147 - [MINOR] config: detect options not supported due to compilation options
148 - [MINOR] Add pattern's fetchs payload and payload_lv
149 - [MINOR] frontend: improve accept-proxy header parsing
150 - [MINOR] frontend: add tcpv6 support on accept-proxy bind
151 - [MEDIUM] Enhance message errors management on binds
152 - [MINOR] Manage unix socket source field on logs
153 - [MINOR] Manage unix socket source field on session dump on sock stats
154 - [MINOR] Support of unix listener sockets for debug and log event messages on frontend.c
155 - [MINOR] Add some tests on sockets family for port remapping and mode transparent.
156 - [MINOR] Manage socket type unix for some logs
157 - [MINOR] Enhance controls of socket's family on acls and pattern fetch
158 - [MINOR] Support listener's sockets unix on http logs.
159 - [MEDIUM] Add supports of bind on unix sockets.
160 - [BUG] stick table purge failure if size less than 255
161 - [BUG] stick table entries expire on counters updates/read or show table, even if there is no "expire" parameter
162 - [MEDIUM] Implement tcp inspect response rules
163 - [DOC] tcp-response content and inspect
164 - [MINOR] new acls fetch req_ssl_hello_type and rep_ssl_hello_type
165 - [DOC] acls rep_ssl_hello and req_ssl_hello
166 - [MEDIUM] Create new protected pattern types CONSTSTRING and CONSTDATA to force memcpy if data from protected areas need to be manipulated.
167 - [DOC] new type binary in stick-table
168 - [DOC] stick store-response and new patterns payload and payload_lv
169 - [MINOR] Manage all types (ip, integer, string, binary) on cli "show table" command
170 - [MEDIUM] Create updates tree on stick table to manage sync.
171 - [MAJOR] Add new files src/peer.c, include/proto/peers.h and include/types/peers.h for sync stick table management
172 - [MEDIUM] Manage peers section parsing and stick table registration on peers.
173 - [MEDIUM] Manage soft stop on peers proxy
174 - [DOC] add documentation for peers section
175 - [MINOR] checks: add support for LDAPv3 health checks
176 - [MINOR] add better support to "mysql-check"
177 - [BUG] Restore info about available active/backup servers
178 - [CONTRIB] Update haproxy.pl
179 - [CONTRIB] Update Cacti Tempates
180 - [CONTRIB] add templates for Cacti.
181 - [BUG] http: don't consider commas as a header delimitor within quotes
182 - [MINOR] support a global jobs counter
183 - [DOC] add a summary about cookie incompatibilities between specs and browsers
184 - [DOC] fix description of cookie "insert" and "indirect" modes
185 - [MEDIUM] http: fix space handling in the request cookie parser
186 - [MEDIUM] http: fix space handling in the response cookie parser
187 - [DOC] fix typo in the queue() definition (backend, not frontend)
188 - [BUG] deinit: unbind listeners before freeing them
189 - [BUG] stream_interface: only call si->release when both dirs are closed
190 - [MEDIUM] buffers: rework the functions to exchange between SI and buffers
191 - [DOC] fix typo in the avg_queue() and be_conn() definition (backend, not frontend)
192 - [MINOR] halog: add '-tc' to sort by termination codes
193 - [MINOR] halog: skip non-traffic logs for -st and -tc
194 - [BUG] stream_sock: cleanly disable the listener in case of resource shortage
195 - [BUILD] stream_sock: previous fix lacked the #include, causing a warning.
196 - [DOC] bind option is "defer-accept", not "defer_accept"
197 - [DOC] missing index entry for http-check send-state
198 - [DOC] tcp-request inspect-delay is for backends too
199 - [BUG] ebtree: string_equal_bits() could return garbage on identical strings
200 - [BUG] stream_sock: try to flush any extra pending request data after a POST
201 - [BUILD] proto_http: eliminate some build warnings with gcc-2.95
202 - [MEDIUM] make it possible to combine http-pretend-keepalived with httpclose
203 - [MEDIUM] tcp-request : don't wait for inspect-delay to expire when the buffer is full
204 - [MEDIUM] checks: add support for HTTP contents lookup
205 - [TESTS] add test-check-expect to test various http-check methods
206 - [MINOR] global: add "tune.chksize" to change the default check buffer size
207 - [MINOR] cookie: add options "maxidle" and "maxlife"
208 - [MEDIUM] cookie: support client cookies with some contents appended to their value
209 - [MINOR] http: make some room in the transaction flags to extend cookies
210 - [MINOR] cookie: add the expired (E) and old (O) flags for request cookies
211 - [MEDIUM] cookie: reassign set-cookie status flags to store more states
212 - [MINOR] add encode/decode function for 30-bit integers from/to base64
213 - [MEDIUM] cookie: check for maxidle and maxlife for incoming dated cookies
214 - [MEDIUM] cookie: set the date in the cookie if needed
215 - [DOC] document the cookie maxidle and maxlife parameters
216 - [BUG] checks: don't log backend down for all zero-weight servers
217 - [MEDIUM] checks: set server state to one state from failure when leaving maintenance
218 - [BUG] config: report correct keywords for "observe"
219 - [MINOR] checks: ensure that we can inherit binary checks from the defaults section
220 - [MINOR] acl: add the http_req_first match
221 - [DOC] fix typos about bind-process syntax
222 - [BUG] cookie: correctly unset default cookie parameters
223 - [MINOR] cookie: add support for the "preserve" option
224 - [BUG] ebtree: fix duplicate strings insertion
225 - [CONTRIB] halog: report per-url counts, errors and times
226 - [CONTRIB] halog: minor speed improvement in timer parser
227 - [MINOR] buffers: add a new request analyser flag for PROXY mode
228 - [MINOR] listener: add the "accept-proxy" option to the "bind" keyword
229 - [MINOR] standard: add read_uint() to parse a delimited unsigned integer
230 - [MINOR] standard: change arg type from const char* to char*
231 - [MINOR] frontend: add a new analyser to parse a proxied connection
232 - [MEDIUM] session: call the frontend_decode_proxy analyser on proxied connections
233 - [DOC] add the proxy protocol's specifications
234 - [DOC] document the 'accept-proxy' bind option
235 - [MINOR] cfgparse: report support of <path> for the 'bind' statements
236 - [DOC] add references to unix socket handling
237 - [MINOR] move MAXPATHLEN definition to compat.h
238 - [MEDIUM] unix sockets: cleanup the error reporting path
239 - [BUG] session: don't stop forwarding of data upon last packet
240 - [CLEANUP] accept: replace some inappropriate Alert() calls with send_log()
241 - [BUILD] peers: shut a printf format warning (key_size is a size_t)
242 - [BUG] accept: don't close twice upon error
243 - [OPTIM] session: don't recheck analysers when buffer flags have not changed
244 - [OPTIM] stream_sock: don't clear FDs that are already cleared
245 - [BUG] proto_tcp: potential bug on pattern fetch dst and dport
246
Willy Tarreau37242fa2010-08-28 19:21:00 +02002472010/08/28 : 1.5-dev2
248 - [MINOR] startup: release unused structs after forking
249 - [MINOR] startup: don't wait for nothing when no old pid remains
250 - [CLEANUP] reference product branch 1.5
251 - [MEDIUM] signals: add support for registering functions and tasks
252 - [MEDIUM] signals: support redistribution of signal zero when stopping
253 - [BUG] http: don't set auto_close if more data are expected
254
Willy Tarreaufc815fd2010-08-25 10:56:53 +02002552010/08/25 : 1.5-dev1
256 - [BUG] stats: session rate limit gets garbaged in the stats
257 - [DOC] mention 'option http-server-close' effect in Tq section
258 - [DOC] summarize and highlight persistent connections behaviour
259 - [DOC] add configuration samples
260 - [BUG] http: dispatch and http_proxy modes were broken for a long time
261 - [BUG] http: the transaction must be initialized even in TCP mode
262 - [BUG] tcp: dropped connections must be counted as "denied" not "failed"
263 - [BUG] consistent hash: balance on all servers, not only 2 !
264 - [CONTRIB] halog: report per-server status codes, errors and response times
265 - [BUG] http: the transaction must be initialized even in TCP mode (part 2)
266 - [BUG] client: always ensure to zero rep->analysers
267 - [BUG] session: clear BF_READ_ATTACHED before next I/O
268 - [BUG] http: automatically close response if req is aborted
269 - [BUG] proxy: connection rate limiting was eating lots of CPU
270 - [BUG] http: report correct flags in case of client aborts during body
271 - [TESTS] refine non-regression tests and add 4 new tests
272 - [BUG] debug: wrong pointer was used to report a status line
273 - [BUG] debug: correctly report truncated messages
274 - [DOC] document the "dispatch" keyword
275 - [BUG] stick_table: fix possible memory leak in case of connection error
276 - [CLEANUP] acl: use 'L6' instead of 'L4' in ACL flags relying on contents
277 - [MINOR] accept: count the incoming connection earlier
278 - [CLEANUP] tcp: move some non tcp-specific layer6 processing out of proto_tcp
279 - [CLEANUP] client: move some ACLs away to their respective locations
280 - [CLEANUP] rename client -> frontend
281 - [MEDIUM] separate protocol-level accept() from the frontend's
282 - [MINOR] proxy: add a list to hold future layer 4 rules
283 - [MEDIUM] config: parse tcp layer4 rules (tcp-request accept/reject)
284 - [MEDIUM] tcp: check for pure layer4 rules immediately after accept()
285 - [OPTIM] frontend: tell the compiler that errors are unlikely to occur
286 - [MEDIUM] frontend: check for LI_O_TCP_RULES in the listener
287 - [MINOR] frontend: only check for monitor-net rules if LI_O_CHK_MONNET is set
288 - [CLEANUP] buffer->cto is not used anymore
289 - [MEDIUM] session: finish session establishment sequence in with I/O handlers
290 - [MEDIUM] session: initialize server-side timeouts after connect()
291 - [MEDIUM] backend: initialize the server stream_interface upon connect()
292 - [MAJOR] frontend: don't initialize the server-side stream_int anymore
293 - [MEDIUM] session: move the conn_retries attribute to the stream interface
294 - [MEDIUM] session: don't assign conn_retries upon accept() anymore
295 - [MINOR] frontend: rely on the frontend and not the backend for INDEPSTR
296 - [MAJOR] frontend: reorder the session initialization upon accept
297 - [MINOR] proxy: add an accept() callback for the application layer
298 - [MAJOR] frontend: split accept() into frontend_accept() and session_accept()
299 - [MEDIUM] stats: rely on the standard session_accept() function
300 - [MINOR] buffer: refine the flags that may wake an analyser up.
301 - [MINOR] stream_sock: don't dereference a non-existing frontend
302 - [MINOR] session: differenciate between accepted connections and received connections
303 - [MEDIUM] frontend: count the incoming connection earlier
304 - [MINOR] frontend: count denied TCP requests separately
305 - [CLEANUP] stick_table: add/clarify some comments
306 - [BUILD] memory: add a few missing parenthesis to the pool management macros
307 - [MINOR] stick_table: add support for variable-sized data
308 - [CLEANUP] stick_table: rename some stksess struct members to avoid confusion
309 - [CLEANUP] stick_table: move pattern to key functions to stick_table.c
310 - [MEDIUM] stick_table: add room for extra data types
311 - [MINOR] stick_table: add support for "conn_cum" data type.
312 - [MEDIUM] stick_table: don't overwrite data when storing an entry
313 - [MINOR] config: initialize stick tables after all the parsing
314 - [MINOR] stick_table: provide functions to return stksess data from a type
315 - [MEDIUM] stick_table: move the server ID to a generic data type
316 - [MINOR] stick_table: enable it for frontends too
317 - [MINOR] stick_table: export the stick_table_key
318 - [MINOR] tcp: add per-source connection rate limiting
319 - [MEDIUM] stick_table: separate storage and update of session entries
320 - [MEDIUM] stick-tables: add a reference counter to each entry
321 - [MINOR] session: add a pointer to the tracked counters for the source
322 - [CLEANUP] proto_tcp: make the config parser a little bit more flexible
323 - [BUG] config: report the correct proxy type in tcp-request errors
324 - [MINOR] config: provide a function to quote args in a more friendly way
325 - [BUG] stick_table: the fix for the memory leak caused a regression
326 - [MEDIUM] backend: support servers on 0.0.0.0
327 - [BUG] stick-table: correctly refresh expiration timers
328 - [MEDIUM] stream-interface: add a ->release callback
329 - [MINOR] proxy: add a "parent" member to the structure
330 - [MEDIUM] session: make it possible to call an I/O handler on both SI
331 - [MINOR] tools: add a fast div64_32 function
332 - [MINOR] freq_ctr: add new types and functions for periods different from 1s
333 - [MINOR] errors: provide new status codes for config parsing functions
334 - [BUG] http: denied requests must not be counted as denied resps in listeners
335 - [MINOR] tools: add a get_std_op() function to parse operators
336 - [MEDIUM] acl: make use of get_std_op() to parse intger ranges
337 - [MAJOR] stream_sock: better wakeup conditions on read()
338 - [BUG] session: analysers must be checked when SI state changes
339 - [MINOR] http: reset analysers to listener's, not frontend's
340 - [MEDIUM] session: support "tcp-request content" rules in backends
341 - [BUILD] always match official tags when doing git-tar
342 - [MAJOR] stream_interface: fix the wakeup conditions for embedded iohandlers
343 - [MEDIUM] buffer: make buffer_feed* support writing non-contiguous chunks
344 - [MINOR] tcp: src_count acl does not have a permanent result
345 - [MAJOR] session: add track-counters to track counters related to the session
346 - [MINOR] stick-table: provide a table lookup function
347 - [MINOR] stick-table: use suffix "_cnt" for cumulated counts
348 - [MEDIUM] session: move counter ACL fetches from proto_tcp
349 - [MEDIUM] session: add concurrent connections counter
350 - [MEDIUM] session: add data in and out volume counters
351 - [MINOR] session: add the trk_conn_cnt ACL keyword to track connection counts
352 - [MEDIUM] session-counters: automatically update tracked connection count
353 - [MINOR] session: add the trk_conn_cur ACL keyword to track concurrent connection
354 - [MINOR] session: add trk_kbytes_* ACL keywords to track data size
355 - [MEDIUM] session: add a counter on the cumulated number of sessions
356 - [MINOR] config: support a comma-separated list of store data types in stick-table
357 - [MEDIUM] stick-tables: add support for arguments to data_types
358 - [MEDIUM] stick-tables: add stored data argument type checking
359 - [MEDIUM] session counters: add conn_rate and sess_rate counters
360 - [MEDIUM] session counters: add bytes_in_rate and bytes_out_rate counters
361 - [MINOR] stktable: add a stktable_update_key() function
362 - [MINOR] session-counters: add a general purpose counter (gpc0)
363 - [MEDIUM] session-counters: add HTTP req/err tracking
364 - [MEDIUM] stats: add "show table [<name>]" to dump a stick-table
365 - [MEDIUM] stats: add "clear table <name> key <value>" to clear table entries
366 - [CLEANUP] stick-table: declare stktable_data_types as extern
367 - [MEDIUM] stick-table: make use of generic types for stored data
368 - [MINOR] stats: correctly report errors on "show table" and "clear table"
369 - [MEDIUM] stats: add the ability to dump table entries matching criteria
370 - [DOC] configuration: document all the new tracked counters
371 - [DOC] stats: document "show table" and "clear table"
372 - [MAJOR] session-counters: split FE and BE track counters
373 - [MEDIUM] tcp: accept the "track-counters" in "tcp-request content" rules
374 - [MEDIUM] session counters: automatically remove expired entries.
375 - [MEDIUM] config: replace 'tcp-request <action>' with "tcp-request connection"
376 - [MEDIUM] session-counters: make it possible to count connections from frontend
377 - [MINOR] session-counters: use "track-sc{1,2}" instead of "track-{fe,be}-counters"
378 - [MEDIUM] session-counters: correctly unbind the counters tracked by the backend
379 - [CLEANUP] stats: use stksess_kill() to remove table entries
380 - [DOC] update the references to session counters and to tcp-request connection
381 - [DOC] cleanup: split a few long lines
382 - [MEDIUM] http: forward client's close when abortonclose is set
383 - [BUG] queue: don't dequeue proxy-global requests on disabled servers
384 - [BUG] stats: global stats timeout may be specified before stats socket.
385 - [BUG] conf: add tcp-request content rules to the correct list
386
Willy Tarreau21475e32010-05-23 08:46:08 +02003872010/05/23 : 1.5-dev0
388 - exact copy of 1.4.6
389
Willy Tarreau5fdd77d2010-05-16 22:34:28 +02003902010/05/16 : 1.4.6
391 - [BUILD] ebtree: update to v6.0.1 to remove references to dprintf()
392 - [CLEANUP] acl: make use of eb_is_empty() instead of open coding the tree's emptiness test
393 - [MINOR] acl: add srv_is_up() to check that a specific server is up or not
394 - [DOC] add a few precisions about the use of RDP cookies
395
Willy Tarreau9d4d9e32010-05-13 22:17:08 +02003962010/05/13 : 1.4.5
397 - [DOC] report minimum kernel version for tproxy in the Makefile
398 - [MINOR] add the "ignore-persist" option to conditionally ignore persistence
399 - [DOC] add the "ignore-persist" option to conditionally ignore persistence
400 - [DOC] fix ignore-persist/force-persist documentation
401 - [BUG] cttproxy: socket fd leakage in check_cttproxy_version
402 - [DOC] doc/configuration.txt: fix typos
403 - [MINOR] option http-pretend-keepalive is both for FEs and BEs
404 - [MINOR] fix possible crash in debug mode with invalid responses
405 - [MINOR] halog: add support for statisticts on status codes
406 - [OPTIM] halog: use a faster zero test in fgets()
407 - [OPTIM] halog: minor speedup by using unlikely()
408 - [OPTIM] halog: speed up fgets2-64 by about 10%
409 - [DOC] refresh the README file and merge the CONTRIB file into it
410 - [MINOR] acl: support loading values from files
411 - [MEDIUM] ebtree: upgrade to version 6.0
412 - [MINOR] acl trees: add flags and union members to store values in trees
413 - [MEDIUM] acl: add ability to insert patterns in trees
414 - [MEDIUM] acl: add tree-based lookups of exact strings
415 - [MEDIUM] acl: add tree-based lookups of networks
416 - [MINOR] acl: ignore empty lines and comments in pattern files
417 - [MINOR] stick-tables: add support for "stick on hdr"
418
Willy Tarreau9508c1c2010-04-07 23:12:24 +02004192010/04/07 : 1.4.4
420 - [BUG] appsession should match the whole cookie name
421 - [CLEANUP] proxy: move PR_O_SSL3_CHK to options2 to release one flag
422 - [MEDIUM] backend: move the transparent proxy address selection to backend
423 - [MINOR] add very fast IP parsing functions
424 - [MINOR] add new tproxy flags for dynamic source address binding
425 - [MEDIUM] add ability to connect to a server from an IP found in a header
426 - [BUILD] config: last patch breaks build without CONFIG_HAP_LINUX_TPROXY
427 - [MINOR] http: make it possible to pretend keep-alive when doing close
428 - [MINOR] config: report "default-server" instead of "(null)" in error messages
429
Willy Tarreau75934a12010-03-30 09:50:08 +02004302010/03/30 : 1.4.3
431 - [CLEANUP] stats: remove printf format warning in stats_dump_full_sess_to_buffer()
432 - [MEDIUM] session: better fix for connection to servers with closed input
433 - [DOC] indicate in the doc how to bind to port ranges
434 - [BUG] backend: L7 hashing must not be performed on incomplete requests
435 - [TESTS] add a simple program to test connection resets
436 - [MINOR] cli: "show errors" should display "backend <NONE>" when backend was not used
437 - [MINOR] config: emit warnings when HTTP-only options are used in TCP mode
438 - [MINOR] config: allow "slowstart 0s"
439 - [BUILD] 'make tags' did not consider files ending in '.c'
440 - [MINOR] checks: add the ability to disable a server in the config
441
Willy Tarreauda618cb2010-03-17 23:41:57 +01004422010/03/17 : 1.4.2
443 - [CLEANUP] product branch update
444 - [DOC] Some more documentation cleanups
445 - [BUG] clf logs segfault when capturing a non existant header
446 - [OPTIM] config: only allocate check buffer when checks are enabled
447 - [MEDIUM] checks: support multi-packet health check responses
448 - [CLEANUP] session: remove duplicate test
449 - [BUG] http: don't wait for response data to leave buffer is client has left
450 - [MINOR] proto_uxst: set accept_date upon accept() to the wall clock time
451 - [MINOR] stats: don't send empty lines in "show errors"
452 - [MINOR] stats: make the data dump function reusable for other purposes
453 - [MINOR] stats socket: add show sess <id> to dump details about a session
454 - [BUG] stats: connection reset counters must be plain ascii, not HTML
455 - [BUG] url_param hash may return a down server
456 - [MINOR] force null-termination of hostname
457 - [MEDIUM] connect to servers even when the input has already been closed
458 - [BUG] don't merge anonymous ACLs !
459 - [BUG] config: fix endless loop when parsing "on-error"
460 - [MINOR] http: don't mark a server as failed when it returns 501/505
461 - [OPTIM] checks: try to detect the end of response without polling again
462 - [BUG] checks: don't report an error when recv() returns an error after data
463 - [BUG] checks: don't abort when second poll returns an error
464 - [MINOR] checks: make shutdown() silently fail
465 - [BUG] http: fix truncated responses on chunk encoding when size divides buffer size
466 - [BUG] init: unconditionally catch SIGPIPE
467 - [BUG] checks: don't wait for a close to start parsing the response
468
Willy Tarreauc5e60c32010-03-04 23:39:19 +01004692010/03/04 : 1.4.1
470 - [BUG] Clear-cookie path issue
471 - [DOC] fix typo on stickiness rules
472 - [BUILD] fix BSD and OSX makefiles for missing files
473 - [BUILD] includes order breaks OpenBSD build
474 - [BUILD] fix some build warnings on Solaris with is* macros
475 - [BUG] logs: don't report "last data" when we have just closed after an error
476 - [BUG] logs: don't report "proxy request" when server closes early
477 - [BUILD] fix platform-dependant build issues related to crypt()
478 - [STATS] count transfer aborts caused by client and by server
479 - [STATS] frontend requests were not accounted for failed requests
480 - [MINOR] report total number of processed connections when stopping a proxy
481 - [DOC] be more clear about the limitation to one single monitor-net entry
482
Willy Tarreaue18fdfd2010-02-26 14:55:22 +01004832010/02/26 : 1.4.0
484 - [MINOR] stats: report maint state for tracking servers too
485 - [DOC] fix summary to add pattern extraction
486 - [DOC] Documentation cleanups
487 - [BUG] cfgparse memory leak and missing free calls in deinit()
488 - [BUG] pxid/puid/luid: don't shift IDs when some of them are forced
489 - [EXAMPLES] add auth.cfg
490 - [BUG] uri_auth: ST_SHLGNDS should be 0x00000008 not 0x0000008
491 - [BUG] uri_auth: do not attemp to convert uri_auth -> http-request more than once
492 - [BUILD] auth: don't use unnamed unions
493 - [BUG] config: report unresolvable host names as errors
494 - [BUILD] fix build breakage with DEBUG_FULL
495 - [DOC] fix a typo about timeout check and clarify the explanation.
496 - [MEDIUM] http: don't use trash to realign large buffers
497 - [STATS] report HTTP requests (total and rate) in frontends
498 - [STATS] separate frontend and backend HTTP stats
499 - [MEDIUM] http: revert to use a swap buffer for realignment
500 - [MINOR] stats: report the request rate in frontends as cell titles
501 - [MINOR] stats: mark areas with an underline when tooltips are available
502 - [DOC] reorder some entries to maintain the alphabetical order
503 - [DOC] cleanup of the keyword matrix
504
Willy Tarreaub05613d2010-02-02 10:18:28 +01005052010/02/02 : 1.4-rc1
506 - [MEDIUM] add a maintenance mode to servers
507 - [MINOR] http-auth: last fix was wrong
508 - [CONTRIB] add base64rev-gen.c that was used to generate the base64rev table.
509 - [MINOR] Base64 decode
510 - [MINOR] generic auth support with groups and encrypted passwords
511 - [MINOR] add ACL_TEST_F_NULL_MATCH
512 - [MINOR] http-request: allow/deny/auth support for frontend/backend/listen
513 - [MINOR] acl: add http_auth and http_auth_group
514 - [MAJOR] use the new auth framework for http stats
515 - [DOC] add info about userlists, http-request and http_auth/http_auth_group acls
516 - [STATS] make it possible to change a CLI connection timeout
517 - [BUG] patterns: copy-paste typo in type conversion arguments
518 - [MINOR] pattern: make the converter more flexible by supporting void* and int args
519 - [MINOR] standard: str2mask: string to netmask converter
520 - [MINOR] pattern: add support for argument parsers for converters
521 - [MINOR] pattern: add the "ipmask()" converting function
522 - [MINOR] config: off-by-one in "stick-table" after list of converters
523 - [CLEANUP] acl, patterns: make use of my_strndup() instead of malloc+memcpy
524 - [BUG] restore accidentely removed line in last patch !
525 - [MINOR] checks: make the HTTP check code add the CRLF itself
526 - [MINOR] checks: add the server's status in the checks
527 - [BUILD] halog: make without arch-specific optimizations
528 - [BUG] halog: fix segfault in case of empty log in PCT mode (cherry picked from commit fe362fe4762151d209b9656639ee1651bc2b329d)
529 - [MINOR] http: disable keep-alive when process is going down
530 - [MINOR] acl: add build_acl_cond() to make it easier to add ACLs in config
531 - [CLEANUP] config: use build_acl_cond() instead of parse_acl_cond()
532 - [CLEANUP] config: use warnif_cond_requires_resp() to check for bad ACLs
533 - [MINOR] prepare req_*/rsp_* to receive a condition
534 - [CLEANUP] config: specify correct const char types to warnif_* functions
535 - [MEDIUM] config: factor out the parsing of 20 req*/rsp* keywords
536 - [MEDIUM] http: make the request filter loop check for optional conditions
537 - [MEDIUM] http: add support for conditional request filter execution
538 - [DOC] add some build info about the AIX platform (cherry picked from commit e41914c77edbc40aebf827b37542d37d758e371e)
539 - [MEDIUM] http: add support for conditional request header addition
540 - [MEDIUM] http: add support for conditional response header rewriting
541 - [DOC] add some missing ACLs about response header matching
542 - [MEDIUM] http: add support for proxy authentication
543 - [MINOR] http-auth: make the 'unless' keyword work as expected
544 - [CLEANUP] config: use build_acl_cond() to simplify http-request ACL parsing
545 - [MEDIUM] add support for anonymous ACLs
546 - [MEDIUM] http: switch to tunnel mode after status 101 responses
547 - [MEDIUM] http: stricter processing of the CONNECT method
548 - [BUG] config: reset check request to avoid double free when switching to ssl/sql
549 - [MINOR] config: fix too large ssl-hello-check message.
550 - [BUG] fix error response in case of server error
551
Willy Tarreau2eba6aa2010-01-25 23:28:05 +01005522010/01/25 : 1.4-dev8
553 - [CLEANUP] Keep in sync "defaults" support between documentation and code
554 - [MEDIUM] http: add support for Proxy-Connection header
555 - [CRITICAL] buffers: buffer_insert_line2 must not change the ->w entry
556 - [MINOR] http: remove a copy-paste typo in transaction cleaning
557 - [BUG] http: trim any excess buffer data when recycling a connection
558
Willy Tarreau6939b552010-01-25 01:54:37 +01005592010/01/25 : 1.4-dev7
560 - [BUG] appsession: possible memory leak in case of out of memory condition
561 - [MINOR] config: don't accept 'appsession' in defaults section
562 - [MINOR] Add function to parse a size in configuration
563 - [MEDIUM] Add stick table (persistence) management functions and types
564 - [MEDIUM] Add pattern fetch management types and functions
565 - [MEDIUM] Add src dst and dport pattern fetches.
566 - [MEDIUM] Add stick table configuration and init.
567 - [MEDIUM] Add stick and store rules analysers.
568 - [MINOR] add option "mysql-check" to use MySQL health checks
569 - [BUG] health checks: fix requeued message
570 - [OPTIM] remove SSP_O_VIA and SSP_O_STATUS
571 - [BUG] checks: fix newline termination
572 - [MINOR] acl: add fe_id/so_id to match frontend's and socket's id
573 - [BUG] appsession's sessid must be reset at end of transaction
574 - [BUILD] appsession did not build anymore under gcc-2.95
575 - [BUG] server redirection used an uninitialized string.
576 - [MEDIUM] http: fix handling of message pointers
577 - [MINOR] http: fix double slash prefix with server redirect
578 - [MINOR] http redirect: add the ability to append a '/' to the URL
579 - [BUG] stream_interface: fix retnclose and remove cond_close
580 - [MINOR] http redirect: don't explicitly state keep-alive on 1.1
581 - [MINOR] http: move appsession 'sessid' from session to http_txn
582 - [OPTIM] reorder http_txn to optimize cache lines placement
583 - [MINOR] http: differentiate waiting for new request and waiting for a complete requst
584 - [MINOR] http: add a separate "http-keep-alive" timeout
585 - [MINOR] config: remove undocumented and buggy 'timeout appsession'
586 - [DOC] fix various too large lines
587 - [DOC] remove several trailing spaces
588 - [DOC] add the doc about stickiness
589 - [BUILD] remove a warning in standard.h on AIX
590 - [BUG] checks: chars are unsigned on AIX, check was always true
591 - [CLEANUP] stream_sock: MSG_NOSIGNAL is only for send(), not recv()
592 - [BUG] check: we must not check for error before reading a response
593 - [BUG] buffers: remove remains of wrong obsolete length check
594 - [OPTIM] stream_sock: don't shutdown(write) when the socket is in error
595 - [BUG] http: don't count req errors on client resets or t/o during keep-alive
596 - [MEDIUM] http: don't switch to tunnel mode upon close
597 - [DOC] add documentation about connection header processing
598 - [MINOR] http: add http_remove_header2() to remove a header value.
599 - [MINOR] tools: add a "word_match()" function to match words and ignore spaces
600 - [MAJOR] http: rework request Connection header handling
601 - [MAJOR] http: rework response Connection header handling
602 - [MINOR] add the ability to force kernel socket buffer size.
603 - [BUG] http_server_error() must not purge a previous pending response
604 - [OPTIM] http: don't delay response if next request is incomplete
605 - [MINOR] add the "force-persist" statement to force persistence on down servers
606 - [MINOR] http: logs must report persistent connections to down servers
607 - [BUG] buffer_replace2 must never change the ->w entry
608
Willy Tarreau11f8f542010-01-08 07:49:44 +01006092010/01/08 : 1.4-dev6
610 - [BUILD] warning in stream_interface.h
611 - [BUILD] warning ultoa_r returns char *
612 - [MINOR] hana: only report stats if it is enabled
613 - [MINOR] stats: add "a link" & "a href" for sockets
614 - [MINOR]: stats: add show-legends to report additional informations
615 - [MEDIUM] default-server support
616 - [BUG]: add 'observer', 'on-error', 'error-limit' to supported options list
617 - [MINOR] stats: add href to tracked server
618 - [BUG] stats: show UP/DOWN status also in tracking servers
619 - [DOC] Restore ability to search a keyword at the beginning of a line
620 - [BUG] stats: cookie should be reported under backend not under proxy
621 - [BUG] cfgparser/stats: fix error message
622 - [BUG] http: disable auto-closing during chunk analysis
623 - [BUG] http: fix hopefully last closing issue on data forwarding
624 - [DEBUG] add an http_silent_debug function to debug HTTP states
625 - [MAJOR] http: fix again the forward analysers
626 - [BUG] http_process_res_common() must not skip the forward analyser
627 - [BUG] http: some possible missed close remain in the forward chain
628 - [BUG] http: redirect needed to be updated after recent changes
629 - [BUG] http: don't set no-linger on response in case of forced close
630 - [MEDIUM] http: restore the original behaviour of option httpclose
631 - [TESTS] add a file to test various connection modes
632 - [BUG] http: check options before the connection header
633 - [MAJOR] session: fix the order by which the analysers are run
634 - [MEDIUM] session: also consider request analysers added during response
635 - [MEDIUM] http: make safer use of the DONT_READ and AUTO_CLOSE flags
636 - [BUG] http: memory leak with captures when using keep-alive
637 - [BUG] http: fix for capture memory leak was incorrect
638 - [MINOR] http redirect: use proper call to return last response
639 - [MEDIUM] http: wait for some flush of the response buffer before a new request
640 - [MEDIUM] session: limit the number of analyser loops
641
Willy Tarreau1f445892010-01-03 23:23:36 +01006422010/01/03 : 1.4-dev5
643 - [MINOR] server tracking: don't care about the tracked server's mode
644 - [MEDIUM] appsession: add "len", "prefix" and "mode" options
645 - [MEDIUM] appsession: add the "request-learn" option
646 - [BUG] Configuration parser bug when escaping characters
647 - [MINOR] CSS & HTML fun
648 - [MINOR] Collect & provide http response codes received from servers
649 - [BUG] Fix silly typo: hspr_other -> hrsp_other
650 - [MINOR] Add "a name" to stats page
651 - [MINOR] add additional "a href"s to stats page
652 - [MINOR] Collect & provide http response codes for frontends, fix backends
653 - [DOC] some small spell fixes and unifications
654 - [MEDIUM] Decrease server health based on http responses / events, version 3
655 - [BUG] format '%d' expects type 'int', but argument 5 has type 'long int'
656 - [BUG] config: fix erroneous check on cookie domain names, again
657 - [BUG] Healthchecks: get a proper error code if connection cannot be completed immediately
658 - [DOC] trivial fix for man page
659 - [MINOR] config: report all supported options for the "bind" keyword
660 - [MINOR] tcp: add support for the defer_accept bind option
661 - [MINOR] unix socket: report the socket path in case of bind error
662 - [CONTRIB] halog: support searching by response time
663 - [DOC] add a reminder about obsolete documents
664 - [DOC] point to 1.4 doc, not 1.3
665 - [DOC] option tcp-smart-connect was missing from index
666 - [MINOR] http: detect connection: close earlier
667 - [CLEANUP] sepoll: clean up the fd_clr/fd_set functions
668 - [OPTIM] move some rarely used fields out of fdtab
669 - [MEDIUM] fd: merge fd_list into fdtab
670 - [MAJOR] buffer: flag BF_DONT_READ to disable reads when not required
671 - [MINOR] http: add new transaction flags for keep-alive and content-length
672 - [MEDIUM] http request: parse connection, content-length and transfer-encoding
673 - [MINOR] http request: update the TX_SRV_CONN_KA flag on rewrite
674 - [MINOR] http request: simplify the test of no-data
675 - [MEDIUM] http request: simplify POST length detection
676 - [MEDIUM] http request: make use of pre-parsed transfer-encoding header
677 - [MAJOR] http: create the analyser which waits for a response
678 - [MINOR] http: pre-set the persistent flags in the transaction
679 - [MEDIUM] http response: check body length and set transaction flags
680 - [MINOR] http response: update the TX_CLI_CONN_KA flag on rewrite
681 - [MINOR] http: remove the last call to stream_int_return
682 - [IMPORT] import ebtree v5.0 into directory ebtree/
683 - [MEDIUM] build: switch ebtree users to use new ebtree version
684 - [CLEANUP] ebtree: remove old unused files
685 - [BUG] definitely fix regparm issues between haproxy core and ebtree
686 - [CLEANUP] ebtree: cast to char * to get rid of gcc warning
687 - [BUILD] missing #ifndef in ebmbtree.h
688 - [BUILD] missing #ifndef in ebsttree.h
689 - [MINOR] tools: add hex2i() function to convert hex char to int
690 - [MINOR] http: create new MSG_BODY sub-states
691 - [BUG] stream_sock: BUF_INFINITE_FORWARD broke splice on 64-bit platforms
692 - [DOC] option is "defer-accept", not "defer_accept"
693 - [MINOR] http: keep pointer to beginning of data
694 - [BUG] x-original-to: name was not set in default instance
695 - [MINOR] http: detect tunnel mode and set it in the session
696 - [BUG] config: fix error message when config file is not found
697 - [BUG] config: fix wrong handling of too large argument count
698 - [BUG] config: disable 'option httplog' on TCP proxies
699 - [BUG] config: fix erroneous check on cookie domain names
700 - [BUG] config: cookie domain was ignored in defaults sections
701 - [MINOR] config: support passing multiple "domain" statements to cookies
702 - [MINOR] ebtree: add functions to lookup non-null terminated strings
703 - [MINOR] config: don't report error on all subsequent files on failure
704 - [BUG] second fix for the printf format warning
705 - [BUG] check_post: limit analysis to the buffer length
706 - [MEDIUM] http: process request body in a specific analyser
707 - [MEDIUM] backend: remove HTTP POST parsing from get_server_ph_post()
708 - [MAJOR] http: completely process the "connection" header
709 - [MINOR] http: only consider chunk encoding with HTTP/1.1
710 - [MAJOR] buffers: automatically compute the maximum buffer length
711 - [MINOR] http: move the http transaction init/cleanup code to proto_http
712 - [MINOR] http: move 1xx handling earlier to eliminate a lot of ifs
713 - [MINOR] http: introduce a new synchronisation state : HTTP_MSG_DONE
714 - [MEDIUM] http: rework chunk-size parser
715 - [MEDIUM] http: add a new transaction flags indicating if we know the transfer length
716 - [MINOR] buffers: add buffer_ignore() to skip some bytes
717 - [BUG] http: offsets are relative to the buffer, not to ->som
718 - [MEDIUM] http: automatically re-aling request buffer
719 - [BUG] http: body parsing must consider the start of message
720 - [MINOR] new function stream_int_cond_close()
721 - [MAJOR] http: implement body parser
722 - [BUG] http: typos on several unlikely() around header insertion
723 - [BUG] stream_sock: wrong max computation on recv
724 - [MEDIUM] http: rework the buffer alignment logic
725 - [BUG] buffers: wrong size calculation for displaced data
726 - [MINOR] stream_sock: prepare for closing when all pending data are sent
727 - [MEDIUM] http: add two more states for the closing period
728 - [MEDIUM] http: properly handle "option forceclose"
729 - [MINOR] stream_sock: add SI_FL_NOLINGER for faster close
730 - [MEDIUM] http: make forceclose use SI_FL_NOLINGER
731 - [MEDIUM] session: set SI_FL_NOLINGER when aborting on write timeouts
732 - [MEDIUM] http: add some SI_FL_NOLINGER around server errors
733 - [MINOR] config: option forceclose is valid in frontends too
734 - [BUILD] halog: insufficient include path in makefile
735 - [MEDIUM] http: make the analyser not rely on msg being initialized anymore
736 - [MEDIUM] http: make the parsers able to wait for a buffer flush
737 - [MAJOR] http: add support for option http-server-close
738 - [BUG] http: ensure we abort data transfer on write error
739 - [BUG] last fix was overzealous and disabled server-close
740 - [BUG] http: fix erroneous trailers size computation
741 - [MINOR] stream_sock: enable MSG_MORE when forwarding finite amount of data
742 - [OPTIM] http: set MSG_MORE on response when a pipelined request is pending
743 - [BUG] http: redirects were broken by chunk changes
744 - [BUG] http: the request URI pointer is relative to the buffer
745 - [OPTIM] http: don't immediately enable reading on request
746 - [MINOR] http: move redirect messages to HTTP/1.1 with a content-length
747 - [BUG] http: take care of errors, timeouts and aborts during the data phase
748 - [MINOR] http: don't wait for sending requests to the server
749 - [MINOR] http: make the conditional redirect support keep-alive
750 - [BUG] http: fix cookie parser to support spaces and commas in values
751 - [MINOR] config: some options were missing for "redirect"
752 - [MINOR] redirect: add support for unconditional rules
753 - [MINOR] config: centralize proxy struct initialization
754 - [MEDIUM] config: remove the limitation of 10 reqadd/rspadd statements
755 - [MEDIUM] config: remove the limitation of 10 config files
756 - [CLEANUP] http: remove a remaining impossible condition
757 - [OPTIM] http: optimize a bit the construct of the forward loops
758
Willy Tarreauc82a9e52009-10-12 06:40:53 +02007592009/10/12 : 1.4-dev4
760 - [DOC] add missing rate_lim and rate_max
761 - [MAJOR] struct chunk rework
762 - [MEDIUM] Health check reporting code rework + health logging, v3
763 - [BUG] check if rise/fall has an argument and it is > 0
764 - [MINOR] health checks logging unification
765 - [MINOR] add "description", "node" and show-node"/"show-desc", remove "node-name", v2
766 - [MINOR] Allow dots in show-node & add "white-space: nowrap" in th.pxname.
767 - [DOC] Add information about http://haproxy.1wt.eu/contrib.html
768 - [MINOR] Introduce include/types/counters.h
769 - [CLEANUP] Move counters to dedicated structures
770 - [MINOR] Add "clear counters" to clear statistics counters
771 - [MEDIUM] Collect & provide separate statistics for sockets, v2
772 - [BUG] Fix NULL pointer dereference in stats_check_uri_auth(), v2
773 - [MINOR] acl: don't report valid acls as potential mistakes
774 - [MINOR] Add cut_crlf(), ltrim(), rtrim() and alltrim()
775 - [MINOR] Add chunk_htmlencode and chunk_asciiencode
776 - [MINOR] Capture & display more data from health checks, v2
777 - [BUG] task.c: don't assing last_timer to node-less entries
778 - [BUG] http stats: large outputs sometimes got some parts chopped off
779 - [MINOR] backend: export some functions to recount servers
780 - [MINOR] backend: uninline some LB functions
781 - [MINOR] include time.h from freq_ctr.h as is uses "now".
782 - [CLEANUP] backend: move LB algos to individual files
783 - [MINOR] lb_map: reorder code in order to ease integration of new hash functions
784 - [CLEANUP] proxy: move last lb-specific bits to their respective files
785 - [MINOR] backend: separate declarations of LB algos from their lookup method
786 - [MINOR] backend: reorganize the LB algorithm selection
787 - [MEDIUM] backend: introduce the "static-rr" LB algorithm
788 - [MINOR] report list of supported pollers with -vv
789 - [DOC] log-health-checks is an option, not a directive
790 - [MEDIUM] new option "independant-streams" to stop updating read timeout on writes
791 - [BUG] stats: don't call buffer_shutw(), but ->shutw() instead
792 - [MINOR] stats: strip CR and LF from the input command line
793 - [BUG] don't refresh timeouts late after detected activity
794 - [MINOR] stats_dump_errors_to_buffer: use buffer_feed_chunk()
795 - [MINOR] stats_dump_sess_to_buffer: use buffer_feed_chunk()
796 - [MINOR] stats: make stats_dump_raw_to_buffer() use buffer_feed_chunk
797 - [MEDIUM] stats: don't use s->ana_state anymore
798 - [MINOR] remove now obsolete ana_state from the session struct
799 - [MEDIUM] stats: make HTTP stats use an I/O handler
800 - [MEDIUM] stream_int: adjust WAIT_ROOM handling
801 - [BUG] config: look for ID conflicts in all sockets, not only last ones.
802 - [MINOR] config: reference file and line with any listener/proxy/server declaration
803 - [MINOR] config: report places of duplicate names or IDs
804 - [MINOR] config: add pointer to file name in block/redirect/use_backend/monitor rules
805 - [MINOR] tools: add a new get_next_id() function
806 - [MEDIUM] config: automatically find unused IDs for proxies, servers and listeners
807 - [OPTIM] counters: move some max numbers to the counters struct
808 - [BUG] counters: fix segfault on missing counters for a listener
809 - [MEDIUM] backend: implement consistent hashing variation
810 - [MINOR] acl: add fe_conn, be_conn, queue, avg_queue
811 - [MINOR] stats: use 'clear counters all' to clear all values
812 - [MEDIUM] add access restrictions to the stats socket
813 - [MINOR] buffers: add buffer_feed2() and make buffer_feed() measure string length
814 - [MINOR] proxy: provide function to retrieve backend/server pointers
815 - [MINOR] add the "initial weight" to the server struct.
816 - [MEDIUM] stats: add the "get weight" command to report a server's weight
817 - [MEDIUM] stats: add the "set weight" command
818 - [BUILD] add a 'make tags' target
819 - [MINOR] stats: add support for numeric IDs in set weight/get weight
820 - [MINOR] stats: use a dedicated state to output static data
821 - [OPTIM] stats: check free space before trying to print
822
Willy Tarreau9f389e02009-09-24 00:12:50 +02008232009/09/24 : 1.4-dev3
824 - [BUILD] compilation of haproxy-1.4-dev2 on FreeBSD
825 - [MEDIUM] Collect & show information about last health check, v3
826 - [MINOR] export the hostname variable so that all the code can access it
827 - [MINOR] stats: add a new node-name setting
828 - [MEDIUM] remove old experimental tcpsplice option
829 - [BUILD] fix build for systems without SOL_TCP
830 - [MEDIUM] move connection establishment from backend to the SI.
831 - [MEDIUM] make the global stats socket part of a frontend
832 - [MEDIUM] session: account per-listener connections
833 - [MINOR] session: switch to established state if no connect function
834 - [MEDIUM] make the unix stats sockets use the generic session handler
835 - [CLEANUP] unix: remove uxst_process_session()
836 - [CLEANUP] move remaining stats sockets code to dumpstats
837 - [MINOR] move the initial task's nice value to the listener
838 - [MINOR] cleanup set_session_backend by using pre-computed analysers
839 - [MINOR] set s->srv_error according to the analysers
840 - [MEDIUM] set rep->analysers from fe and be analysers
841 - [MEDIUM] replace BUFSIZE with buf->size in computations
842 - [MEDIUM] make it possible to change the buffer size in the configuration
843 - [MEDIUM] report error on buffer writes larger than buffer size
844 - [MEDIUM] stream_interface: add and use ->update function to resync
845 - [CLEANUP] remove ifdef MSG_NOSIGNAL and define it instead
846 - [MEDIUM] remove TCP_CORK and make use of MSG_MORE instead
847 - [BUG] tarpit did not work anymore
848 - [MINOR] acl: add support for hdr_ip to match IP addresses in headers
849 - [MAJOR] buffers: fix misuse of the BF_SHUTW_NOW flag
850 - [MINOR] buffers: provide more functions to handle buffer data
851 - [MEDIUM] buffers: provide new buffer_feed*() function
852 - [MINOR] buffers: add peekchar and peekline functions for stream interfaces
853 - [MINOR] buffers: provide buffer_si_putchar() to send a char from a stream interface
854 - [BUG] buffer_forward() would not correctly consider data already scheduled
855 - [MINOR] buffers: add buffer_cut_tail() to cut only unsent data
856 - [MEDIUM] stream_interface: make use of buffer_cut_tail() to report errors
857 - [MAJOR] http: add support for HTTP 1xx informational responses
858 - [MINOR] buffers: inline buffer_si_putchar()
859 - [MAJOR] buffers: split BF_WRITE_ENA into BF_AUTO_CONNECT and BF_AUTO_CLOSE
860 - [MAJOR] buffers: fix the BF_EMPTY flag's meaning
861 - [BUG] stream_interface: SI_ST_CLO must have buffers SHUT
862 - [MINOR] stream_sock: don't set SI_FL_WAIT_DATA if BF_SHUTW_NOW is set
863 - [MEDIUM] add support for infinite forwarding
864 - [BUILD] stream_interface: fix conflicting declaration
865 - [BUG] buffers: buffer_forward() must not always clear BF_OUT_EMPTY
866 - [BUG] variable buffer size ignored at initialization time
867 - [MINOR] ensure that buffer_feed() and buffer_skip() set BF_*_PARTIAL
868 - [BUG] fix buffer_skip() and buffer_si_getline() to correctly handle wrap-arounds
869 - [MINOR] stream_interface: add SI_FL_DONT_WAKE flag
870 - [MINOR] stream_interface: add iohandler callback
871 - [MINOR] stream_interface: add functions to support running as internal/external tasks
872 - [MEDIUM] session: call iohandler for embedded tasks (applets)
873 - [MINOR] add a ->private member to the stream_interface
874 - [MEDIUM] stats: prepare the connection for closing before dumping
875 - [MEDIUM] stats: replace the stats socket analyser with an SI applet
876
Willy Tarreau68dcd252009-08-09 22:57:09 +02008772009/08/09 : 1.4-dev2
878 - [BUG] task: fix possible crash when some timeouts are not configured
879 - [BUG] log: option tcplog would log to global if no logger was defined
880
Willy Tarreaub03d2982009-07-29 22:38:32 +02008812009/07/29 : 1.4-dev1
882 - [MINOR] acl: add support for matching of RDP cookies
883 - [MEDIUM] add support for RDP cookie load-balancing
884 - [MEDIUM] add support for RDP cookie persistence
885 - [MINOR] add a new CLF log format
886 - [MINOR] startup: don't imply -q with -D
887 - [BUG] ensure that we correctly re-start old process in case of error
888 - [MEDIUM] add support for binding to source port ranges during connect
889 - [MINOR] config: track "no option"/"option" changes
890 - [MINOR] config: support resetting options do default values
891 - [MEDIUM] implement option tcp-smart-accept at the frontend
892 - [MEDIUM] stream_sock: implement tcp-cork for use during shutdowns on Linux
893 - [MEDIUM] implement tcp-smart-connect option at the backend
894 - [MEDIUM] add support for TCP MSS adjustment for listeners
895 - [MEDIUM] support setting a server weight to zero
896 - [MINOR] make DEFAULT_MAXCONN user-configurable at build time
897 - [MAJOR] session: don't clear buffer status flags anymore
898 - [MAJOR] session: only check for timeouts when they have just occurred.
899 - [MAJOR] session: simplify buffer error handling
900 - [MEDIUM] config: split parser and checker in two functions
901 - [MEDIUM] config: support loading multiple configuration files
902 - [MEDIUM] stream_sock: don't close prematurely when nolinger is set
903 - [MEDIUM] session: rework buffer analysis to permit permanent analysers
904 - [MEDIUM] splice: set the capability on each stream_interface
905 - [BUG] http: redirect rules were processed too early
906 - [CLEANUP] remove unused DEBUG_PARSE_NO_SPEEDUP define
907 - [MEDIUM] http: split request waiter from request processor
908 - [MEDIUM] session: tell analysers what bit they were called for
909 - [MAJOR] http: complete splitting of the remaining stages
910 - [MINOR] report in the proxies the requirements for ACLs
911 - [MINOR] http: rely on proxy->acl_requires to allocate hdr_idx
912 - [MINOR] acl: add HTTP protocol detection (req_proto_http)
913 - [MINOR] prepare callers of session_set_backend to handle errors
914 - [BUG] default ACLs did not properly set the ->requires flag
915 - [MEDIUM] allow a TCP frontend to switch to an HTTP backend
916 - [MINOR] ensure we can jump from swiching rules to http without data
917 - [MINOR] http: take http request timeout from the backend
918 - [MINOR] allow TCP inspection rules to make use of HTTP ACLs
919 - [BUILD] report commit date and not author's date as build date
920 - [MINOR] acl: don't complain anymore when using L7 acls in TCP
921 - [BUG] stream_sock: always shutdown(SHUT_WR) before closing
922 - [BUG] stream_sock: don't stop reading when the poller reports an error
923 - [BUG] config: tcp-request content only accepts "if" or "unless"
924 - [BUG] task: fix possible timer drift after update
925 - [MINOR] apply tcp-smart-connect option for the checks too
926 - [MINOR] stats: better displaying in MSIE
927 - [MINOR] config: improve error reporting in global section
928 - [MINOR] config: improve error reporting in listen sections
929 - [MINOR] config: the "capture" keyword is not allowed in backends
930 - [MINOR] config: improve error reporting when checking configuration
931 - [BUILD] fix a minor build warning on AIX
932 - [BUILD] use "git cmd" instead of "git-cmd"
933 - [CLEANUP] report 2009 not 2008 in the copyright banner.
934 - [MINOR] print usage on the stats sockets upon invalid commands
935 - [MINOR] acl: detect and report potential mistakes in ACLs
936 - [BUILD] fix incorrect printf arg count with tcp_splice
937 - [BUG] fix random pauses on last segment of a series
938 - [BUILD] add support for build under Cygwin
939
Willy Tarreau79158882009-06-09 11:59:08 +02009402009/06/09 : 1.4-dev0
941 - exact copy of 1.3.18
942
Willy Tarreaubeb05ae2009-05-10 20:27:47 +02009432009/05/10 : 1.3.18
944 - [MEDIUM] add support for "balance hdr(name)"
945 - [CLEANUP] give a little bit more information in error message
946 - [MINOR] add X-Original-To: header
947 - [BUG] x-original-to: fix missing initialization to default value
948 - [BUILD] spec file: fix broken pipe during rpmbuild and add man file
949 - [MINOR] improve reporting of misplaced acl/reqxxx rules
950 - [MEDIUM] http: add options to ignore invalid header names
951 - [MEDIUM] http: capture invalid requests/responses even if accepted
952 - [BUILD] add format(printf) to printf-like functions
953 - [MINOR] fix several printf formats and missing arguments
954 - [BUG] stats: total and lbtot are unsigned
955 - [MINOR] fix a few remaining printf-like formats on 64-bit platforms
956 - [CLEANUP] remove unused make option from haproxy.spec
957 - [BUILD] make it possible to pass alternative arch at build time
958 - [MINOR] switch all stat counters to 64-bit
959 - [MEDIUM] ensure we don't recursively call pool_gc2()
960 - [CRITICAL] uninitialized response field can sometimes cause crashes
961 - [BUG] fix wrong pointer arithmetics in HTTP message captures
962 - [MINOR] rhel init script : support the reload operation
963 - [MINOR] add basic signal handling functions
964 - [BUILD] add signal.o to all makefiles
965 - [MEDIUM] call signal_process_queue from run_poll_loop
966 - [MEDIUM] pollers: don't wait if a signal is pending
967 - [MEDIUM] convert all signals to asynchronous signals
968 - [BUG] O(1) pollers should check their FD before closing it
969 - [MINOR] don't close stdio fds twice
970 - [MINOR] add options dontlog-normal and log-separate-errors
971 - [DOC] minor fixes and rearrangements
972 - [BUG] fix parser crash on unconditional tcp content rules
973 - [DOC] rearrange the configuration manual and add a summary
974 - [MINOR] standard: provide a new 'my_strndup' function
975 - [MINOR] implement per-logger log level limitation
976 - [MINOR] compute the max of sessions/s on fe/be/srv
977 - [MINOR] stats: report max sessions/s and limit in CSV export
978 - [MINOR] stats: report max sessions/s and limit in HTML stats
979 - [MINOR] stats/html: use the arial font before helvetica
980
Willy Tarreauf459b422009-03-29 15:26:57 +02009812009/03/29 : 1.3.17
982 - Update specfile to build for v2.6 kernel.
983 - [BUG] reset the stream_interface connect timeout upon connect or error
984 - [BUG] reject unix accepts when connection limit is reached
985 - [MINOR] show sess: report number of calls to each task
986 - [BUG] don't call epoll_ctl() on closed sockets
987 - [BUG] stream_sock: disable I/O on fds reporting an error
988 - [MINOR] sepoll: don't count two events on the same FD.
989 - [MINOR] show sess: report a lot more information about sessions
990 - [BUG] stream_sock: check for shut{r,w} before refreshing some timeouts
991 - [BUG] don't set an expiration date directly from now_ms
992 - [MINOR] implement ulltoh() to write HTML-formatted numbers
993 - [MINOR] stats/html: group digits by 3 to clarify numbers
994 - [BUILD] remove haproxy-small.spec
995 - [BUILD] makefile: remove unused references to linux24eold and EPOLL_CTL_WORKAROUND
996
Willy Tarreau8019ffa2009-03-22 23:46:12 +01009972009/03/22 : 1.3.16
998 - [BUILD] Fixed Makefile for linking pcre
999 - [CONTRIB] selinux policy for haproxy
1000 - [MINOR] show errors: encode backslash as well as non-ascii characters
1001 - [MINOR] cfgparse: some cleanups in the consistency checks
1002 - [MINOR] cfgparse: set backends to "balance roundrobin" by default
1003 - [MINOR] tcp-inspect: permit the use of no-delay inspection
1004 - [MEDIUM] reverse internal proxy declaration order to match configuration
1005 - [CLEANUP] config: catch and report some possibly wrong rule ordering
1006 - [BUG] connect timeout is in the stream interface, not the buffer
1007 - [BUG] session: errors were not reported in termination flags in TCP mode
1008 - [MINOR] tcp_request: let the caller take care of errors and timeouts
1009 - [CLEANUP] http: remove some commented out obsolete code in process_response
1010 - [MINOR] update ebtree to version 4.1
1011 - [MEDIUM] scheduler: get rid of the 4 trees thanks and use ebtree v4.1
1012 - [BUG] sched: don't leave 3 lasts tasks unprocessed when niced tasks are present
1013 - [BUG] scheduler: fix improper handling of duplicates __task_queue()
1014 - [MINOR] sched: permit a task to stay up between calls
1015 - [MINOR] task: keep a task count and clean up task creators
1016 - [MINOR] stats: report number of tasks (active and running)
1017 - [BUG] server check intervals must not be null
1018 - [OPTIM] stream_sock: don't retry to read after a large read
1019 - [OPTIM] buffer: new BF_READ_DONTWAIT flag reduces EAGAIN rates
1020 - [MEDIUM] session: don't resync FSMs on non-interesting changes
1021 - [BUG] check for global.maxconn before doing accept()
1022 - [OPTIM] sepoll: do not re-check whole list upon accepts
1023
Willy Tarreau8185ced2009-03-09 22:45:53 +010010242009/03/09 : 1.3.16-rc2
1025 - [BUG] stream_sock: write timeout must be updated when forwarding !
1026
Willy Tarreauff63b432009-03-09 01:03:42 +010010272009/03/09 : 1.3.16-rc1
1028 - appsessions: cleanup DEBUG_HASH and initialize request_counter
1029 - [MINOR] acl: add new keyword "connslots"
1030 - [MINOR] cfgparse: fix off-by 2 in error message size
1031 - [BUILD] fix build with gcc 4.3
1032 - [BUILD] fix MANDIR default location to match documentation
1033 - [TESTS] add a debug patch to help trigger the stats bug
1034 - [BUG] Flush buffers also where there are exactly 0 bytes left
1035 - [MINOR] Allow to specify a domain for a cookie
1036 - [BUG/CLEANUP] cookiedomain -> cookie_domain rename + free(p->cookie_domain)
1037 - [MEDIUM] Fix memory freeing at exit
1038 - [MEDIUM] Fix memory freeing at exit, part 2
1039 - [BUG] Fix listen & more of 2 couples <ip>:<port>
1040 - [DOC] remove buggy comment for use_backend
1041 - [CRITICAL] fix server state tracking: it was O(n!) instead of O(n)
1042 - [MEDIUM] add support for URI hash depth and length limits
1043 - [MINOR] permit renaming of x-forwarded-for header
1044 - [BUILD] fix Makefile.bsd and Makefile.osx for stream_interface
1045 - [BUILD] Haproxy won't compile if DEBUG_FULL is defined
1046 - [MEDIUM] upgrade to ebtree v4.0
1047 - [DOC] update the README file with new build options
1048 - [MEDIUM] reduce risk of event starvation in ev_sepoll
1049 - [MEDIUM] detect streaming buffers and tag them as such
1050 - [MEDIUM] add support for conditional HTTP redirection
1051 - [BUILD] make install should depend on haproxy not "all"
1052 - [DEBUG] add a TRACE macro to facilitate runtime data extraction
1053 - [BUG] event pollers must not wait if a task exists in the run queue
1054 - [BUG] queue management: wake oldest request in queues
1055 - [BUG] log: reported queue position was offed-by-one
1056 - [BUG] fix the dequeuing logic to ensure that all requests get served
1057 - [DOC] documentation for the "retries" parameter was missing.
1058 - [MEDIUM] implement a monotonic internal clock
1059 - [MEDIUM] further improve monotonic clock by check forward jumps
1060 - [OPTIM] add branch prediction hints in list manipulations
1061 - [MAJOR] replace ultree with ebtree in wait-queues
1062 - [BUG] we could segfault during exit while freeing uri_auths
1063 - [BUG] wqueue: perform proper timeout comparisons with wrapping values
1064 - [MINOR] introduce now_ms, the current date in milliseconds
1065 - [BUG] disable buffer read timeout when reading stats
1066 - [MEDIUM] rework the wait queue mechanism
1067 - [BUILD] change declaration of base64tab to fix build with Intel C++
1068 - [OPTIM] shrink wake_expired_tasks() by using task_wakeup()
1069 - [MAJOR] use an ebtree instead of a list for the run queue
1070 - [MEDIUM] introduce task->nice and boot access to statistics
1071 - [OPTIM] task_queue: assume most consecutive timers are equal
1072 - [BUILD] silent a warning in unlikely() with gcc 4.x
1073 - [MAJOR] convert all expiration timers from timeval to ticks
1074 - [BUG] use_backend would not correctly consider "unless"
1075 - [TESTS] added test-acl.cfg to test some ACL combinations
1076 - [MEDIUM] add support for configuration keyword registration
1077 - [MEDIUM] modularize the global "stats" keyword configuration parser
1078 - [MINOR] cfgparse: add support for warnings in external functions
1079 - [MEDIUM] modularize the "timeout" keyword configuration parser
1080 - [MAJOR] implement tcp request content inspection
1081 - [MINOR] acl: add a new parsing function: parse_dotted_ver
1082 - [MINOR] acl: add req_ssl_ver in TCP, to match an SSL version
1083 - [CLEANUP] remove unused include/types/client.h
1084 - [CLEANUP] remove many #include <types/xxx> from C files
1085 - [CLEANUP] remove dependency on obsolete INTBITS macro
1086 - [DOC] document the new "tcp-request" keyword and associated ACLs
1087 - [MINOR] acl: add REQ_CONTENT to the list of default acls
1088 - [MEDIUM] acl: permit fetch() functions to set the result themselves
1089 - [MEDIUM] acl: get rid of dummy values in always_true/always_false
1090 - [MINOR] acl: add the "wait_end" acl verb
1091 - [MEDIUM] acl: enforce ACL type checking
1092 - [MEDIUM] acl: set types on all currently known ACL verbs
1093 - [MEDIUM] acl: when possible, report the name and requirements of ACLs in warnings
1094 - [CLEANUP] remove 65 useless NULL checks before free
1095 - [MEDIUM] memory: update pool_free2() to support NULL pointers
1096 - [MEDIUM] buffers: ensure buffer_shut* are properly called upon shutdowns
1097 - [MEDIUM] process_srv: rely on buffer flags for client shutdown
1098 - [MEDIUM] process_srv: don't rely at all on client state
1099 - [MEDIUM] process_cli: don't rely at all on server state
1100 - [BUG] fix segfault with url_param + check_post
1101 - [BUG] server timeout was not considered in some circumstances
1102 - [BUG] client timeout incorrectly rearmed while waiting for server
1103 - [MAJOR] kill CL_STINSPECT and CL_STHEADERS (step 1)
1104 - [MAJOR] get rid of SV_STANALYZE (step 2)
1105 - [MEDIUM] simplify and centralize request timeout cancellation and request forwarding
1106 - [MAJOR] completely separate HTTP and TCP states on the request path
1107 - [BUG] fix recently introduced loop when client closes early
1108 - [MAJOR] get rid of the SV_STHEADERS state
1109 - [MAJOR] better separation of response processing and server state
1110 - [MAJOR] clearly separate HTTP response processing from TCP server state
1111 - [MEDIUM] remove unused references to {CL|SV}_STSHUT*
1112 - [MINOR] term_trace: add better instrumentations to trace the code
1113 - [BUG] ev_sepoll: closed file descriptors could persist in the spec list
1114 - [BUG] process_response must not enable the read FD
1115 - [BUG] buffers: remove BF_MAY_CONNECT and fix forwarding issue
1116 - [BUG] process_response: do not touch srv_state
1117 - [BUG] maintain_proxies must not disable backends
1118 - [CLEANUP] get rid of BF_SHUT*_PENDING
1119 - [MEDIUM] buffers: add BF_EMPTY and BF_FULL to remove dependency on req/rep->l
1120 - [MAJOR] process_session: rely only on buffer flags
1121 - [MEDIUM] use buffer->wex instead of buffer->cex for connect timeout
1122 - [MEDIUM] centralize buffer timeout checks at the top of process_session
1123 - [MINOR] ensure the termination flags are set by process_xxx
1124 - [MEDIUM] session: move the analysis bit field to the buffer
1125 - [OPTIM] process_cli/process_srv: reduce the number of tests
1126 - [BUG] regparm is broken on gcc < 3
1127 - [BUILD] fix warning in proto_tcp.c with gcc >= 4
1128 - [MEDIUM] merge inspect_exp and txn->exp into request buffer
1129 - [BUG] process_cli/process_srv: don't call shutdown when already done
1130 - [BUG] process_request: HTTP body analysis must return zero if missing data
1131 - [TESTS] test-fsm: 22 regression tests for state machines
1132 - [BUG] Fix empty X-Forwarded-For header name when set in defaults section
1133 - [BUG] fix harmless but wrong fd insertion sequence
1134 - [MEDIUM] make it possible for analysers to follow the whole session
1135 - [MAJOR] rework of the server FSM
1136 - [OPTIM] remove useless fd_set(read) upon shutdown(write)
1137 - [MEDIUM] massive cleanup of process_srv()
1138 - [MEDIUM] second level of code cleanup for process_srv_data
1139 - [MEDIUM] third cleanup and optimization of process_srv_data()
1140 - [MEDIUM] process_srv_data: ensure that we always correctly re-arm timeouts
1141 - [MEDIUM] stream_sock_process_data moved to stream_sock.c
1142 - [MAJOR] make the client side use stream_sock_process_data()
1143 - [MEDIUM] split stream_sock_process_data
1144 - [OPTIM] stream_sock_read must check for null-reads more often
1145 - [MINOR] only call flow analysers when their read side is connected.
1146 - [MEDIUM] reintroduce BF_HIJACK with produce_content
1147 - [MINOR] re-arrange buffer flags and rename some of them
1148 - [MINOR] do not check for BF_SHUTR when computing write timeout
1149 - [OPTIM] ev_sepoll: detect newly created FDs and check them once
1150 - [OPTIM] reduce the number of calls to task_wakeup()
1151 - [OPTIM] force inlining of large functions with gcc >= 3
1152 - [MEDIUM] indicate a reason for a task wakeup
1153 - [MINOR] change type of fdtab[]->owner to void*
1154 - [MAJOR] make stream sockets aware of the stream interface
1155 - [MEDIUM] stream interface: add the ->shutw method as well as in and out buffers
1156 - [MEDIUM] buffers: add BF_READ_ATTACHED and BF_ANA_TIMEOUT
1157 - [MEDIUM] process_session: make use of the new buffer flags
1158 - [CLEANUP] process_session: move debug outputs out of the critical loop
1159 - [MEDIUM] move QUEUE and TAR timers to stream interfaces
1160 - [OPTIM] add compiler hints in tick_is_expired()
1161 - [MINOR] add buffer_check_timeouts() to check what timeouts have fired.
1162 - [MEDIUM] use buffer_check_timeouts instead of stream_sock_check_timeouts()
1163 - [MINOR] add an expiration flag to the stream_sock_interface
1164 - [MAJOR] migrate the connection logic to stream interface
1165 - [MAJOR] add a connection error state to the stream_interface
1166 - [MEDIUM] add the SN_CURR_SESS flag to the session to track open sessions
1167 - [MEDIUM] continue layering cleanups.
1168 - [MEDIUM] stream_interface: added a DISconnected state between CON/EST and CLO
1169 - [MEDIUM] remove stream_sock_update_data()
1170 - [MINOR] maintain a global session list in order to ease debugging
1171 - [BUG] shutw must imply close during a connect
1172 - [MEDIUM] process shutw during connection attempt
1173 - [MEDIUM] make the stream interface control the SHUT{R,W} bits
1174 - [MAJOR] complete layer4/7 separation
1175 - [CLEANUP] move the session-related functions to session.c
1176 - [MINOR] call session->do_log() for logging
1177 - [MINOR] replace the ambiguous client_return function by stream_int_return
1178 - [MINOR] replace client_retnclose() with stream_int_retnclose()
1179 - [MINOR] replace srv_close_with_err() with http_server_error()
1180 - [MEDIUM] make the http server error function a pointer in the session
1181 - [CLEANUP] session.c: removed some migration left-overs in sess_establish()
1182 - [MINOR] stream_sock_data_finish() should not expose fd
1183 - [MEDIUM] extract TCP request processing from HTTP
1184 - [MEDIUM] extract the HTTP tarpit code from process_request().
1185 - [MEDIUM] move the HTTP request body analyser out of process_request().
1186 - [MEDIUM] rename process_request to http_process_request
1187 - [BUG] fix forgotten server session counter
1188 - [MINOR] declare process_session in session.h, not proto_http.h
1189 - [MEDIUM] first pass of lifting to proto_uxst.c:uxst_event_accept()
1190 - [MINOR] add an analyser code for UNIX stats request
1191 - [MINOR] pre-set analyser flags on the listener at registration time
1192 - [BUG] do not forward close from cons to prod with analysers
1193 - [MEDIUM] ensure that sock->shutw() also closes read for init states
1194 - [MINOR] add an analyser state in struct session
1195 - [MAJOR] make unix sockets work again with stats
1196 - [MEDIUM] remove cli_fd, srv_fd, cli_state and srv_state from the session
1197 - [MINOR] move the listener reference from fd to session
1198 - [MEDIUM] reference the current hijack function in the buffer itself
1199 - [MINOR] slightly rebalance stats_dump_{raw,http}
1200 - [MINOR] add a new back-reference type : struct bref
1201 - [MINOR] add back-references to sessions for later use by a dumper.
1202 - [MEDIUM] add support for "show sess" in unix stats socket
1203 - [BUG] do not release the connection slot during a retry
1204 - [BUG] dynamic connection throttling could return a max of zero conns
1205 - [BUG] do not try to pause backends during reload
1206 - [BUG] ensure that listeners from disabled proxies are correctly unbound.
1207 - [BUG] acl-related keywords are not allowed in defaults sections
1208 - [BUG] cookie capture is declared in the frontend but checked on the backend
1209 - [BUG] critical errors should be reported even in daemon mode
1210 - [MINOR] redirect: add support for the "drop-query" option
1211 - [MINOR] redirect: add support for "set-cookie" and "clear-cookie"
1212 - [MINOR] redirect: in prefix mode a "/" means not to change the URI
1213 - [BUG] do not dequeue requests on a dead server
1214 - [BUG] do not dequeue the backend's pending connections on a dead server
1215 - [MINOR] stats: indicate if a task is running in "show sess"
1216 - [BUG] check timeout must not be changed if timeout.check is not set
1217 - [BUG] "option transparent" is for backend, not frontend !
1218 - [MINOR] transfer errors were not reported anymore in data phase
1219 - [MEDIUM] add a send limit to a buffer
1220 - [MEDIUM] don't report buffer timeout when there is I/O activity
1221 - [MEDIUM] indicate when we don't care about read timeout
1222 - [MINOR] add flags to indicate when a stream interface is waiting for space/data
1223 - [MEDIUM] enable inter-stream_interface wakeup calls
1224 - [MAJOR] implement autonomous inter-socket forwarding
1225 - [MINOR] add the splice_len member to the buffer struct in preparation of splice support
1226 - [MEDIUM] stream_sock: factor out the return path in case of no-writes
1227 - [MEDIUM] i/o: rework ->to_forward and ->send_max
1228 - [OPTIM] stream_sock: do not ask for polling on EAGAIN if we have read
1229 - [OPTIM] buffer: replace rlim by max_len
1230 - [OPTIM] stream_sock: factor out the buffer full handling out of the loop
1231 - [CLEANUP] replace a few occurrences of (flags & X) && !(flags & Y)
1232 - [CLEANUP] stream_sock: move the write-nothing condition out of the loop
1233 - [MEDIUM] split stream_sock_write() into callback and core functions
1234 - [MEDIUM] stream_sock_read: call ->chk_snd whenever there are data pending
1235 - [MINOR] stream_sock: fix a few wrong empty calculations
1236 - [MEDIUM] stream_sock: try to send pending data on chk_snd()
1237 - [MINOR] global.maxpipes: add the ability to reserve file descriptors for pipes
1238 - [MEDIUM] splice: add configuration options and set global.maxpipes
1239 - [MINOR] introduce structures required to support Linux kernel splicing
1240 - [MEDIUM] add definitions for Linux kernel splicing
1241 - [MAJOR] complete support for linux 2.6 kernel splicing
1242 - [BUG] reserve some pipes for backends with splice enabled
1243 - [MEDIUM] splice: add hints to support older buggy kernels
1244 - [MEDIUM] introduce pipe pools
1245 - [MEDIUM] splice: make use of pipe pools
1246 - [STATS] report pipe usage in the statistics
1247 - [OPTIM] make global.maxpipes default to global.maxconn/4 when not specified
1248 - [BUILD] fix snapshot date extraction with negative timezones
1249 - [MEDIUM] move global tuning options to the global structure
1250 - [MEDIUM] splice: add the global "nosplice" option
1251 - [BUILD] add USE_LINUX_SPLICE to enable LINUX_SPLICE on linux 2.6
1252 - [BUG] we must not exit if protocol binding only returns a warning
1253 - [MINOR] add support for bind interface name
1254 - [BUG] inform the user when root is expected but not set
1255 - [MEDIUM] add support for source interface binding
1256 - [MEDIUM] add support for source interface binding at the server level
1257 - [MEDIUM] implement bind-process to limit service presence by process
1258 - [DOC] document maxpipes, nosplice, option splice-{auto,request,response}
1259 - [DOC] filled the logging section of the configuration manual
1260 - [DOC] document HTTP status codes
1261 - [DOC] document a few missing info about errorfile
1262 - [BUG] fix random memory corruption using "show sess"
1263 - [BUG] fix unix socket processing of interrupted output
1264 - [DOC] add diagrams of queuing and future ACL design
1265 - [BUILD] proto_http did not build on gcc-2.95
1266 - [BUG] the "source" keyword must first clear optional settings
1267 - [BUG] global.tune.maxaccept must be limited even in mono-process mode
1268 - [MINOR] ensure that http_msg_analyzer updates pointer to invalid char
1269 - [MEDIUM] store a complete dump of request and response errors in proxies
1270 - [MEDIUM] implement error dump on unix socket with "show errors"
1271 - [DOC] document "show errors"
1272 - [MINOR] errors dump must use user-visible date, not internal date.
1273 - [MINOR] time: add __usec_to_1024th to convert usecs to 1024th of second
1274 - [MINOR] add curr_sec_ms and curr_sec_ms_scaled for current second.
1275 - [MEDIUM] measure and report session rate on frontend, backends and servers
1276 - [BUG] the "connslots" keyword was matched as "connlots"
1277 - [MINOR] acl: add 2 new verbs: fe_sess_rate and be_sess_rate
1278 - [MEDIUM] implement "rate-limit sessions" for the frontend
1279 - [BUG] interface binding: length must include the trailing zero
1280 - [BUG] typo in timeout error reporting : report *res and not *err
1281 - [OPTIM] maintain_proxies: only wake up when the frontend will be ready
1282 - [OPTIM] rate-limit: cleaner behaviour on low rates and reduce consumption
1283 - [BUG] switch server-side stream interface to close in case of abort
1284 - [CLEANUP] remove last references to term_trace
1285 - [OPTIM] freq_ctr: do not rotate the counters when reading
1286 - [BUG] disable any analysers for monitoring requests
1287 - [BUG] rate-limit in defaults section was ignored
1288 - [BUG] task: fix handling of duplicate keys
1289 - [OPTIM] task: don't unlink a task from a wait queue when waking it up
1290 - [OPTIM] displace tasks in the wait queue only if absolutely needed
1291 - [MEDIUM] minor update to the task api: let the scheduler queue itself
1292 - [BUG] event_accept() must always wake the task up, even in health mode
1293 - [CLEANUP] task: distinguish between clock ticks and timers
1294 - [OPTIM] task: reduce the number of calls to task_queue()
1295 - [OPTIM] do not re-check req buffer when only response has changed
1296 - [CLEANUP] don't enable kernel splicing when socket is closed
1297 - [CLEANUP] buffer_flush() was misleading, rename it as buffer_erase
1298 - [MINOR] buffers: implement buffer_flush()
1299 - [MEDIUM] rearrange forwarding condition to enable splice during analysis
1300 - [BUILD] build fixes for Solaris
1301 - [BUILD] proto_http did not build on gcc-2.95 (again)
1302 - [CONTRIB] halog: fast log parser for haproxy
1303 - [CONTRIB] halog: faster fgets() and add support for percentile reporting
1304
Willy Tarreau7b4c5ae2008-04-19 21:06:14 +020013052008/04/19 : 1.3.15
1306 - [BUILD] Added support for 'make install'
1307 - [BUILD] Added 'install-man' make target for installing the man page
1308 - [BUILD] Added 'install-bin' make target
1309 - [BUILD] Added 'install-doc' make target
1310 - [BUILD] Removed "/" after '$(DESTDIR)' in install targets
1311 - [BUILD] Changed 'install' target to install the binaries first
1312 - [BUILD] Replace hardcoded 'LD = gcc' with 'LD = $(CC)'
1313 - [MEDIUM]: Inversion for options
1314 - [MEDIUM]: Count retries and redispatches also for servers, fix redistribute_pending, extend logs, %d->%u cleanup
1315 - [BUG]: Restore clearing t->logs.bytes
1316 - [MEDIUM]: rework checks handling
1317 - [DOC] Update a "contrib" file with a hint about a scheme used for formathing subjects
1318 - [MEDIUM] Implement "track [<backend>/]<server>"
1319 - [MINOR] Implement persistent id for proxies and servers
1320 - [BUG] Don't increment server connections too much + fix retries
1321 - [MEDIUM]: Prevent redispatcher from selecting the same server, version #3
1322 - [MAJOR] proto_uxst rework -> SNMP support
1323 - [BUG] appsession lookup in URL does not work
1324 - [BUG] transparent proxy address was ignored in backend
1325 - [BUG] hot reconfiguration failed because of a wrong error check
1326 - [DOC] big update to the configuration manual
1327 - [DOC] large update to the configuration manual
1328 - [DOC] document more options
1329 - [BUILD] major rework of the GNU Makefile
1330 - [STATS] add support for "show info" on the unix socket
1331 - [DOC] document options forwardfor to logasap
1332 - [MINOR] add support for the "backlog" parameter
1333 - [OPTIM] introduce global parameter "tune.maxaccept"
1334 - [MEDIUM] introduce "timeout http-request" in frontends
1335 - [MINOR] tarpit timeout is also allowed in backends
1336 - [BUG] increment server connections for each connect()
1337 - [MEDIUM] add a turn-around state of one second after a connection failure
1338 - [BUG] fix typo in redispatched connection
1339 - [DOC] document options nolinger to ssl-hello-chk
1340 - [DOC] added documentation for "option tcplog" to "use_backend"
1341 - [BUG] connect_server: server might not exist when sending error report
1342 - [MEDIUM] support fully transparent proxy on Linux (USE_LINUX_TPROXY)
1343 - [MEDIUM] add non-local bind to connect() on Linux
1344 - [MINOR] add transparent proxy support for balabit's Tproxy v4
1345 - [BUG] use backend's source and not server's source with tproxy
1346 - [BUG] fix overlapping server flags
1347 - [MEDIUM] fix server health checks source address selection
1348 - [BUG] build failed on CONFIG_HAP_LINUX_TPROXY without CONFIG_HAP_CTTPROXY
1349 - [DOC] added "server", "source" and "stats" keywords
1350 - [DOC] all server parameters have been documented
1351 - [DOC] document all req* and rsp* keywords.
1352 - [DOC] added documentation about HTTP header manipulations
1353 - [BUG] log response byte count, not request
1354 - [BUILD] code did not build in full debug mode
1355 - [BUG] fix truncated responses with sepoll
1356 - [MINOR] use s->frt_addr as the server's address in transparent proxy
1357 - [MINOR] fix configuration hint about timeouts
1358 - [DOC] minor cleanup of the doc and notice to contributors
1359 - [MINOR] report correct section type for unknown keywords.
1360 - [BUILD] update MacOS Makefile to build on newer versions
1361 - [DOC] fix erroneous "useallbackups" option in the doc
1362 - [DOC] applied small fixes from early readers
1363 - [MINOR] add configuration support for "redir" server keyword
1364 - [MEDIUM] completely implement the server redirection method
1365 - [TESTS] add a test case for the server redirection mechanism
1366 - [DOC] add a configuration entry for "server ... redir <prefix>"
1367 - [BUILD] backend.c and checks.c did not build without tproxy !
1368 - Revert "[BUILD] backend.c and checks.c did not build without tproxy !"
1369 - [BUILD] backend.c and checks.c did not build without tproxy !
1370 - [OPTIM] used unsigned ints for HTTP state and message offsets
1371 - [OPTIM] GCC4's builtin_expect() is suboptimal
1372 - [BUG] failed conns were sometimes incremented in the frontend!
1373 - [BUG] timeout.check was not pre-set to eternity
1374 - [TESTS] add test-pollers.cfg to easily report pollers in use
1375 - [BUG] do not apply timeout.connect in checks if unset
1376 - [BUILD] ensure that makefile understands USE_DLMALLOC=1
1377 - [MINOR] silent gcc for a wrong warning
1378 - [CLEANUP] update .gitignore to ignore more temporary files
1379 - [CLEANUP] report dlmalloc's source path only if explictly specified
1380 - [BUG] str2sun could leak a small buffer in case of error during parsing
1381 - [BUG] option allbackups was not working anymore in roundrobin mode
1382 - [MAJOR] implementation of the "leastconn" load balancing algorithm
1383 - [BUILD] ensure that users don't build without setting the target anymore.
1384 - [DOC] document the leastconn LB algo
1385 - [MEDIUM] fix stats socket limitation to 16 kB
1386 - [DOC] fix unescaped space in httpchk example.
1387 - [BUG] fix double-decrement of server connections
1388 - [TESTS] add a test case for port mapping
1389 - [TESTS] add a benchmark for integer hashing
1390 - [TESTS] add new methods in ip-hash test file
1391 - [MAJOR] implement parameter hashing for POST requests
1392
Willy Tarreaue5b77e82007-12-06 01:25:44 +010013932007/12/06 : 1.3.14
1394 - New option http_proxy (Alexandre Cassen)
1395 - add support for "maxqueue" to limit server queue overload (Elijah Epifanov)
1396 - Check for duplicated conflicting proxies (Krzysztof Oledzki)
1397 - stats: report server and backend cumulated downtime (Krzysztof Oledzki)
1398 - use backends only with use_backend directive (Krzysztof Oledzki)
1399 - Handle long lines properly (Krzysztof Oledzki)
1400 - Implement and use generic findproxy and relax duplicated proxy check (Krzysztof Oledzki)
1401 - continous statistics (Krzysztof Oledzki)
1402 - add support for logging via a UNIX socket (Robert Tsai)
1403 - fix error checking in strl2ic/strl2uic()
1404 - fix calls to localtime()
1405 - provide easier-to-use ultoa_* functions
1406 - provide easy-to-use limit_r and LIM2A* macros
1407 - add a simple test for the status page
1408 - move error codes to common/errors.h
1409 - silent warning about LIST_* being redefined on OpenBSD
1410 - add socket address length to the protocols
1411 - group PR_O_BALANCE_* bits into a checkable value
1412 - externalize the "balance" option parser to backend.c
1413 - introduce the "url_param" balance method
1414 - make default_backend work in TCP mode too
1415 - disable warning about localtime_r on Solaris
1416 - adjust error messages about conflicting proxies
1417 - avoid calling some layer7 functions if not needed
1418 - simplify error path in event_accept()
1419 - add an options field to the listeners
1420 - added a new state to listeners
1421 - unbind_listener() must use fd_delete() and not close()
1422 - add a generic unbind_listener() primitive
1423 - add a generic delete_listener() primitive
1424 - add a generic unbind_all_listeners() primitive
1425 - create proto_tcp and move initialization of proxy listeners
1426 - stats: report numerical process ID, proxy ID and server ID
1427 - relative_pid was not initialized
1428 - missing header names in raw stats output
1429 - fix missing parenthesis in check_response_for_cacheability
1430 - small optimization on session_process_counters()
1431 - merge ebtree version 3.0
1432 - make ebtree headers multiple-include compatible
1433 - ebtree: include config.h for REGPRM*
1434 - differentiate between generic LB params and map-specific ones
1435 - add a weight divisor to the struct proxy
1436 - implement the Fast Weighted Round Robin (FWRR) algo
1437 - include filltab25.c to experiment on FWRR for dynamic weights
1438 - merge test-fwrr.cfg to validate dynamic weights
1439 - move the load balancing algorithm to be->lbprm.algo
1440 - change server check result to a bit field
1441 - implement "http-check disable-on-404" for graceful shutdown
1442 - secure the calling conditions of ->set_server_status_{up,down}
1443 - report disabled servers as "NOLB" when they are still UP
1444 - document the "http-check disable-on-404" option
1445 - http-check disable-on-404 is not limited to HTTP mode
1446 - add a test file for disable-on-404
1447 - use distinct bits per load-balancing algorithm type
1448 - implement the slowstart parameter for servers
1449 - document the server's slowstart parameter
1450 - stats: report the server warm up status in a "throttle" column
1451 - fix 2 minor issues on AIX
1452 - add the "nbsrv" ACL verb
1453 - add the "fail" condition to monitor requests
1454 - remove a warning from gcc due to htons() in standard.c
1455 - fwrr: ensure that we never overflow in placements
1456 - store the build options to report with -vv
1457 - fix the status return of the init script (R.I. Pienaar)
1458 - stats: real time monitoring script for unix socket (Prizee)
1459 - document "nbsrv" and "monitor fail"
1460 - restrict the set of allowed characters for identifiers
1461 - implement a time parsing function
1462 - add support for time units in the configuration
1463 - add a bit of documentation about timers
1464 - introduce separation between contimeout, and tarpit + queue
1465 - introduce the "timeout" keyword
1466 - grouped all timeouts in one structure
1467 - slowstart is in ms, not seconds
1468 - slowstart: ensure we don't start with a null weight
1469 - report the number of times each server was selected
1470 - fix build on AIX due to recent log changes
1471 - fix build on Solaris due to recent log changes
1472
Willy Tarreaue855f422007-10-18 22:38:22 +020014732007/10/18 : 1.3.13
1474 - replace the code under O'Reilly license (Arnaud Cornet)
1475 - add a small man page (Arnaud Cornet)
1476 - stats: report haproxy's version by default (Krzysztof Oledzki)
1477 - stats: count server retries and redispatches (Krzysztof Oledzki)
1478 - core: added easy support for Doug Lea's malloc (dlmalloc)
1479 - core: fade out memory usage when stopping proxies
1480 - core: moved the sockaddr pointer to the fdtab structure
1481 - core: add generic protocol support
1482 - core: implement client-side support for PF_UNIX sockets
1483 - stats: implement the CSV output
1484 - stats: add a link to the CSV export HTML page
1485 - stats: implement the statistics output on a unix socket
1486 - config: introduce the "stats" keyword in global section
1487 - build: centralize version and date into one file for each
1488 - tests: added a new hash algorithm
1489
14902007/10/18 : 1.3.12.3
1491 - add the "nolinger" option to disable data lingering (Alexandre Cassen)
1492 - fix double-free during clean exit (Krzysztof Oledzki)
1493 - prevent the system from sending an RST when closing health-checks
1494 (Krzysztof Oledzki)
1495 - do not add a cache-control header when on non-cacheable responses
1496 (Krzysztof Oledzki)
1497 - spread health checks even more (Krzysztof Oledzki)
1498 - stats: scope "." must match the backend and not the frontend
1499 - fixed call to chroot() during startup
1500 - fix wrong timeout computation in event_accept()
1501 - remove condition for exit() under fork() failure
1502
15032007/09/20 : 1.3.12.2
1504 - fix configuration sanity checks for TCP listeners
1505 - set the log socket receive window to zero bytes
1506 - pre-initialize timeouts to infinity, not zero
1507 - fix the SIGHUP message not to alert on server-less proxies
1508 - timeouts and retries could be ignored when switching backend
1509 - added a file to check that "retries" works.
1510 - O'Reilly has clarified its license
1511
15122007/09/05 : 1.3.12.1
1513 - spec I/O: fix allocations of spec entries for an FD
1514 - ensure we never overflow in chunk_printf()
1515 - improve behaviour with large number of servers per proxy
1516 - add support for "stats refresh <interval>"
1517 - stats page: added links for 'refresh' and 'hide down'
1518 - fix backend's weight in the stats page.
1519 - the "stats" keyword is not allowed in a pure frontend.
1520 - provide a test configuration file for stats and checks
1521
Willy Tarreaub21152b2007-06-17 23:41:40 +020015222007/06/17 : 1.3.12
1523 - fix segfault at exit when using captures
1524 - bug: negation in ACL conds was not cleared between terms
1525 - errorfile: use a local file to feed error messages
1526 - acl: support '-i' to ignore case when matching
1527 - acl: smarter integer comparison with operators eq,lt,gt,le,ge
1528 - acl: support maching on 'path' component
1529 - acl: implement matching on header values
1530 - acl: distinguish between request and response headers
1531 - acl: permit to return any header when no name specified
1532 - acl: provide default ACLs
1533 - added the 'use_backend' keyword for full content-switching
1534 - acl: specify the direction during fetches
1535 - acl: provide the argument length for fetch functions
1536 - acl: provide a reference to the expr to fetch()
1537 - improve memory freeing upon exit
1538 - str2net() must not change the const char *
1539 - shut warnings 'is*' macros from ctype.h on solaris
1540
Willy Tarreaua3503e02007-06-03 17:27:07 +020015412007/06/03 : 1.3.11.4
1542 - do not re-arm read timeout in SHUTR state !
1543 - optimize I/O by detecting system starvation
1544 - the epoll FD must not be shared between processes
1545 - limit the number of events returned by *poll*
1546
Willy Tarreau3c6fc072007-05-14 14:40:25 +020015472007/05/14 : 1.3.11.3
1548 - pre-initialize timeouts with tv_eternity during parsing
1549
Willy Tarreaufc273c22007-05-14 03:42:47 +020015502007/05/14 : 1.3.11.2
1551 - fixed broken health-checks since switch to timeval
1552
Willy Tarreau3c5340c2007-05-14 03:18:43 +020015532007/05/14 : 1.3.11.1
1554 - fixed ev_kqueue which was forgotten during the switch to timeval
1555 - allowed null timeouts for past events in select
1556
Willy Tarreau544eb402007-05-14 02:42:33 +020015572007/05/14 : 1.3.11
1558 - fixed ev_sepoll again by rewriting the state machine
1559 - switched all timeouts to timevals instead of milliseconds
1560 - improved memory management using mempools v2.
1561 - several minor optimizations
1562
Willy Tarreau9ca931f2007-05-10 07:51:17 +020015632007/05/09 : 1.3.10.2
1564 - fixed build on OpenBSD (missing types.h)
1565
Willy Tarreau13398d32007-05-09 22:58:28 +020015662007/05/09 : 1.3.10.1
1567 - fixed sepoll transition matrix (two states were missing)
1568
Willy Tarreau61beedf2007-05-09 01:44:58 +020015692007/05/08 : 1.3.10
1570 - several fixes in ev_sepoll
1571 - fixed some expiration dates on some tasks
1572 - fixed a bug in connection establishment detection due to speculative I/O
1573 - fixed rare bug occuring on TCP with early close (reported by Andy Smith)
1574 - implemented URI hashing algorithm (Guillaume Dallaire)
1575 - implemented SMTP health checks (Peter van Dijk)
1576 - replaced the rbtree with ul2tree from old scheduler project
1577 - new framework for generic ACL support
1578 - added the 'acl' and 'block' keywords to the config language
1579 - added several ACL criteria and matches (IP, port, URI, ...)
1580 - cleaned up and better modularization for some time functions
1581 - fixed list macros
1582 - fixed useless memory allocation in str2net()
1583 - store the original destination address in the session
1584
Willy Tarreau6e0433f2007-04-16 01:18:12 +020015852007/04/15 : 1.3.9
1586 - modularized the polling mechanisms and use function pointers instead
1587 of macros at many places
1588 - implemented support for FreeBSD's kqueue() polling mechanism
1589 - fixed a warning on OpenBSD : MIN/MAX redefined
1590 - change socket registration order at startup to accomodate kqueue.
1591 - several makefile cleanups to support old shells
1592 - fix build with limits.h once for all
1593 - ev_epoll: do not rely on fd_sets anymore, use changes stacks instead.
1594 - fdtab now holds the results of polling
1595 - implemented support for speculative I/O processing with epoll()
1596 - remove useless calls to shutdown(SHUT_RD), resulting in small speed boost
1597 - auto-registering of pollers at load time
1598
Willy Tarreau42c76592007-04-03 20:30:13 +020015992007/04/03 : 1.3.8.2
1600 - rewriting either the status line or request line could crash the
1601 process due to a pointer which ought to be reset before parsing.
1602 - rewriting the status line in the response did not work, it caused
1603 a 502 Bad Gateway due to an erroneous state during parsing
1604
Willy Tarreauef6d7612007-04-01 11:06:22 +020016052007/04/01 : 1.3.8.1
1606 - fix reqadd when no option httpclose is used.
1607 - removed now unused fiprm and beprm from proxies
1608 - split logs into two versions : TCP and HTTP
1609 - added some docs about http headers storage and acls
1610 - added a VIM script for syntax color highlighting (Bruno Michel)
1611
Willy Tarreaud661cc02007-03-26 00:24:56 +020016122007/03/25 : 1.3.8
1613 - fixed several bugs which might have caused a crash with bad configs
1614 - several optimizations in header processing
1615 - many progresses towards transaction-based processing
1616 - option forwardfor may be used in frontends
1617 - completed HTTP response processing
1618 - some code refactoring between request and response processing
1619 - new HTTP header manipulation functions
1620 - optimizations on the recv() patch to reduce CPU usage under very
1621 high data rates.
1622 - more user-friendly help about the 'usesrc' keyword (CTTPROXY)
1623 - username/groupname support from Marcus Rueckert
1624 - added the "except" keyword to the "forwardfor" option (Bryan German)
1625 - support for health-checks on other addresses (Fabrice Dulaunoy)
1626 - makefile for MacOS 10.4 / Darwin (Dan Zinngrabe)
1627 - do not insert "Connection: close" in HTTP/1.0 messages
1628
Willy Tarreau9cabf702007-01-26 23:49:01 +010016292007/01/26 : 1.3.7
1630 - fix critical bug introduced with 1.3.6 : an empty request header
1631 may lead to a crash due to missing pointer assignment
1632 - hdr_idx might be left uninitialized in debug mode
1633 - fixed build on FreeBSD due to missing fd_set declaration
1634
Willy Tarreaue7a24382007-01-22 08:57:44 +010016352007/01/22 : 1.3.6.1
1636 - change in the header chaining broke cookies and authentication
1637
Willy Tarreau49e1ee82007-01-22 00:56:46 +010016382007/01/22 : 1.3.6
1639 - stats now support the HEAD method too
1640 - extracted http request from the session
1641 - huge rework of the HTTP parser which is now a 28-state FSM.
1642 - linux-style likely/unlikely macros for optimization hints
1643 - do not create a server socket when there's no server
1644 - imported lots of docs
1645
Willy Tarreau5871f8e2007-01-07 02:47:01 +010016462007/01/07 : 1.3.5
1647 - stats: swap color sets for active and backup servers
1648 - try to guess server check port when unset
1649 - added complete support and doc for TCP Splicing
1650 - replace the wait-queue linked list with an rbtree.
1651 - a few bugfixes and cleanups
1652
Willy Tarreau85270da2007-01-02 00:59:39 +010016532007/01/02 : 1.3.4
1654 - support for cttproxy on the server side to present the client
1655 address to the server.
1656 - added support for SO_REUSEPORT on Linux (needs kernel patch)
1657 - new RFC2616-compliant HTTP request parser with header indexing
1658 - split proxies in frontends, rulesets and backends
1659 - implemented the 'req[i]setbe' to select a backend depending
1660 on the contents
1661 - added the 'default_backend' keyword to select a default BE.
1662 - new stats page featuring FEs and BEs + bytes in both dirs
1663 - improved log format to indicate the backend and the time in ms.
1664 - lots of cleanups
1665
Willy Tarreau9c9fea42006-10-16 00:03:35 +020016662006/10/15 : 1.3.3
1667 - fix broken redispatch option in case the connection has already
1668 been marked "in progress" (ie: nearly always).
1669 - support regparm on x86 to speed up some often called functions
1670 - removed a few useless calls to gettimeofday() in log functions.
1671 - lots of 'const char*' cleanups
1672 - turn every FD_* into functions which are faster on recent CPUs
1673
Willy Tarreau690f9aa2006-09-03 11:23:06 +020016742006/09/03 : 1.3.2
1675 - started the changes towards I/O completion callbacks. stream_sock* have
1676 replaced event_*.
1677 - added the new "reqtarpit" and "reqitarpit" protection features
1678
Willy Tarreau8f2b8552006-07-09 17:11:39 +020016792006/07/09 : 1.3.1 (1.2.15)
1680 - now, haproxy warns about missing timeout during startup to try to
1681 eliminate all those buggy configurations.
1682 - added "Content-Type: text/html" in responses wherever appropriate, as
1683 suggested by Cameron Simpson.
1684 - implemented "option ssl-hello-chk" to use SSLv3 CLIENT HELLO messages to
1685 test server's health
1686 - implemented "monitor-uri" so that haproxy can reply to a specific URI with
1687 an "HTTP/1.0 200 OK" response. This is useful to validate multiple proxies
1688 at once.
1689
Willy Tarreaub9e98b62006-07-03 10:32:46 +020016902006/06/29 : 1.3.0
1691 - exploded the whole file into multiple .c and .h. No functionnal
Willy Tarreau8f2b8552006-07-09 17:11:39 +02001692 difference is expected at all.
1693 - fixed a bug by which neither stats nor error messages could be returned if
1694 'clitimeout' was missing.
Willy Tarreaub9e98b62006-07-03 10:32:46 +02001695
willy tarreau7e6328d2006-05-21 23:26:20 +020016962006/05/21 : 1.2.14
1697 - new HTML status report with the 'stats' keyword.
1698 - added the 'abortonclose' option to better resist traffic surges
1699 - implemented dynamic traffic regulation with the 'minconn' option
1700 - show request time on denied requests
1701 - definitely fixed hot reconf on OpenBSD by the use of SO_REUSEPORT
1702 - now a proxy instance is allowed to run without servers, which is
1703 useful to dedicate one instance to stats
1704 - added lots of error counters
1705 - a missing parenthesis preventd matching of cacheable cookies
1706 - a missing parenthesis in poll_loop() might have caused missed events.
1707
Willy TARREAU4404b7e2006-05-14 10:00:09 +020017082006/05/14 : 1.2.13.1
1709 - an uninitialized field in the struct session could cause a crash when
1710 the session was freed. This has been encountered on Solaris only.
1711 - Solaris and OpenBSD no not support shutdown() on listening socket. Let's
1712 be nice to them by performing a soft stop if pause fails.
1713
willy tarreauc3a2e072006-05-13 18:51:38 +020017142006/05/13 : 1.2.13
1715 - 'maxconn' server parameter to do per-server session limitation
1716 - queueing to support non-blocking session limitation
1717 - fixed removal of cookies for cookie-less servers such as backup servers
1718 - two separate wait queues for expirable and non-expirable tasks provide
1719 better performance with lots of sessions.
1720 - some code cleanups and performance improvements
1721 - made state dumps a bit more verbose
1722 - fixed missing checks for NULL srv in dispatch mode
1723 - load balancing on backup servers was not possible in source hash mode.
1724 - two session flags shared the same bit, but fortunately they were not
1725 compatible.
1726
willy tarreauc0d4bbd2006-04-15 21:47:50 +020017272006/04/15 : 1.2.12
1728 Very few changes preparing for more important changes to support per-server
1729 session limitations and queueing :
1730 - ignore leading empty lines in HTTP requests as suggested by RFC2616.
1731 - added the 'weight' parameter to the servers, limited to 1..256. It applies
1732 to roundrobin and source hash.
1733 - the optional '-s' option could clobber '-st' and '-sf' if compiled in.
1734
willy tarreaue0dd2692006-03-30 16:27:34 +020017352006/03/30 : 1.2.11.1
1736 - under some conditions, it might have been possible that when the
1737 last dead server became available, it would not have been used
1738 till another one would have changed state. Could not be reproduced
1739 at all, however seems possible from the code.
1740
willy tarreaud2058dc2006-03-25 20:35:41 +010017412006/03/25 : 1.2.11
1742 - added the '-db' command-line option to disable backgrounding.
1743 - added the -sf/-st command-line arguments which are used to specify
1744 a list of pids to send a FINISH or TERMINATE signal upon startup.
1745 They will also be asked to release their port if a bind fails.
1746 - reworked the startup mechanism to allow the sending of a signal to a list
1747 of old pids if a socket cannot be bound, with a retry for a limited amount
1748 of time (1 second by default).
1749 - added the ability to enforce limits on memory usage.
1750 - added the 'source' load-balancing algorithm which uses the source IP(v4|v6)
1751 - re-architectured the server round-robin mechanism to ease integration of
1752 other algorithms. It now relies on the number of active and backup servers.
1753 - added a counter for the number of active and backup servers, and report
1754 these numbers upon SIGHUP or state change.
1755
willy tarreaubfad5742006-03-23 14:19:11 +010017562006/03/23 : 1.2.10.1
1757 - while fixing the backup server round-robin "feature", a new bug was
1758 introduced which could miss some backup servers.
1759 - the displayed proxy name was wrong when dumping upon SIGHUP.
1760
willy tarreauaaff30e2006-03-19 21:30:41 +010017612006/03/19 : 1.2.10
1762 - assert.h is needed when DEBUG is defined.
1763 - ENORMOUS long standing bug affecting the epoll polling system :
1764 event_data is a union, not a structure !
1765 - Make fd management more robust and easier to debug. Also some
1766 micro-optimisations.
1767 - Limit the number of consecutive accept() in multi-process mode.
1768 This produces a more evenly distributed load across the processes and
1769 slightly improves performance by reducing bottlenecks.
1770 - Make health-checks be more regular, and faster to retry after a timeout.
1771 - Fixed some messages to ease parsing of alerts.
1772 - provided a patch to enable epoll on RHEL3 kernels.
1773 - Separated OpenBSD build from the main Makefile into a new one.
1774
willy tarreau50be0172006-03-15 19:41:19 +010017752006/03/15 : 1.2.9
1776 - haproxy could not be stopped after being paused, it had to be woken up
1777 first. This has been fixed.
1778 - the 'ulimit-n' parameter is now optional and by default computed from
1779 maxconn + the number of listeners + the number of health-checks.
1780 - it is now possible to specify a maximum number of connections at build
1781 time with the SYSTEM_MAXCONN define. The value set in the configuration
1782 file will then be limited to this value, and only the command-line '-n'
1783 option will be able to bypass it. It will prevent against accidental
1784 high memory usage on small systems.
1785 - RFC2616 expects that any HTTP agent accepts multi-line headers. Earlier
1786 versions did not detect a line beginning with a space as the continuation
1787 of previous header. It is now correct.
1788 - health checks sent to servers configured with identical intervals were
1789 sent in perfect synchronisation because the initial time was the same
1790 for all. This could induce high load peaks when fragile servers were
1791 hosting tens of instances for the same application. Now the load is
1792 spread evenly across the smallest interval amongst a listener.
1793 - a new 'forceclose' option was added to make the proxy close the outgoing
1794 channel to the server once it has sent all its headers and the server
1795 starts responding. This helps some servers which don't close upon the
1796 'Connection: close' header. It implies 'option httpclose'.
1797 - there was a bug in the way the backup servers were handled. They were
1798 erroneously load-balanced while the doc said the opposite. Since
1799 load-balanced backup servers is one of the features some people have
1800 been asking for, the problem was fixed to reflect the documented
1801 behaviour and a new option 'allbackups' was introduced to provide the
1802 feature to those who need it.
1803 - a never ending connect() could lead to a fast select() loop if its
1804 timeout times the number of retransmits exceeded the server read or write
1805 timeout, because the later was used to compute select()'s timeout while
1806 the connection timeout was not reached.
1807 - now we initialize the libc's localtime structures very early so that even
1808 under OOM conditions, we can still send dated error messages without
1809 segfaulting.
1810 - the 'daemon' mode implies 'quiet' and disables 'verbose' because file
1811 descriptors are closed.
1812
willy tarreau065f1c02006-01-29 22:10:07 +010018132006/01/29 : 1.2.8
1814 - fixed a nasty bug affecting poll/epoll which could return unmodified data
1815 from the server to the client, and sometimes lead to memory corruption
1816 crashing the process.
1817 - added the new pause/play mechanism with SIGTTOU/SIGTTIN for hot-reconf.
1818
18192005/12/18 : 1.2.7.1
1820 - the "retries" option was ignored because connect() could not return an
1821 error if the connection failed before the timeout.
1822 - TCP health-checks could not detect a connection refused in poll/epoll
1823 mode.
1824
willy tarreaua56eca72005-12-18 01:34:42 +010018252005/11/13 : 1.2.7
willy tarreau77bc8542005-12-18 01:31:43 +01001826 - building with -DUSE_PCRE should include PCRE headers and not regex.h. At
1827 least on Solaris, this caused the libc's regex primitives to be used instead
1828 of PCRE, which caused trouble on group references. This is now fixed.
willy tarreaud0fb4652005-12-18 01:32:04 +01001829 - delayed the quiet mode during startup so that most of the startup alerts can
1830 be displayed even in quiet mode.
1831 - display an alert when a listener has no address, invalid or no port, or when
1832 there are no enabled listeners upon startup.
willy tarreau4373b962005-12-18 01:32:31 +01001833 - added "static-pcre" to the list of supported regex options in the Makefile.
willy tarreau77bc8542005-12-18 01:31:43 +01001834
willy tarreaub952e1d2005-12-18 01:31:20 +010018352005/10/09 : 1.2.7rc (1.1.33rc)
1836 - second batch of socklen_t changes.
1837 - clean-ups from Cameron Simpson.
1838 - because tv_remain() does not know about eternity, using no timeout can
1839 make select() spin around a null time-out. Bug reported by Cameron Simpson.
1840 - client read timeout was not properly set to eternity initialized after an
1841 accept() if it was not set in the config. It remained undetected so long
1842 because eternity is 0 and newly allocated pages are zeroed by the system.
1843 - do not call get_original_dst() when not in transparent mode.
1844 - implemented a workaround for a bug in certain epoll() implementations on
1845 linux-2.4 kernels (epoll-lt <= 0.21).
1846 - implemented TCP keepalive with new options : tcpka, clitcpka, srvtcpka.
1847
willy tarreauc5f73ed2005-12-18 01:26:38 +010018482005/08/07 : 1.2.6
1849 - clean-up patch from Alexander Lazic fixes build on Debian 3.1 (socklen_t).
1850
18512005/07/06 : 1.2.6-pre5 (1.1.32)
willy tarreau0fe39652005-12-18 01:25:24 +01001852 - added the number of active sessions (proxy/process) in the logs
1853
18542005/07/06 : 1.2.6-pre4 (1.1.32-pre4)
willy tarreaub1285d52005-12-18 01:20:14 +01001855 - the time-out fix introduced in 1.1.25 caused a corner case where it was
1856 possible for a client to keep a connection maintained regardless of the
1857 timeout if the server closed the connection during the HEADER phase,
1858 while the client ignored the close request while doing nothing in the
1859 other direction. This has been fixed now by ensuring that read timeouts
1860 are re-armed when switching to any SHUTW state.
1861
18622005/07/05 : 1.2.6-pre3 (1.1.32-pre3)
1863 - enhanced error reporting in the logs. Now the proxy will precisely detect
1864 various error conditions related to the system and/or process limits, and
1865 generate LOG_EMERG logs indicating that a resource has been exhausted.
1866 - logs will contain two new characters for the error cause : 'R' indicates
1867 a resource exhausted, and 'I' indicates an internal error, though this
1868 one should never happen.
1869 - server connection timeouts can now be reported in the logs (sC), as well
1870 as connections refused because of maxconn limitations (PC).
1871
18722005/07/05 : 1.2.6-pre2 (1.1.32-pre2)
1873 - new global configuration keyword "ulimit-n" may be used to raise the FD
1874 limit to usable values.
1875 - a warning is now displayed on startup if the FD limit is lower than the
1876 configured maximum number of sockets.
1877
18782005/07/05 : 1.2.6-pre1 (1.1.32-pre1)
1879 - new configuration keyword "monitor-net" makes it possible to be monitored
1880 by external devices which connect to the proxy without being logged nor
1881 forwarded to any server. Particularly useful on generic TCPv4 relays.
1882
willy tarreau5dffb602005-12-18 01:15:23 +010018832005/06/21 : 1.2.5.2
1884 - fixed build on PPC where chars are unsigned by default
1885
willy tarreau08dedbe2005-12-18 01:13:48 +010018862005/05/02 : 1.2.5.1
1887 - dirty hack to fix a bug introduced with epoll : if we close an FD and
1888 immediately reassign it to another session through a connect(), the
1889 Prev{Read,Write}Events are not updated, which causes trouble detecting
1890 changes, thus leading to many timeouts at high loads.
1891
willy tarreau64a3cc32005-12-18 01:13:11 +010018922005/04/30 : 1.2.5 (1.1.31)
1893 - changed the runtime argument to disable epoll() to '-de'
1894 - changed the runtime argument to disable poll() to '-dp'
1895 - added global options 'nopoll' and 'noepoll' to do the same at the
1896 configuration level.
1897 - added a 'linux24e' target to the Makefile for Linux 2.4 systems patched to
1898 support epoll().
1899 - changed default FD_SETSIZE to 65536 on Solaris (default=1024)
1900 - conditionned signals redirection to #ifdef DEBUG_MEMORY
1901
willy tarreau1c2ad212005-12-18 01:11:29 +010019022005/04/26 : 1.2.5-pre4
1903 - made epoll() support a compile-time option : ENABLE_EPOLL
1904 - provided a very little libc replacement for a possibly missing epoll()
1905 implementation which can be enabled by -DUSE_MY_EPOLL
1906 - implemented the poll() poller, which can be enabled with -DENABLE_POLL.
1907 The equivalent runtime argument becomes '-P'. A few tests show that it
1908 performs like select() with many fds, but slightly slower (certainly
1909 because of the higher amount of memory involved).
1910 - separated the 3 polling methods and the tasks scheduler into 4 distinct
1911 functions which makes the code a lot more modular.
1912 - moved some event tables to private static declarations inside the poller
1913 functions.
1914 - the poller functions can now initialize themselves, run, and cleanup.
1915 - changed the runtime argument to enable epoll() to '-E'.
1916 - removed buggy epoll_ctl() code in the client_retnclose() function. This
1917 function was never meant to remove anything.
1918 - fixed a typo which caused glibc to yell about a double free on exit.
1919 - removed error checking after epoll_ctl(DEL) because we can never know if
1920 the fd is still active or already closed.
1921 - added a few entries in the makefile
1922
willy tarreauad90a0c2005-12-18 01:09:15 +010019232005/04/25 : 1.2.5-pre3
1924 - experimental epoll() support (use temporary '-e' argument)
1925
19262005/04/24 : 1.2.5-pre2
willy tarreauc1f47532005-12-18 01:08:26 +01001927 - implemented the HTTP 303 code for error redirection. This forces the
1928 browser to fetch the given URI with a GET request. The new keyword for
1929 this is 'errorloc303', and a new 'errorloc302' keyword has been created
1930 to make them easily distinguishable.
1931 - added more controls in the parser for valid use of '\x' sequence.
1932 - few fixes from Alex & Klaus
1933
willy tarreauad90a0c2005-12-18 01:09:15 +010019342005/02/17 : 1.2.5-pre1
willy tarreauc1f47532005-12-18 01:08:26 +01001935 - fixed a few errors in the documentation
1936
19372005/02/13
1938 - do not pre-initialize unused file-descriptors before select() anymore.
1939
willy tarreau12350152005-12-18 01:03:27 +010019402005/01/22 : 1.2.4
1941 - merged Alexander Lazic's and Klaus Wagner's work on application
1942 cookie-based persistence. Since this is the first merge, this version is
1943 not intended for general use and reports are more than welcome. Some
1944 documentation is really needed though.
1945
willy tarreau0174f312005-12-18 01:02:42 +010019462005/01/22 : 1.2.3 (1.1.30)
1947 - add an architecture guide to the documentation
1948 - released without any changes
1949
19502004/12/26 : 1.2.3-pre1 (1.1.30-pre1)
1951 - increased default BUFSIZE to 16 kB to accept max headers of 8 kB which is
1952 compatible with Apache. This limit can be configured in the makefile now.
1953 Thanks to Eric Fehr for the checks.
1954 - added a per-server "source" option which now makes it possible to bind to
1955 a different source for each (potentially identical) server.
1956 - changed cookie-based server selection slightly to allow several servers to
1957 share a same cookie, thus making it possible to associate backup servers to
1958 live servers and ease soft-stop for maintenance periods. (Alexander Lazic)
1959 - added the cookie 'prefix' mode which makes it possible to use persistence
1960 with thin clients which support only one cookie. The server name is prefixed
1961 before the application cookie, and restore back.
1962 - fixed the order of servers within an instance to match documentation. Now
1963 the servers are *really* used in the order of their declaration. This is
1964 particularly important when multiple backup servers are in use.
1965
willy tarreau4302f492005-12-18 01:00:37 +010019662004/10/18 : 1.2.2 (1.1.29)
1967 - fixed a bug where a TCP connection would be logged twice if the 'logasap'
1968 option was enabled without the 'tcplog' option.
1969 - encode_string() would use hdr_encode_map instead of the map argument.
1970
19712004/08/10 : (1.1.29-pre2)
1972 - the logged request is now encoded with '#XX' for unprintable characters
1973 - new keywords 'capture request header' and 'capture response header' enable
1974 logging of arbitrary HTTP headers in requests and responses
1975 - removed "-DSOLARIS" after replacing the last inet_aton() with inet_pton()
1976
willy tarreau982249e2005-12-18 00:57:06 +010019772004/06/06 : 1.2.1 (1.1.28)
1978 - added the '-V' command line option to verbosely report errors even though
1979 the -q or 'quiet' options are specified. This is useful with '-c'.
1980 - added a Red Hat init script and a .spec from Simon Matter <simon.matter@invoca.ch>
willy tarreau036e1ce2005-12-17 13:46:33 +01001981
willy tarreau982249e2005-12-18 00:57:06 +010019822004/06/05 :
1983 - added the "logasap" option which produces a log without waiting for the data
1984 to be transferred from the server to the client.
1985 - added the "httpclose" option which removes any "connection:" header and adds
1986 "Connection: close" in both direction.
willy tarreau97f58572005-12-18 00:53:44 +01001987 - added the 'checkcache' option which blocks cacheable responses containing
1988 dangerous headers, such as 'set-cookie'.
willy tarreau982249e2005-12-18 00:57:06 +01001989 - added 'rspdeny' and 'rspideny' to block certain responses to avoid sensible
1990 information leak from servers.
willy tarreau25c4ea52005-12-18 00:49:49 +01001991
19922004/04/18 :
willy tarreaudd07e972005-12-18 00:48:48 +01001993 - send an EMERG log when no server is available for a given proxy
1994 - added the '-c' command line option to syntactically check the
1995 configuration file without starting the service.
1996
willy tarreau8a86dbf2005-12-18 00:45:59 +010019972003/11/09 : 1.2.0
1998 - the same as 1.1.27 + IPv6 support on the client side
1999
willy tarreaufe2c5c12005-12-17 14:14:34 +010020002003/10/27 : 1.1.27
2001 - the configurable HTTP health check introduced in 1.1.23 revealed a shameful
2002 bug : the code still assumed that HTTP requests were the same size as the
2003 original ones (22 bytes), and failed if they were not.
2004 - added support for pidfiles.
2005
willy tarreauc58fc692005-12-17 14:13:08 +010020062003/10/22 : 1.1.26
2007 - the fix introduced in 1.1.25 for client timeouts while waiting for servers
2008 broke almost all compatibility with POST requests, because the proxy
2009 stopped to read anything from the client as soon as it got all of its
2010 headers.
2011
willy tarreauc1cae632005-12-17 14:12:23 +010020122003/10/15 : 1.1.25
2013 - added the 'tcplog' option, which provides enhanced, HTTP-like logs for
2014 generic TCP proxies, or lighter logs for HTTP proxies.
2015 - fixed a time-out condition wrongly reported as client time-out in data
2016 phase if the client timeout was lower than the connect timeout times the
2017 number of retries.
2018
willy tarreau197e8ec2005-12-17 14:10:59 +010020192003/09/21 : 1.1.24
2020 - if a client sent a full request then shut its write connection down, then
2021 the request was aborted. This case was detected only when using haproxy
2022 both as health-check client and as a server.
2023 - if 'option httpchk' is used in a 'health' mode server, then responses will
2024 change from 'OK' to 'HTTP/1.0 200 OK'.
2025 - fixed a Linux-only bug in case of HTTP server health-checks, where a single
2026 server response followed by a close could be ignored, and the server seen
2027 as failed.
2028
willy tarreaueedaa9f2005-12-17 14:08:03 +010020292003/09/19 : 1.1.23
2030 - fixed a stupid bug introduced in 1.1.22 which caused second and subsequent
2031 'default' sections to keep previous parameters, and not initialize logs
2032 correctly.
2033 - fixed a second stupid bug introduced in 1.1.22 which caused configurations
2034 relying on 'dispatch' mode to segfault at the first connection.
2035 - 'option httpchk' now supports method, HTTP version and a few headers.
2036 - now, 'option httpchk', 'cookie' and 'capture' can be specified in
2037 'defaults' section
2038
20392003/09/10 : 1.1.22
willy tarreaua41a8b42005-12-17 14:02:24 +01002040 - 'listen' now supports optionnal address:port-range lists
2041 - 'bind' introduced to add new listen addresses
2042 - fixed a bug which caused a session to be kept established on a server till
2043 it timed out if the client closed during the DATA phase.
2044 - the port part of each server address can now be empty to make the proxy
2045 connect to the server on the same port it was connected to, be an absolute
2046 unsigned number to reflect a single port (as in older versions), or an
2047 explicitly signed number (+N/-N) to indicate that this offset must be
2048 applied to the port the proxy was connected to, when connecting to the
2049 server.
2050 - the 'port' server option allows the user to specify a different
2051 health-check port than the service one. It is mandatory when only relative
2052 ports have been specified and check is required. By default, the checks are
2053 sent to the service port.
2054 - new 'defaults' section which is rather similar to 'listen' except that all
2055 values are only used as default values for future 'listen' sections, until
2056 a new 'defaults' resets them. At the moment, server options, regexes,
2057 cookie names and captures cannot be set in the 'defaults' section.
2058
willy tarreau2f6ba652005-12-17 13:57:42 +010020592003/05/06 : 1.1.21
2060 - changed the debug output format so that it now includes the session unique
2061 ID followed by the instance name at the beginning of each line.
2062 - in debug mode, accept now shows the client's IP and port.
2063 - added one 3 small debugging scripts to search and pretty print debug output
2064 - changed the default health check request to "OPTIONS /" instead of
2065 "OPTIONS *" since not all servers implement the later one.
2066 - "option httpchk" now accepts an optional parameter allowing the user to
2067 specify and URI other than '/' during health-checks.
2068
willy tarreaub1ff9db2005-12-17 13:51:03 +010020692003/04/21 : 1.1.20
2070 - fixed two problems with time-outs, one where a server would be logged as
2071 timed out during transfer that take longer to complete than the fixed
2072 time-out, and one where clients were logged as timed-out during the data
2073 phase because they didn't have anything to send. This sometimes caused
2074 slow client connections to close too early while in fact there was no
2075 problem. The proper fix would be to have a per-fd time-out with
2076 conditions depending on the state of the HTTP FSM.
2077
willy tarreau906b2682005-12-17 13:49:52 +010020782003/04/16 : 1.1.19
2079 - haproxy was NOT RFC compliant because it was case-sensitive on HTTP
2080 "Cookie:" and "Set-Cookie:" headers. This caused JVM 1.4 to fail on
2081 cookie persistence because it uses "cookie:". Two memcmp() have been
2082 replaced with strncasecmp().
2083
willy tarreau036e1ce2005-12-17 13:46:33 +010020842003/04/02 : 1.1.18
2085 - Haproxy can be compiled with PCRE regex instead of libc regex, by setting
2086 REGEX=pcre on the make command line.
2087 - HTTP health-checks now use "OPTIONS *" instead of "OPTIONS /".
2088 - when explicit source address binding is required, it is now also used for
2089 health-checks.
2090 - added 'reqpass' and 'reqipass' to allow certain headers but not the request
2091 itself.
2092 - factored several strings to reduce binary size by about 2 kB.
2093 - replaced setreuid() and setregid() with more standard setuid() and setgid().
2094 - added 4 status flags to the log line indicating who ended the connection
2095 first, the sessions state, the validity of the cookie, and action taken on
2096 the set-cookie header.
2097
20982002/10/18 : 1.1.17
2099 - add the notion of "backup" servers, which are used only when all other
2100 servers are down.
2101 - make Set-Cookie return "" instead of "(null)" when the server has no
2102 cookie assigned (useful for backup servers).
2103 - "log" now supports an optionnal level name (info, notice, err ...) above
2104 which nothing is sent.
2105 - replaced some strncmp() with memcmp() for better efficiency.
2106 - added "capture cookie" option which logs client and/or server cookies
2107 - cleaned up/down messages and dump servers states upon SIGHUP
2108 - added a redirection feature for errors : "errorloc <errnum> <url>"
2109 - now we won't insist on connecting to a dead server, even with a cookie,
2110 unless option "persist" is specified.
2111 - added HTTP/408 response for client request time-out and HTTP/50[234] for
2112 server reply time-out or errors.
2113
21142002/09/01 : 1.1.16
2115 - implement HTTP health checks when option "httpchk" is specified.
2116
21172002/08/07 : 1.1.15
2118 - replaced setpgid()/setpgrp() with setsid() for better portability, because
2119 setpgrp() doesn't have the same meaning under Solaris, Linux, and OpenBSD.
2120
21212002/07/20 : 1.1.14
2122 - added "postonly" cookie mode
2123
21242002/07/15 : 1.1.13
2125 - tv_diff used inverted parameters which led to negative times !
2126
21272002/07/13 : 1.1.12
2128 - fixed stats monitoring, and optimized some tv_* for most common cases.
2129 - replaced temporary 'newhdr' with 'trash' to reduce stack size
2130 - made HTTP errors more HTML-fiendly.
2131 - renamed strlcpy() to strlcpy2() because of a slightly difference between
2132 their behaviour (return value), to avoid confusion.
2133 - restricted HTTP messages to HTTP proxies only
2134 - added a 502 message when the connection has been refused by the server,
2135 to prevent clients from believing this is a zero-byte HTTP 0.9 reply.
2136 - changed 'Cache-control:' from 'no-cache="set-cookie"' to 'private' when
2137 inserting a cookie, because some caches (apache) don't understand it.
2138 - fixed processing of server headers when client is in SHUTR state
2139
21402002/07/04 :
2141 - automatically close fd's 0,1 and 2 when going daemon ; setpgrp() after
2142 setpgid()
2143
21442002/06/04 : 1.1.11
2145 - fixed multi-cookie handling in client request to allow clean deletion
2146 in insert+indirect mode. Now, only the server cookie is deleted and not
willy tarreau906b2682005-12-17 13:49:52 +01002147 all the header. Should now be compliant to RFC2965.
willy tarreau036e1ce2005-12-17 13:46:33 +01002148 - added a "nocache" option to "cookie" to specify that we explicitly want
2149 to add a "cache-control" header when we add a cookie.
2150 It is also possible to add an "Expires: <old-date>" to keep compatibility
2151 with old/broken caches.
2152
21532002/05/10 : 1.1.10
2154 - if a cookie is used in insert+indirect mode, it's desirable that the
2155 the servers don't see it. It was not possible to remove it correctly
2156 with regexps, so now it's removed automatically.
2157
21582002/04/19 : 1.1.9
2159 - don't use snprintf()'s return value as an end of message since it may
2160 be larger. This caused bus errors and segfaults in internal libc's
2161 getenv() during localtime() in send_log().
2162 - removed dead insecure send_syslog() function and all references to it.
2163 - fixed warnings on Solaris due to buggy implementation of isXXXX().
2164
21652002/04/18 : 1.1.8
2166 - option "dontlognull"
2167 - fixed "double space" bug in config parser
2168 - fixed an uninitialized server field in case of dispatch
2169 with no existing server which could cause a segfault during
2170 logging.
2171 - the pid logged was always the father's, which was wrong for daemons.
2172 - fixed wrong level "LOG_INFO" for message "proxy started".
2173
21742002/04/13 :
2175 - http logging is now complete :
2176 - ip:port, date, proxy, server
2177 - req_time, conn_time, hdr_time, tot_time
2178 - status, size, request
2179 - source address
2180
21812002/04/12 : 1.1.7
2182 - added option forwardfor
2183 - added reqirep, reqidel, reqiallow, reqideny, rspirep, rspidel
2184 - added "log global" in "listen" section.
2185
21862002/04/09 :
2187 - added a new "global" section :
2188 - logs
2189 - debug, quiet, daemon modes
2190 - uid, gid, chroot, nbproc, maxconn
2191
21922002/04/08 : 1.1.6
2193 - regex are now chained and not limited anymore.
2194 - unavailable server now returns HTTP/502.
2195 - increased per-line args limit to 40
2196 - added reqallow/reqdeny to block some request on matches
2197 - added HTTP 400/403 responses
2198
21992002/04/03 : 1.1.5
2200 - connection logging displayed incorrect source address.
2201 - added proxy start/stop and server up/down log events.
2202 - replaced log message short buffers with larger trash.
2203 - enlarged buffer to 8 kB and replace buffer to 4 kB.
2204
22052002/03/25 : 1.1.4
2206 - made rise/fall/interval time configurable
2207
22082002/03/22 : 1.1.3
2209 - fixed a bug : cr_expire and cw_expire were inverted in CL_STSHUT[WR]
2210 which could lead to loops.
2211
22122002/03/21 : 1.1.2
2213 - fixed a bug in buffer management where we could have a loop
2214 between event_read() and process_{cli|srv} if R==BUFSIZE-MAXREWRITE.
2215 => implemented an adjustable buffer limit.
2216 - fixed a bug : expiration of tasks in wait queue timeout is used again,
2217 and running tasks are skipped.
2218 - added some debug lines for accept events.
2219 - send warnings for servers up/down.
2220
22212002/03/12 : 1.1.1
2222 - fixed a bug in total failure handling
2223 - fixed a bug in timestamp comparison within same second (tv_cmp_ms)
2224
22252002/03/10 : 1.1.0
2226 - fixed a few timeout bugs
2227 - rearranged the task scheduler subsystem to improve performance,
2228 add new tasks, and make it easier to later port to librt ;
2229 - allow multiple accept() for one select() wake up ;
2230 - implemented internal load balancing with basic health-check ;
2231 - cookie insertion and header add/replace/delete, with better strings
2232 support.
2233
22342002/03/08
2235 - reworked buffer handling to fix a few rewrite bugs, and
2236 improve overall performance.
2237 - implement the "purge" option to delete server cookies in direct mode.
2238
22392002/03/07
2240 - fixed some error cases where the maxfd was not decreased.
2241
22422002/02/26
2243 - now supports transparent proxying, at least on linux 2.4.
2244
22452002/02/12
2246 - soft stop works again (fixed select timeout computation).
2247 - it seems that TCP proxies sometimes cannot timeout.
2248 - added a "quiet" mode.
2249 - enforce file descriptor limitation on socket() and accept().
2250
22512001/12/30 : release of version 1.0.2 : fixed a bug in header processing
22522001/12/19 : release of version 1.0.1 : no MSG_NOSIGNAL on solaris
22532001/12/16 : release of version 1.0.0.
22542001/12/16 : added syslog capability for each accepted connection.
22552001/11/19 : corrected premature end of files and occasional SIGPIPE.
22562001/10/31 : added health-check type servers (mode health) which replies OK then closes.
22572001/10/30 : added the ability to support standard TCP proxies and HTTP proxies
2258 with or without cookies (use keyword http for this).
22592001/09/01 : added client/server header replacing with regexps.
2260 eg:
2261 cliexp ^(Host:\ [^:]*).* Host:\ \1:80
2262 srvexp ^Server:\ .* Server:\ Apache
22632000/11/29 : first fully working release with complete FSMs and timeouts.
22642000/11/28 : major rewrite
22652000/11/26 : first write