mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-01-29 14:01:50 +01:00
BUG/MINOR: haproxy: Fix option to disable the fast-forward
The option was renamed to only permit to disable the fast-forward. First there is no reason to enable it because it is the default behavior. Then it introduced a bug because there is no way to be sure the command line has precedence over the configuration this way. So, the option is now named "tune.disable-fast-forward" and does not support any argument. And of course, the commande line option "-dF" has now precedence over the configuration. No backport needed.
This commit is contained in:
parent
d17dd848c4
commit
2f7c82bfdf
@ -1123,7 +1123,7 @@ The following keywords are supported in the "global" section :
|
||||
- tune.buffers.reserve
|
||||
- tune.bufsize
|
||||
- tune.comp.maxlevel
|
||||
- tune.fast-forward
|
||||
- tune.disable-fast-forward
|
||||
- tune.fd.edge-triggered
|
||||
- tune.h2.header-table-size
|
||||
- tune.h2.initial-window-size
|
||||
@ -2832,23 +2832,22 @@ tune.comp.maxlevel <number>
|
||||
Each session using compression initializes the compression algorithm with
|
||||
this value. The default value is 1.
|
||||
|
||||
tune.disable-fast-forward [ EXPERIMENTAL ]
|
||||
Disables the data fast-forwarding. It is a mechanism to optimize the data
|
||||
forwarding by passing data directly from a side to the other one without
|
||||
waking the stream up. Thanks to this directive, it is possible to disable
|
||||
this optimization. Note it also disable any kernel tcp splicing. This command
|
||||
is not meant for regular use, it will generally only be suggested by
|
||||
developers along complex debugging sessions. For this reason it is internally
|
||||
marked as experimental, meaning that "expose-experimental-directives" must
|
||||
appear on a line before this directive.
|
||||
|
||||
tune.fail-alloc
|
||||
If compiled with DEBUG_FAIL_ALLOC or started with "-dMfail", gives the
|
||||
percentage of chances an allocation attempt fails. Must be between 0 (no
|
||||
failure) and 100 (no success). This is useful to debug and make sure memory
|
||||
failures are handled gracefully.
|
||||
|
||||
tune.fast-forward { on | off } [ EXPERIMENTAL ]
|
||||
|
||||
Enabled ('on') or disables ('off') the data fast-forwarding. It is a
|
||||
mechanism to optimize the data forwarding by passing data directly from a
|
||||
side to the other one without waking the stream up. Thanks to this directive,
|
||||
it is possible to disable this optimization. Note it also disable any kernel
|
||||
tcp splicing. This command is not meant for regular use, it will generally
|
||||
only be suggested by developers along complex debugging sessions. For this
|
||||
reason it is internally marked as experimental, meaning that
|
||||
"expose-experimental-directives" must appear on a line before this directive.
|
||||
|
||||
tune.fd.edge-triggered { on | off } [ EXPERIMENTAL ]
|
||||
Enables ('on') or disables ('off') the edge-triggered polling mode for FDs
|
||||
that support it. This is currently only support with epoll. It may noticeably
|
||||
|
||||
@ -80,7 +80,7 @@
|
||||
#define GTUNE_QUICK_EXIT (1<<23)
|
||||
#define GTUNE_QUIC_SOCK_PER_CONN (1<<24)
|
||||
#define GTUNE_NO_QUIC (1<<25)
|
||||
#define GTUNE_NO_FAST_FWD (1<<26)
|
||||
#define GTUNE_USE_FAST_FWD (1<<26)
|
||||
|
||||
/* SSL server verify mode */
|
||||
enum {
|
||||
|
||||
@ -493,7 +493,7 @@ int cfg_parse_global(const char *file, int linenum, char **args, int kwm)
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
else if (strcmp(args[0], "tune.fast-forward") == 0) {
|
||||
else if (strcmp(args[0], "tune.disable-fast-forward") == 0) {
|
||||
if (!experimental_directives_allowed) {
|
||||
ha_alert("parsing [%s:%d] : '%s' directive is experimental, must be allowed via a global 'expose-experimental-directives'",
|
||||
file, linenum, args[0]);
|
||||
@ -502,24 +502,9 @@ int cfg_parse_global(const char *file, int linenum, char **args, int kwm)
|
||||
}
|
||||
mark_tainted(TAINTED_CONFIG_EXP_KW_DECLARED);
|
||||
|
||||
if (alertif_too_many_args(1, file, linenum, args, &err_code))
|
||||
if (alertif_too_many_args(0, file, linenum, args, &err_code))
|
||||
goto out;
|
||||
if (*(args[1]) == 0) {
|
||||
ha_alert("parsing [%s:%d] : '%s' expects either 'on' or 'off' as argument.",
|
||||
file, linenum, args[0]);
|
||||
err_code |= ERR_ALERT | ERR_FATAL;
|
||||
goto out;
|
||||
}
|
||||
if (strcmp(args[1], "on") == 0)
|
||||
global.tune.options &= ~GTUNE_NO_FAST_FWD;
|
||||
else if (strcmp(args[1], "off") == 0)
|
||||
global.tune.options |= GTUNE_NO_FAST_FWD;
|
||||
else {
|
||||
ha_alert("parsing [%s:%d] : '%s' expects either 'on' or 'off' but got '%s'.",
|
||||
file, linenum, args[0], args[1]);
|
||||
err_code |= ERR_ALERT | ERR_FATAL;
|
||||
goto out;
|
||||
}
|
||||
global.tune.options &= GTUNE_USE_FAST_FWD;
|
||||
}
|
||||
else if (strcmp(args[0], "cluster-secret") == 0) {
|
||||
if (alertif_too_many_args(1, file, linenum, args, &err_code))
|
||||
|
||||
@ -1598,6 +1598,8 @@ static void init_args(int argc, char **argv)
|
||||
#endif
|
||||
global.tune.options |= GTUNE_STRICT_LIMITS;
|
||||
|
||||
global.tune.options |= GTUNE_USE_FAST_FWD; /* Use fast-forward by default */
|
||||
|
||||
/* keep a copy of original arguments for the master process */
|
||||
old_argv = copy_argv(argc, argv);
|
||||
if (!old_argv) {
|
||||
@ -1649,7 +1651,7 @@ static void init_args(int argc, char **argv)
|
||||
global.tune.options &= ~GTUNE_USE_REUSEPORT;
|
||||
#endif
|
||||
else if (*flag == 'd' && flag[1] == 'F')
|
||||
global.tune.options |= GTUNE_NO_FAST_FWD;
|
||||
global.tune.options &= ~GTUNE_USE_FAST_FWD;
|
||||
else if (*flag == 'd' && flag[1] == 'V')
|
||||
global.ssl_server_verify = SSL_SERVER_VERIFY_NONE;
|
||||
else if (*flag == 'V')
|
||||
|
||||
@ -941,7 +941,7 @@ int http_request_forward_body(struct stream *s, struct channel *req, int an_bit)
|
||||
}
|
||||
else {
|
||||
c_adv(req, htx->data - co_data(req));
|
||||
if (!(global.tune.options & GTUNE_NO_FAST_FWD) && (msg->flags & HTTP_MSGF_XFER_LEN))
|
||||
if ((global.tune.options & GTUNE_USE_FAST_FWD) && (msg->flags & HTTP_MSGF_XFER_LEN))
|
||||
channel_htx_forward_forever(req, htx);
|
||||
}
|
||||
|
||||
@ -2044,7 +2044,7 @@ int http_response_forward_body(struct stream *s, struct channel *res, int an_bit
|
||||
}
|
||||
else {
|
||||
c_adv(res, htx->data - co_data(res));
|
||||
if (!(global.tune.options & GTUNE_NO_FAST_FWD) && (msg->flags & HTTP_MSGF_XFER_LEN))
|
||||
if ((global.tune.options & GTUNE_USE_FAST_FWD) && (msg->flags & HTTP_MSGF_XFER_LEN))
|
||||
channel_htx_forward_forever(res, htx);
|
||||
}
|
||||
|
||||
|
||||
@ -2258,7 +2258,7 @@ struct task *process_stream(struct task *t, void *context, unsigned int state)
|
||||
* to the consumer.
|
||||
*/
|
||||
co_set_data(req, htx->data);
|
||||
if (!(global.tune.options & GTUNE_NO_FAST_FWD) && !(req->flags & (CF_SHUTR|CF_SHUTW_NOW)))
|
||||
if ((global.tune.options & GTUNE_USE_FAST_FWD) && !(req->flags & (CF_SHUTR|CF_SHUTW_NOW)))
|
||||
channel_htx_forward_forever(req, htx);
|
||||
}
|
||||
else {
|
||||
@ -2266,7 +2266,7 @@ struct task *process_stream(struct task *t, void *context, unsigned int state)
|
||||
* to the consumer (which might possibly not be connected yet).
|
||||
*/
|
||||
c_adv(req, ci_data(req));
|
||||
if (!(global.tune.options & GTUNE_NO_FAST_FWD) && !(req->flags & (CF_SHUTR|CF_SHUTW_NOW)))
|
||||
if ((global.tune.options & GTUNE_USE_FAST_FWD) && !(req->flags & (CF_SHUTR|CF_SHUTW_NOW)))
|
||||
channel_forward_forever(req);
|
||||
}
|
||||
}
|
||||
@ -2429,7 +2429,7 @@ struct task *process_stream(struct task *t, void *context, unsigned int state)
|
||||
* to the consumer.
|
||||
*/
|
||||
co_set_data(res, htx->data);
|
||||
if (!(global.tune.options & GTUNE_NO_FAST_FWD) && !(res->flags & (CF_SHUTR|CF_SHUTW_NOW)))
|
||||
if ((global.tune.options & GTUNE_USE_FAST_FWD) && !(res->flags & (CF_SHUTR|CF_SHUTW_NOW)))
|
||||
channel_htx_forward_forever(res, htx);
|
||||
}
|
||||
else {
|
||||
@ -2437,7 +2437,7 @@ struct task *process_stream(struct task *t, void *context, unsigned int state)
|
||||
* to the consumer.
|
||||
*/
|
||||
c_adv(res, ci_data(res));
|
||||
if (!(global.tune.options & GTUNE_NO_FAST_FWD) && !(res->flags & (CF_SHUTR|CF_SHUTW_NOW)))
|
||||
if ((global.tune.options & GTUNE_USE_FAST_FWD) && !(res->flags & (CF_SHUTR|CF_SHUTW_NOW)))
|
||||
channel_forward_forever(res);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user