Hi, New fetcher which adds ability to retrieve default backend name for frontend. Should cleanly apply to both 1.8 & 1.9 branches. Regards,
Marcin Deranek
>From b2eeddea4859ab247b5315fb470706175797d434 Mon Sep 17 00:00:00 2001 From: Marcin Deranek <[email protected]> Date: Fri, 13 Apr 2018 14:37:50 +0200 Subject: [PATCH] MINOR: proxy: Add fe_defbe fetcher Patch adds ability to fetch frontend's default backend name in your logic, so it can be used later to derive other backend names to make routing decisions. --- doc/configuration.txt | 4 ++++ src/frontend.c | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/doc/configuration.txt b/doc/configuration.txt index 43c91114..1f44b8e3 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -13927,6 +13927,10 @@ fe_name : string backends to check from which frontend it was called, or to stick all users coming via a same frontend to the same server. +fe_defbe : string + Returns a string containing the frontend's default backend name. It can be + used in frontends to check which backend will handle requests by default. + sc_bytes_in_rate(<ctr>[,<table>]) : integer sc0_bytes_in_rate([<table>]) : integer sc1_bytes_in_rate([<table>]) : integer diff --git a/src/frontend.c b/src/frontend.c index 94d90f59..d935037d 100644 --- a/src/frontend.c +++ b/src/frontend.c @@ -194,6 +194,22 @@ smp_fetch_fe_name(const struct arg *args, struct sample *smp, const char *kw, vo return 1; } +/* set string to the name of the default backend */ +static int +smp_fetch_fe_defbe(const struct arg *args, struct sample *smp, const char *kw, void *private) +{ + if (!smp->sess->fe->defbe.be) + return 0; + smp->data.u.str.str = (char *)smp->sess->fe->defbe.be->id; + if (!smp->data.u.str.str) + return 0; + + smp->data.type = SMP_T_STR; + smp->flags = SMP_F_CONST; + smp->data.u.str.len = strlen(smp->data.u.str.str); + return 1; +} + /* set temp integer to the number of HTTP requests per second reaching the frontend. * Accepts exactly 1 argument. Argument is a frontend, other types will cause * an undefined behaviour. @@ -241,6 +257,7 @@ static struct sample_fetch_kw_list smp_kws = {ILH, { { "fe_conn", smp_fetch_fe_conn, ARG1(1,FE), NULL, SMP_T_SINT, SMP_USE_INTRN, }, { "fe_id", smp_fetch_fe_id, 0, NULL, SMP_T_SINT, SMP_USE_FTEND, }, { "fe_name", smp_fetch_fe_name, 0, NULL, SMP_T_STR, SMP_USE_FTEND, }, + { "fe_defbe", smp_fetch_fe_defbe, 0, NULL, SMP_T_STR, SMP_USE_FTEND, }, { "fe_req_rate", smp_fetch_fe_req_rate, ARG1(1,FE), NULL, SMP_T_SINT, SMP_USE_INTRN, }, { "fe_sess_rate", smp_fetch_fe_sess_rate, ARG1(1,FE), NULL, SMP_T_SINT, SMP_USE_INTRN, }, { /* END */ }, -- 2.16.1

