Hi Folks,

I'm looking for a way to count the number of in-flight operations per
user (extracted from the URL path) and store that value in a variable.
My goal is to track and enforce a per-user concurrency limit using
HAProxy's stick tables and GPC.

My approach is to use a GPC counter, incrementing it on request and
decrementing it when the response is sent.

Draft Configuration;
```
frontend http-in
    bind *:80

    stick-table type string size 1m expire 10m store gpc0
    http-request set-var(txn.user) path,regsub(^/([^/]+)/.*$,\1)
    http-request track-sc0 var(txn.user)

    # Increase in-flight counter
    http-request set-var(txn.gpc0) sc_inc_gpc0()

    # Limit concurrent requests per user to 5
    acl user_over_limit sc_get_gpc0() gt 5
    http-request deny if user_over_limit

    # Decrease in-flight counter when response is sent
    http-response set-var(txn.gpc0) sc_dec_gpc0()
    ...
```

However, sc_dec_gpc0() does not seem to be implemented yet. Do you
think such a function is needed, or is there another approach I could
take to track in-flight operations per user effectively?

Any insights or suggestions would be greatly appreciated.

Thanks,
Ansgar


Reply via email to