Pacing was recently implemented by QUIC MUX. Its tasklet is rescheduled until next emission timer is reached. To improve performance, an alternate execution of qcc_io_cb was performed when rescheduled due to pacing. This was implemented using TASK_F_USR1 flag. However, this model is fragile, in particular when several events happened alongside pacing scheduling. This has caused some issue recently, most notably when MUX is subscribed on transport layer on receive for handshake completion while pacing emission is performed in parallel. MUX qcc_io_cb() would not execute the default code path, which means the reception event is silently ignored. Recent patches have reworked several parts of qcc_io_cb. The objective was to improve performance with better algorithm on send and receive part. Most notable, qcc frames list is only cleared when new data is available for emission. With this, pacing alternative code is now mostly unneeded. As such, this patch removes it. The following changes are performed : * TASK_F_USR1 is now not used by QUIC MUX. As such, tasklet_wakeup() default invokation can now replace obsolete wrappers qcc_wakeup/qcc_wakeup_pacing * qcc_purge_sending is removed. On pacing rescheduling, all qcc_io_cb() is executed. This is less error-prone, in particular when pacing is mixed with other events like receive handling. This renders the code less fragile, as it completely solves the described issue above. This should be backported up to 3.1.
HAProxy
HAProxy is a free, very fast and reliable reverse-proxy offering high availability, load balancing, and proxying for TCP and HTTP-based applications.
Installation
The INSTALL file describes how to build HAProxy. A list of packages is also available on the wiki.
Getting help
The discourse and the mailing-list are available for questions or configuration assistance. You can also use the slack or IRC channel. Please don't use the issue tracker for these.
The issue tracker is only for bug reports or feature requests.
Documentation
The HAProxy documentation has been split into a number of different files for ease of use. It is available in text format as well as HTML. The wiki is also meant to replace the old architecture guide.
Please refer to the following files depending on what you're looking for:
- INSTALL for instructions on how to build and install HAProxy
- BRANCHES to understand the project's life cycle and what version to use
- LICENSE for the project's license
- CONTRIBUTING for the process to follow to submit contributions
The more detailed documentation is located into the doc/ directory:
- doc/intro.txt for a quick introduction on HAProxy
- doc/configuration.txt for the configuration's reference manual
- doc/lua.txt for the Lua's reference manual
- doc/SPOE.txt for how to use the SPOE engine
- doc/network-namespaces.txt for how to use network namespaces under Linux
- doc/management.txt for the management guide
- doc/regression-testing.txt for how to use the regression testing suite
- doc/peers.txt for the peers protocol reference
- doc/coding-style.txt for how to adopt HAProxy's coding style
- doc/internals for developer-specific documentation (not all up to date)
License
HAProxy is licensed under GPL 2 or any later version, the headers under LGPL 2.1. See the LICENSE file for a more detailed explanation.