commit 3bd00f356783d331deba80de76c989d416e4a52e Author: Willy Tarreau Date: Thu Apr 11 14:47:08 2019 +0200 BUG/MEDIUM: pattern: assign pattern IDs after checking the config validity Pavlos Parissis reported an interesting case where some map identifiers were not assigned (appearing as -1 in show map). It turns out that it only happens for log-format expressions parsed in check_config_validity() that involve maps (log-format, use_backend, unique-id-header), as in the sample configuration below : frontend foo bind :8001 unique-id-format %[src,map(addr.lst)] log-format %[src,map(addr.lst)] use_backend %[src,map(addr.lst)] The reason stems from the initial introduction of unique IDs in 1.5 via commit af5a29d5f ("MINOR: pattern: Each pattern is identified by unique id.") : the unique_id assignment was done before calling check_config_validity() so all maps loaded after this call are not properly configured. From what the function does, it seems they will not be able to use a cache, will not have a unique_id assigned and will not be updatable from the CLI. This fix must be backported to all supported versions. (cherry picked from commit 0f93672dfea805268d674c97573711fbff7e0e70) Signed-off-by: William Lallemand (cherry picked from commit ba475a5b390f58450756da67dbf54bf063f2dbef) Signed-off-by: Christopher Faulet diff --git a/src/haproxy.c b/src/haproxy.c index 5c3febdd..105cde6f 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -1570,14 +1570,14 @@ static void init(int argc, char **argv) exit(1); } - pattern_finalize_config(); - err_code |= check_config_validity(); if (err_code & (ERR_ABORT|ERR_FATAL)) { ha_alert("Fatal errors found in configuration.\n"); exit(1); } + pattern_finalize_config(); + /* recompute the amount of per-process memory depending on nbproc and * the shared SSL cache size (allowed to exist in all processes). */