BUG/MEDIUM: cfgparse: do not allocate IDs to automatic internal proxies
Recent commit 83614a9fb ("MINOR: httpclient: initialize the proxy") broke reg tests that match the output of "show stats" or "show servers state" because it changed the proxies' numeric ID. In fact it did nothing wrong, it just registers a proxy and adds it at the head of the list. But the automatic numbering scheme, which was made to make sure that temporarily disabled proxies in the config keep their ID instead of shifting all others, sees one more proxy and increments next_pxid for all subsequent proxies. This patch avoids this by not assigning automatic IDs to such internal proxies, leaving them with their ID of -1, and by not shifting next_pxid for them. This is important because the user might experience them appearing or disappearing depending on apparently unrelated config options or build options, and this must not cause visible proxy IDs to change (e.g. stats or minitoring may break). Though the issue has always been there, it only became a problem with the recent proxy additions so there is no need to backport this.
This commit is contained in:
parent
b0281a4903
commit
d3dbfd9085
@ -2465,16 +2465,28 @@ int check_config_validity()
|
||||
struct logsrv *tmplogsrv;
|
||||
unsigned int next_id;
|
||||
|
||||
if (curproxy->uuid < 0) {
|
||||
if (!(curproxy->cap & PR_CAP_INT) && curproxy->uuid < 0) {
|
||||
/* proxy ID not set, use automatic numbering with first
|
||||
* spare entry starting with next_pxid.
|
||||
* spare entry starting with next_pxid. We don't assign
|
||||
* numbers for internal proxies as they may depend on
|
||||
* build or config options and we don't want them to
|
||||
* possibly reuse existing IDs.
|
||||
*/
|
||||
next_pxid = get_next_id(&used_proxy_id, next_pxid);
|
||||
curproxy->conf.id.key = curproxy->uuid = next_pxid;
|
||||
eb32_insert(&used_proxy_id, &curproxy->conf.id);
|
||||
}
|
||||
next_pxid++;
|
||||
|
||||
/* next IDs are shifted even if the proxy is disabled, this
|
||||
* guarantees that a proxy that is temporarily disabled in the
|
||||
* configuration doesn't cause a renumbering. Internal proxies
|
||||
* that are not assigned a static ID must never shift the IDs
|
||||
* either since they may appear in any order (Lua, logs, etc).
|
||||
* The GLOBAL proxy that carries the stats socket has its ID
|
||||
* forced to zero.
|
||||
*/
|
||||
if (curproxy->uuid >= 0)
|
||||
next_pxid++;
|
||||
|
||||
if (curproxy->disabled) {
|
||||
/* ensure we don't keep listeners uselessly bound. We
|
||||
|
Loading…
x
Reference in New Issue
Block a user