The rate_limit YAML parser reads each setting by direct key lookup and ignores anything it does not recognize. A typo or a stale key name silently leaves the setting at its default, with no diagnostic at config load.
This is how max-age went unnoticed: every worked example in the documentation spelled the queue and ip-rep aging key with a hyphen, while the parser reads max_age, so those configurations parsed cleanly and did nothing.
Parsing sites:
plugins/experimental/rate_limit/sni_selector.cc — lists, ip-rep, selector nodes
plugins/experimental/rate_limit/limiter.h — queue, metrics sub-nodes
plugins/experimental/rate_limit/ip_reputation.cc — ip-rep and perma-block sub-nodes
Each node should be validated against the set of keys it accepts, and an unrecognized key should fail the configuration load rather than be dropped.
The rate_limit YAML parser reads each setting by direct key lookup and ignores anything it does not recognize. A typo or a stale key name silently leaves the setting at its default, with no diagnostic at config load.
This is how
max-agewent unnoticed: every worked example in the documentation spelled the queue and ip-rep aging key with a hyphen, while the parser readsmax_age, so those configurations parsed cleanly and did nothing.Parsing sites:
plugins/experimental/rate_limit/sni_selector.cc—lists,ip-rep,selectornodesplugins/experimental/rate_limit/limiter.h—queue,metricssub-nodesplugins/experimental/rate_limit/ip_reputation.cc—ip-repandperma-blocksub-nodesEach node should be validated against the set of keys it accepts, and an unrecognized key should fail the configuration load rather than be dropped.