fix(tradein/proxy_pool): истёкший прокси больше не выдаётся в аренду #3303

Merged
lekss361 merged 1 commit from fix/proxy-pool-honour-expires-at into main 2026-08-31 11:54:55 +00:00

1 commit

Author SHA1 Message Date
bot-backend
a0a2f6ba5e fix(tradein/proxy_pool): истёкший прокси больше не выдаётся в аренду
All checks were successful
CI Trade-In / changes (pull_request) Successful in 10s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 14s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 5m21s
Колонка scrape_proxies.expires_at существовала, но acquire() её не читал
нигде. Когда аренда порта у провайдера заканчивается, он начинает отдавать
407 или просто рвать соединение, а пул продолжал выдавать такой узел. Каждый
запрос через него падал и классифицировался как ban_kind='infra', а 14 таких
из 20 в скользящем окне прерывают прогон добора. То есть один просроченный
порт ронял прогоны, пока человек вручную не заметит и не выключит узел.

Фильтр expires_at IS NULL OR expires_at > now() добавлен в обе ветки отбора —
основную по affinity и fallback. NULL означает «срок неизвестен» и выдаче не
мешает, отсекаются только реально просроченные. Время считает БД, не питон:
иначе рассинхрон часовых поясов.

Пропуск по сроку логируется предупреждением: оператору нужен явный сигнал
«порт просрочен», а не молчаливо сузившийся пул.
2026-08-31 14:38:11 +03:00