Hey List,
Considering there is no option yet for maxconnrate for servers (I heard
this is on the roadmap), I wrote an ACL to check a backend server
session rate which we use to send to an "overflow" backend to prevent
latency responses to our clients (very sensitive latency requirements).
Unfortunately since it on a server by server basis, I have to set quite
a few of them in our environment.
I'm not much of a programmer, so if this is completely wrong let me know
however I can confirm this works as expected and does limit it properly
when called.
src/backend.c
@@ -1612,6 +1587,20 @@
return 1;
}
+static int
+acl_fetch_srv_sess_rate(struct proxy *px, struct session *l4, void *l7,
unsigned int opt,
+ const struct arg *args, struct sample *smp)
+{
+ smp->flags = SMP_F_VOL_TEST;
+ smp->type = SMP_T_UINT;
+ smp->data.uint = read_freq_ctr(&args->data.srv->sess_per_sec);
+ return 1;
+}
+
/* Note: must not be declared <const> as its list will be overwritten.
* Please take care of keeping this list alphabetically sorted.
*/
@@ -1620,11 +1609,11 @@
{ "be_conn", acl_parse_int, acl_fetch_be_conn,
acl_match_int, ACL_USE_NOTHING, ARG1(1,BE) },
{ "be_id", acl_parse_int, acl_fetch_be_id,
acl_match_int, ACL_USE_NOTHING, 0 },
{ "be_sess_rate", acl_parse_int, acl_fetch_be_sess_rate,
acl_match_int, ACL_USE_NOTHING, ARG1(1,BE) },
{ "connslots", acl_parse_int, acl_fetch_connslots,
acl_match_int, ACL_USE_NOTHING, ARG1(1,BE) },
{ "nbsrv", acl_parse_int, acl_fetch_nbsrv,
acl_match_int, ACL_USE_NOTHING, ARG1(1,BE) },
{ "queue", acl_parse_int, acl_fetch_queue_size,
acl_match_int, ACL_USE_NOTHING, ARG1(1,BE) },
{ "srv_conn", acl_parse_int, acl_fetch_srv_conn,
acl_match_int, ACL_USE_NOTHING, ARG1(1,SRV) },
+ { "srv_sess_rate", acl_parse_int, acl_fetch_srv_sess_rate,
acl_match_int, ACL_USE_NOTHING, ARG1(1,SRV) },
{ "srv_id", acl_parse_int, acl_fetch_srv_id,
acl_match_int, ACL_USE_RTR_INTERNAL, 0 },
{ "srv_is_up", acl_parse_nothing, acl_fetch_srv_is_up,
acl_match_nothing, ACL_USE_NOTHING, ARG1(1,SRV) },
{ NULL, NULL, NULL, NULL },
Let me know your thoughts.
- Tait