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

Reply via email to