remove legacy in-memory search state fallback
This commit is contained in:
parent
d7404abf18
commit
1ce85304e3
17 changed files with 766 additions and 248 deletions
|
|
@ -1,6 +1,6 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from collections import defaultdict, deque
|
||||
from collections import deque
|
||||
from collections.abc import Callable
|
||||
from dataclasses import dataclass
|
||||
from math import ceil
|
||||
|
|
@ -25,14 +25,19 @@ class SlidingWindowRateLimiter:
|
|||
self._max_attempts = max_attempts
|
||||
self._window_seconds = window_seconds
|
||||
self._now = now
|
||||
self._attempts: dict[str, deque[float]] = defaultdict(deque)
|
||||
self._attempts: dict[str, deque[float]] = {}
|
||||
self._lock = Lock()
|
||||
|
||||
def check(self, key: str) -> RateLimitDecision:
|
||||
with self._lock:
|
||||
now_value = self._now()
|
||||
attempts = self._attempts[key]
|
||||
attempts = self._attempts.get(key)
|
||||
if attempts is None:
|
||||
return RateLimitDecision(allowed=True)
|
||||
self._trim_expired(attempts, now_value)
|
||||
if not attempts:
|
||||
self._attempts.pop(key, None)
|
||||
return RateLimitDecision(allowed=True)
|
||||
if len(attempts) >= self._max_attempts:
|
||||
retry_after = self._window_seconds - (now_value - attempts[0])
|
||||
return RateLimitDecision(
|
||||
|
|
@ -44,7 +49,10 @@ class SlidingWindowRateLimiter:
|
|||
def record_failure(self, key: str) -> None:
|
||||
with self._lock:
|
||||
now_value = self._now()
|
||||
attempts = self._attempts[key]
|
||||
attempts = self._attempts.get(key)
|
||||
if attempts is None:
|
||||
attempts = deque()
|
||||
self._attempts[key] = attempts
|
||||
self._trim_expired(attempts, now_value)
|
||||
attempts.append(now_value)
|
||||
|
||||
|
|
@ -59,4 +67,3 @@ class SlidingWindowRateLimiter:
|
|||
def _trim_expired(self, attempts: deque[float], now_value: float) -> None:
|
||||
while attempts and now_value - attempts[0] >= self._window_seconds:
|
||||
attempts.popleft()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue