Skip to content
  • Andrey Azeev's avatar
    bfb2fe57
    fix(throttle): fail-open на протухшем Redis-коннекшене вместо 500 · bfb2fe57
    Andrey Azeev authored
    Запрос падал в 500, когда enforce_entry брал из пула протухшее
    Redis-соединение (закрытый uvloop TCPTransport). evalsha бил по мёртвому
    сокету сырым RuntimeError: ... the handler is closed; redis-py и tenacity
    такой тип не ретраят и не заворачивают в RedisError, поэтому он пробивал
    единственный except _REDIS_ERRORS и уходил в ASGI-границу необработанным.
    Нарушался инвариант модуля fail-open (ошибка Redis не роняет прокси).
    
    - lifecycle.py: health_check_interval=30.0 в RedisConfig — пул пингует
      idle-соединения и выбраковывает протухшие ДО записи (лечит корень).
    - enforce.py: fail-open в enforce_entry и record_status расширен на
      транспортные сбои (OSError, RuntimeError) через _FAIL_OPEN_ERRORS —
      страховка на окно между PING и реальной записью.
    - CHANGELOG.md: добавлен, записана эта правка.
    bfb2fe57
    fix(throttle): fail-open на протухшем Redis-коннекшене вместо 500
    Andrey Azeev authored
    Запрос падал в 500, когда enforce_entry брал из пула протухшее
    Redis-соединение (закрытый uvloop TCPTransport). evalsha бил по мёртвому
    сокету сырым RuntimeError: ... the handler is closed; redis-py и tenacity
    такой тип не ретраят и не заворачивают в RedisError, поэтому он пробивал
    единственный except _REDIS_ERRORS и уходил в ASGI-границу необработанным.
    Нарушался инвариант модуля fail-open (ошибка Redis не роняет прокси).
    
    - lifecycle.py: health_check_interval=30.0 в RedisConfig — пул пингует
      idle-соединения и выбраковывает протухшие ДО записи (лечит корень).
    - enforce.py: fail-open в enforce_entry и record_status расширен на
      транспортные сбои (OSError, RuntimeError) через _FAIL_OPEN_ERRORS —
      страховка на окно между PING и реальной записью.
    - CHANGELOG.md: добавлен, записана эта правка.
Loading