fix(ptica): бан НСПД по WAF больше не глотается сборщиком кварталов (#2464-A) #2881
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2881
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2464-waf-swallow-harvest"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что
harvest_quarterобещает в докстроке:Три голых
except Exceptionэто обещание отменяли.NspdBulkWafErrorнаследуется отNspdBulkError(RuntimeError), поэтому широкий обработчик ловил его наравне с сетевымтаймаутом и превращал бан IP в «этот cell/слой не дошёл». Обход продолжался, job доходил
до
status='done'с частичными данными.Замер на проде
cadastre_jobs, 13.08:50 WAF-блоков и ноль упавших job'ов. Контракт обещает остановку, а на практике бан ни
разу сбор не остановил.
Как
Три сайта, во всех —
except (NspdBulkWafError, NspdBulkRateLimitError): raiseпередширокими обработчиками:
:185search_by_quartercontinue:282get_territorial_zones_in_bbox:402_grid_walk_categorycontinueЗеркало уже исправленных
nspd_bulk_client.get_features_in_bbox_grid(Issue #252-mirror)и
nspd_client.get_features_in_bbox_grid(#2464-G, вчерашний PR #2873).Продолжать обход после 403 вредно вдвойне: углубляет бан и дописывает в БД ложный
нулевой слой, неотличимый от честного «здесь ничего нет».
Обработчик геометрии на
:265не тронут — там DB-исключение (ST_GeomFromGeoJSONнабитом GeoJSON), а не сеть.
Проверка
Тесты двусторонние. Против
bulk_harvest.pyиз main:Третий тест — намеренный контроль обратной крайности:
OSErrorв ячейке обход нероняет и
layer_failedне поднимает. Зелёный с обеих сторон.pytest tests/services/test_cadastre_bulk.py— 60 passedruff check— cleanЧего не смог измерить
Хотел разложить тот единственный job с 50 блоками по строкам (
job_id, длительность,сколько кварталов успело собраться до бана) — SSH к прод-хосту в этот момент отвалился
(
No route to host, потом восстановился). Агрегат выше снят до обрыва и достаточен длявывода; детализация — если понадобится, отдельно.
Refs #2464