From 31e8a003a516ba23f497a75b1f13400fbe35d6e1 Mon Sep 17 00:00:00 2001 From: Aurelien DARRAGON Date: Mon, 18 Sep 2023 17:14:22 +0200 Subject: [PATCH] MINOR: sink: function to add new sink servers Move the sft creation part out of sink_finalize() function so that it becomes possible to register sink's servers without forward_px being set. --- src/sink.c | 55 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/src/sink.c b/src/sink.c index d456ca20ff..785465a2de 100644 --- a/src/sink.c +++ b/src/sink.c @@ -844,6 +844,38 @@ static struct sink *sink_new_ringbuf(const char *id, const char *description, return NULL; } +/* helper function: add a new server to an existing sink + * + * Returns 1 on success and 0 on failure + */ +static int sink_add_srv(struct sink *sink, struct server *srv) +{ + struct sink_forward_target *sft; + + /* allocate new sink_forward_target descriptor */ + sft = calloc(1, sizeof(*sft)); + if (!sft) { + ha_alert("memory allocation error initializing server '%s' in ring '%s'.\n", srv->id, sink->name); + return 0; + } + sft->srv = srv; + sft->appctx = NULL; + sft->ofs = ~0; /* init ring offset */ + sft->sink = sink; + sft->next = sink->sft; + HA_SPIN_INIT(&sft->lock); + + /* mark server attached to the ring */ + if (!ring_attach(sink->ctx.ring)) { + ha_alert("server '%s' sets too many watchers > 255 on ring '%s'.\n", srv->id, sink->name); + ha_free(&sft); + return 0; + } + sink->sft = sft; + srv = srv->next; + return 1; +} + /* Finalize sink struct to ensure configuration consistency and * allocate final struct members * @@ -868,32 +900,13 @@ static int sink_finalize(struct sink *sink) /* prepare forward server descriptors */ if (sink->forward_px) { + /* sink proxy is set: register all servers from the proxy */ srv = sink->forward_px->srv; while (srv) { - struct sink_forward_target *sft; - - /* allocate sink_forward_target descriptor */ - sft = calloc(1, sizeof(*sft)); - if (!sft) { - ha_alert("memory allocation error initializing server '%s' in ring '%s'.\n", srv->id, sink->name); - err_code |= ERR_ALERT | ERR_FATAL; - break; - } - sft->srv = srv; - sft->appctx = NULL; - sft->ofs = ~0; /* init ring offset */ - sft->sink = sink; - sft->next = sink->sft; - HA_SPIN_INIT(&sft->lock); - - /* mark server attached to the ring */ - if (!ring_attach(sink->ctx.ring)) { - ha_alert("server '%s' sets too many watchers > 255 on ring '%s'.\n", srv->id, sink->name); + if (!sink_add_srv(sink, srv)) { err_code |= ERR_ALERT | ERR_FATAL; - ha_free(&sft); break; } - sink->sft = sft; srv = srv->next; } } -- 2.39.5