Repository navigation
Patch Changes
-
#1011
fd7679bThanks @chappie-daemon! - fix(rate-limit): send the backoff the strategy actually means, name an outage as an error, and bucket messages by typeThree defects on one wire path, from the spike in #1004.
The EWMA backoff was a half-life, sent as a delay.
RateLimit.periodis the decay half-life underewma, so the time until a limit lifts isperiod · log2(R_new / rate), notperiod. Withrate: 6, period: 60000, a client four times over the limit was told to wait 60 s and needed 120 s. The Lua script now returns its score instead of a yes/no, and the limiter returnsperiod · log2(score / rate). It was only accidentally safe before: the hash carried a TTL of exactlyperiod, so a quiet client's state expired anyway — an unstated coupling that would break the moment anyone lengthened the TTL to keep state warm.A limiter outage was announced as
rate-limited. A failing backend made every connected client back off for a fault on this side. It now answerserror: rate limiter unavailableand still rejects the event; fail-closed behaviour is unchanged.The message bucket ignored the message type. One bucket per client meant a
REQcould be refused because itsEVENTs had filled it — the wrong message throttled, and the wrong one told to back off. The bucket key now carries the type, read from a bounded prefix of the frame because the limiter runs before validation.IRateLimiter.hitreturnsIRateLimiterResult(limited, plusretryAfterMswhen the strategy can estimate one) so each strategy answers in its own terms; a caller with no estimate keeps sending the period. -
#1012
d8095deThanks @chappie-daemon! - fix(startup): print the banner as text, and letLOG_FORMAT=jsonopt out of itdocker compose logs nostreamshowed the logo as a single log record with the newlines escaped. The banner and its centred facts now go to stdout as text.A pipeline that requires every line to parse sets
LOG_FORMAT=json: the logo is then replaced by onerelay startingrecord carrying the same facts as fields (version,supportedNips,payments,eventStore,clientWorkers, …). Any other value keeps the banner, which is what a person reading the logs wants.