From a22db6567f21bbab96448386988dc021d8cf7d07 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sat, 22 Apr 2023 23:52:17 +0200 Subject: [PATCH] MEDIUM: peers: call bind_complete_thread_setup() to finish the config The listeners in peers sections were still not handing the thread groups fine. Shards were silently ignored and if a listener was bound to more than one group, it would simply fail. Now we can call the dedicated function to resolve all this and possibly create the missing extra listeners. bind_complete_thread_setup() was adjusted to use the proxy_type_str() instead of writing "proxy" at the only place where this word was still hard-coded so that we continue to speak about peers sections when relevant. --- src/cfgparse.c | 25 +++++++------------------ src/listener.c | 3 ++- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/cfgparse.c b/src/cfgparse.c index 6a9d42d651..2472a21598 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -4385,7 +4385,7 @@ init_proxies_list_stage2: if (!LIST_ISEMPTY(&curpeers->peers_fe->conf.bind)) { struct list *l; struct bind_conf *bind_conf; - struct listener *li; + int ret; l = &curpeers->peers_fe->conf.bind; bind_conf = LIST_ELEM(l->n, typeof(bind_conf), by_fe); @@ -4401,23 +4401,12 @@ init_proxies_list_stage2: } } - err = NULL; - if (thread_resolve_group_mask(&bind_conf->thread_set, 1, &err) < 0) { - ha_alert("Peers section '%s': %s in 'bind %s' at [%s:%d].\n", - curpeers->peers_fe->id, err, bind_conf->arg, bind_conf->file, bind_conf->line); - free(err); - cfgerr++; - } - else if (atleast2(bind_conf->thread_set.grps)) { - ha_alert("Peers section '%s': 'thread' spans more than one group in 'bind %s' at [%s:%d].\n", - curpeers->peers_fe->id, bind_conf->arg, bind_conf->file, bind_conf->line); - cfgerr++; - } - - /* apply thread masks and groups to all receivers */ - list_for_each_entry(li, &bind_conf->listeners, by_bind) { - li->rx.bind_thread = thread_set_nth_tmask(&bind_conf->thread_set, 0); - li->rx.bind_tgroup = thread_set_nth_group(&bind_conf->thread_set, 0); + /* finish the bind setup */ + ret = bind_complete_thread_setup(bind_conf, &err_code); + if (ret != 0) { + cfgerr += ret; + if (err_code & ERR_FATAL) + goto out; } if (bind_conf->xprt->prepare_bind_conf && diff --git a/src/listener.c b/src/listener.c index 67b64f69b2..8a3aa7caf8 100644 --- a/src/listener.c +++ b/src/listener.c @@ -1654,7 +1654,8 @@ int bind_complete_thread_setup(struct bind_conf *bind_conf, int *err_code) err = NULL; if (thread_resolve_group_mask(&bind_conf->thread_set, (fe == global.cli_fe) ? 1 : 0, &err) < 0) { - ha_alert("Proxy '%s': %s in 'bind %s' at [%s:%d].\n", + ha_alert("%s '%s': %s in 'bind %s' at [%s:%d].\n", + proxy_type_str(fe), fe->id, err, bind_conf->arg, bind_conf->file, bind_conf->line); free(err); cfgerr++; -- 2.47.3