Дробить плитку Overpass только при перегрузке, а не при отказе сети #3528
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#3528
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/poi-no-split-on-transport-error"
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?
Что случилось сегодня
Запустил загрузку точек интереса по Москве из PR 3524. Первые четыре запроса прошли, дальше overpass-api.de начал отказывать в соединении именно нашему серверу. Проверил с хоста: отказ приходит на оба адреса, при этом Nominatim с того же сервера отвечает 200, а недельная синхронизация Екатеринбурга успешно отработала вчера. То есть блокировка свежая и по нашему адресу.
Хуже другое: адаптивное дробление плитки восприняло отказ соединения как «запрос слишком тяжёлый» и начало делить квадрат на четверти. За три минуты вышло 58 отказов на 4 успеха, то есть механизм защиты от потери данных превратился в генератор стука в блокирующий хост.
Почему это дефект, а не невезение
Дробление лечит ровно один класс отказа: сервер не успел посчитать. Это 504, 429, 503 и таймаут чтения, и тогда четверть действительно посчитается. Отказ на уровне транспорта про размер запроса не говорит ничего, а рекурсия глубиной три множит один отказ на 4, 16, 64.
Что сделано
Отказ транспорта больше не дробит плитку и не повторяет запрос, а пропускает её. Пять таких отказов подряд останавливают весь прогон отдельной ошибкой: стучаться в хост, который нас не принимает, бессмысленно и вредно. Успешная плитка обнуляет счётчик, поэтому одиночные сетевые икоты не копятся до аварийной остановки.
Дробление осталось ровно там, где было задумано, и проверяется тем же тестом, только подложный ответ теперь отдаёт настоящий 504 вместо абстрактной ошибки.
Проверено
pytest tests/test_poi_loader.py— 12 passed. Три новых случая: отказ транспорта делает ровно один запрос без четвертей, пять подряд роняют прогон, чередование отказов с успехами до аварии не доходит. ruff check и format чисты.Загрузка Москвы будет перезапущена ночью, когда блокировка отпустит.