mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-16 08:24:42 +00:00
MEDIUM: config: make the frontends automatically bind to the listeners' processes
When a frontend does not have any bind-process directive, make it automatically bind to the union of all of its listeners' processes instead of binding to all processes. That will make it possible to have the expected behaviour without having to explicitly specify a bind-process directive. Note that if the listeners are not bound to a specific process, the default is still to bind to all processes. This change could be backported to 1.5 as it simplifies process management, and was planned to be done during the 1.5 development phase.
This commit is contained in:
parent
64ab6077b7
commit
b369a045d5
@ -1914,6 +1914,10 @@ bind-process [ all | odd | even | <number 1-64>[-<number 1-64>] ] ...
|
||||
Each "bind" line may further be limited to a subset of the proxy's processes,
|
||||
please consult the "process" bind keyword in section 5.1.
|
||||
|
||||
When a frontend has no explicit "bind-process" line, it tries to bind to all
|
||||
the processes referenced by its "bind" lines. That means that frontends can
|
||||
easily adapt to their listeners' processes.
|
||||
|
||||
If some backends are referenced by frontends bound to other processes, the
|
||||
backend automatically inherits the frontend's processes.
|
||||
|
||||
|
@ -7309,11 +7309,47 @@ out_uri_auth_compat:
|
||||
}
|
||||
|
||||
/* At this point, target names have already been resolved */
|
||||
|
||||
/* Make each frontend inherit bind-process from its listeners when not specified. */
|
||||
for (curproxy = proxy; curproxy; curproxy = curproxy->next) {
|
||||
if (curproxy->bind_proc)
|
||||
continue;
|
||||
|
||||
list_for_each_entry(bind_conf, &curproxy->conf.bind, by_fe) {
|
||||
unsigned long mask;
|
||||
|
||||
mask = bind_conf->bind_proc ? bind_conf->bind_proc : ~0UL;
|
||||
curproxy->bind_proc |= mask;
|
||||
}
|
||||
|
||||
if (!curproxy->bind_proc)
|
||||
curproxy->bind_proc = ~0UL;
|
||||
}
|
||||
|
||||
if (global.stats_fe) {
|
||||
list_for_each_entry(bind_conf, &global.stats_fe->conf.bind, by_fe) {
|
||||
unsigned long mask;
|
||||
|
||||
mask = bind_conf->bind_proc ? bind_conf->bind_proc : ~0UL;
|
||||
global.stats_fe->bind_proc |= mask;
|
||||
}
|
||||
if (!global.stats_fe->bind_proc)
|
||||
global.stats_fe->bind_proc = ~0UL;
|
||||
}
|
||||
|
||||
/* propagate bindings from frontends to backends */
|
||||
for (curproxy = proxy; curproxy; curproxy = curproxy->next) {
|
||||
if (curproxy->cap & PR_CAP_FE)
|
||||
propagate_processes(curproxy, NULL);
|
||||
}
|
||||
|
||||
/* Bind each unbound backend to all processes when not specified. */
|
||||
for (curproxy = proxy; curproxy; curproxy = curproxy->next) {
|
||||
if (curproxy->bind_proc)
|
||||
continue;
|
||||
curproxy->bind_proc = ~0UL;
|
||||
}
|
||||
|
||||
/* automatically compute fullconn if not set. We must not do it in the
|
||||
* loop above because cross-references are not yet fully resolved.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user